recoll-1.43.12/0000755000175000017500000000000015134720416012447 5ustar dockesdockesrecoll-1.43.12/qtgui/0000755000175000017500000000000015134672441013604 5ustar dockesdockesrecoll-1.43.12/qtgui/ssearch_w.h0000644000175000017500000001022115125756472015736 0ustar dockesdockes/* Copyright (C) 2006 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _SSEARCH_W_H_INCLUDED_ #define _SSEARCH_W_H_INCLUDED_ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include "recoll.h" #include "searchdata.h" #include "ui_ssearchb.h" struct SSearchDef; class SSearch; class QCompleter; class QTimer; class QShortcut; class RclCompleterModel : public QAbstractTableModel { Q_OBJECT public: RclCompleterModel(SSearch *parent = 0) : QAbstractTableModel((QWidget*)parent), m_parent(parent) { init(); } int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; public slots: virtual void onPartialWord(int, const QString&, const QString&); private: void init(); std::vector> currentlist; int firstfromindex; QPixmap clockPixmap; QPixmap interroPixmap; SSearch *m_parent{nullptr}; }; class SSearch : public QWidget, public Ui::SSearchBase { Q_OBJECT public: // The values MUST NOT change, there are assumptions about them in // different parts of the code enum SSearchType {SST_ANY = 0, SST_ALL = 1, SST_FNM = 2, SST_LANG = 3, SST_SEM = 4}; SSearch(QWidget* parent = 0, const char * = 0) : QWidget(parent) { setupUi(this); init(); } virtual void init(); virtual void setAnyTermMode(); virtual bool hasSearchString(); // Return last performed search as XML text. virtual std::string asXML(); // Restore ssearch UI from saved search virtual bool fromXML(const SSearchDef& fxml); virtual QString currentText(); virtual bool eventFilter(QObject *target, QEvent *event); virtual void setupButtons(); SSearchType getSearchType(); public slots: virtual void onSearchTypeChanged(int); virtual void setSearchString(const QString& text); virtual void startSimpleSearch(); virtual void addTerm(QString); virtual void onWordReplace(const QString&, const QString&); virtual void takeFocus(); // Forget current entry and any state (history) virtual void clearAll(); virtual void setPrefs(); virtual void onNewShortcuts(); private slots: virtual void searchTextChanged(const QString&); virtual void searchTextEdited(const QString&); virtual void onCompletionActivated(const QString&); virtual void restoreText(bool startsearch=false); virtual void onHistoryClicked(); virtual void onCompleterShown(); signals: void startSearch(std::shared_ptr, bool); void setDescription(QString); void clearSearch(); void partialWord(int, const QString& text, const QString &partial); void ssearchTypeChanged(int typ); private: bool startSimpleSearch(const std::string& q, int maxexp = -1); bool checkExtIndexes(const std::vector& dbs); RclCompleterModel *m_completermodel{nullptr}; QCompleter *m_completer{nullptr}; QShortcut *m_histsc{nullptr}; /* We save multiword entries because the completer replaces them with the completion */ QString m_savedEditText; /* Saved xml version of the search, as we start it */ std::string m_xml; }; #endif /* _SSEARCH_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/viewaction_w.cpp0000644000175000017500000002164215124755060017011 0ustar dockesdockes/* Copyright (C) 2006-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "viewaction_w.h" #include #include #include #include #include #include "recoll.h" #include "log.h" #include "guiutils.h" #include "smallut.h" #include "rclhelp.h" #ifdef _WIN32 #include "pathut.h" #endif static const char *settingskey_fieldwidths="/Recoll/prefs/viewActionWidths"; static const char *settingskey_height="/Recoll/prefs/viewActionHeight"; static const char *settingskey_width="/Recoll/prefs/viewActionWidth"; void ViewAction::init() { selSamePB->setEnabled(false); connect(closePB, SIGNAL(clicked()), this, SLOT(onClose())); connect(chgActPB, SIGNAL(clicked()), this, SLOT(editActions())); connect(actionsLV, SIGNAL(currentItemChanged(QTableWidgetItem *, QTableWidgetItem *)), this, SLOT(onCurrentItemChanged(QTableWidgetItem *, QTableWidgetItem *))); useDesktopCB->setChecked(prefs.useDesktopOpen); onUseDesktopCBToggled(prefs.useDesktopOpen); connect(useDesktopCB, SIGNAL(stateChanged(int)), this, SLOT(onUseDesktopCBToggled(int))); connect(setExceptCB, SIGNAL(stateChanged(int)), this, SLOT(onSetExceptCBToggled(int))); connect(selSamePB, SIGNAL(clicked()), this, SLOT(onSelSameClicked())); QSettings settings; auto w = settings.value(settingskey_width).toInt(); auto h = settings.value(settingskey_height).toInt(); if (w != 0 && h != 0) { resize(QSize(w, h).expandedTo(minimumSizeHint())); } auto qw = settings.value(settingskey_fieldwidths).toString(); if (!qw.isEmpty()) { auto *header = actionsLV->horizontalHeader(); std::vector vw; stringToStrings(qs2utf8s(qw), vw); if (int(vw.size()) == header->count()) { for (unsigned int i = 0; i < vw.size(); i++) { header->resizeSection(i, atoi(vw[i].c_str())); } } } (void)new HelpClient(this); HelpClient::installMap(qs2u8s(objectName()), "RCL.SEARCH.GUI.CUSTOM.APPLICATIONS"); } void ViewAction::onClose() { QSettings settings; auto *header = actionsLV->horizontalHeader(); std::vector vw; for (int i = 0; i < 2; i++){ vw.push_back(std::to_string(header->sectionSize(i))); } auto s = stringsToString(vw); settings.setValue(settingskey_fieldwidths, u8s2qs(s)); settings.setValue(settingskey_width, width()); settings.setValue(settingskey_height, height()); close(); } void ViewAction::onUseDesktopCBToggled(int onoff) { prefs.useDesktopOpen = onoff != 0; fillLists(); setExceptCB->setEnabled(prefs.useDesktopOpen); } void ViewAction::onSetExceptCBToggled(int onoff) { newActionLE->setEnabled(onoff != 0); } void ViewAction::fillLists() { currentLBL->clear(); actionsLV->clear(); actionsLV->verticalHeader()->setDefaultSectionSize(20); std::vector > defs; theconfig->getMimeViewerDefs(defs); actionsLV->setRowCount(static_cast(defs.size())); std::set viewerXs; if (prefs.useDesktopOpen) { viewerXs = theconfig->getMimeViewerAllEx(); } int row = 0; for (const auto& def : defs) { actionsLV->setItem(row, 0, new QTableWidgetItem(u8s2qs(def.first))); if (!prefs.useDesktopOpen || viewerXs.find(def.first) != viewerXs.end()) { actionsLV->setItem(row, 1, new QTableWidgetItem(u8s2qs(def.second))); } else { actionsLV->setItem(row, 1, new QTableWidgetItem(tr("Desktop Default"))); } row++; } QStringList labels(tr("MIME type")); labels.push_back(tr("Command")); actionsLV->setHorizontalHeaderLabels(labels); } void ViewAction::selectMT(const QString& mt) { actionsLV->clearSelection(); QListitems = actionsLV->findItems(mt, Qt::MatchFixedString|Qt::MatchCaseSensitive); for (QList::iterator it = items.begin(); it != items.end(); it++) { (*it)->setSelected(true); actionsLV->setCurrentItem(*it, QItemSelectionModel::Columns); } } void ViewAction::onSelSameClicked() { actionsLV->clearSelection(); QString value = currentLBL->text(); if (value.isEmpty()) return; std::string action = qs2utf8s(value); LOGDEB1("ViewAction::onSelSameClicked: value: " << action << std::endl); std::vector > defs; theconfig->getMimeViewerDefs(defs); for (const auto& def : defs) { if (def.second == action) { QListitems = actionsLV->findItems( u8s2qs(def.first), Qt::MatchFixedString|Qt::MatchCaseSensitive); for (QList::iterator it = items.begin(); it != items.end(); it++) { (*it)->setSelected(true); actionsLV->item((*it)->row(), 1)->setSelected(true); } } } } void ViewAction::onCurrentItemChanged(QTableWidgetItem *item, QTableWidgetItem *) { currentLBL->clear(); selSamePB->setEnabled(false); if (nullptr == item) { return; } QTableWidgetItem *item0 = actionsLV->item(item->row(), 0); std::string mtype = qs2utf8s(item0->text()); std::vector > defs; theconfig->getMimeViewerDefs(defs); for (const auto& def : defs) { if (def.first == mtype) { currentLBL->setText(u8s2qs(def.second)); selSamePB->setEnabled(true); return; } } } void ViewAction::editActions() { QString action0; bool except0 = false; std::set viewerXs = theconfig->getMimeViewerAllEx(); std::vector mtypes; bool dowarnmultiple = true; for (int row = 0; row < actionsLV->rowCount(); row++) { QTableWidgetItem *item0 = actionsLV->item(row, 0); if (!item0->isSelected()) continue; std::string mtype = qs2utf8s(item0->text()); mtypes.push_back(mtype); QTableWidgetItem *item1 = actionsLV->item(row, 1); QString action = item1->text(); bool except = viewerXs.find(mtype) != viewerXs.end(); if (action0.isEmpty()) { action0 = action; except0 = except; } else { if ((action != action0 || except != except0) && dowarnmultiple) { switch (QMessageBox::warning( 0, "Recoll", tr("Changing entries with different current values"), QMessageBox::Ignore | QMessageBox::Cancel, QMessageBox::Cancel)) { case QMessageBox::Ignore: dowarnmultiple = false; break; case QMessageBox::Cancel: default: return; } } } } if (action0.isEmpty()) return; std::string sact = qs2utf8s(newActionLE->text()); if (!sact.empty()) { trimstring(sact); #ifdef _WIN32 path_slashize(sact); #endif } for (const auto& entry : mtypes) { auto xit = viewerXs.find(entry); if (setExceptCB->isChecked()) { if (xit == viewerXs.end()) { viewerXs.insert(entry); } } else { if (xit != viewerXs.end()) { viewerXs.erase(xit); } } // An empty action will restore the default (erase from // topmost conftree). IF there is no default in the system // files, and the entry only came from the user file, it will // be erased and the mime will go away from the list, which is // not what we want ! This not trivial to test because // rclconfig has no way to tell us if the value comes from the // system config or the user file. So just check if the value // disappears after setting it, and restore it if it does. std::string oldvalue = theconfig->getMimeViewerDef(entry, "", 0); theconfig->setMimeViewerDef(entry, sact); std::string newvalue = theconfig->getMimeViewerDef(entry, "", 0); if (!oldvalue.empty() && newvalue.empty()) { theconfig->setMimeViewerDef(entry, oldvalue); } } theconfig->setMimeViewerAllEx(viewerXs); fillLists(); } recoll-1.43.12/qtgui/systray.cpp0000644000175000017500000000417514753313624016036 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "systray.h" #include "rclmain_w.h" #include "log.h" void RclTrayIcon::init() { QAction *restoreAction = new QAction(tr("Restore"), this); QAction *quitAction = new QAction(tr("Quit"), this); connect(restoreAction, SIGNAL(triggered()), this, SLOT(onRestore())); connect(quitAction, SIGNAL(triggered()), m_mainw, SLOT(fileExit())); QMenu *trayIconMenu = new QMenu(0); trayIconMenu->addAction(restoreAction); trayIconMenu->addAction(quitAction); setContextMenu(trayIconMenu); connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onActivated(QSystemTrayIcon::ActivationReason))); } void RclTrayIcon::onRestore() { // Hide and show to restore on current desktop m_mainw->hide(); switch (prefs.showmode) { case PrefsPack::SHOW_NORMAL: m_mainw->show(); break; case PrefsPack::SHOW_MAX: m_mainw->showMaximized(); break; case PrefsPack::SHOW_FULL: m_mainw->showFullScreen(); break; } } void RclTrayIcon::onActivated(QSystemTrayIcon::ActivationReason reason) { LOGDEB("RclTrayIcon::onActivated: reason " << reason << std::endl); switch (reason) { case QSystemTrayIcon::DoubleClick: case QSystemTrayIcon::Trigger: case QSystemTrayIcon::MiddleClick: onRestore(); break; default: return; } } recoll-1.43.12/qtgui/rclm_saveload.cpp0000644000175000017500000001012315121730573017115 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" /** Saving and restoring named queries */ #include #include #include #include "rclmain_w.h" #include "log.h" #include "readfile.h" #include "xmltosd.h" #include "searchdata.h" #include "copyfile.h" #include "pathut.h" using namespace std; using namespace Rcl; static QString prevDir() { QSettings settings; QString prevdir = settings.value("/Recoll/prefs/lastQuerySaveDir").toString(); string defpath = path_cat(theconfig->getConfDir(), "saved_queries"); if (prevdir.isEmpty()) { if (!path_exists(defpath)) { path_makepath(defpath, 0700); } return path2qs(defpath); } else { return prevdir; } } void RclMain::saveLastQuery() { string xml; if (lastSearchSimple()) { xml = sSearch->asXML(); } else { if (g_advshistory) { std::shared_ptr sd; sd = g_advshistory->getnewest(); if (sd) { xml = sd->asXML(); } } } if (xml.empty()) { QMessageBox::information(this, tr("No search"), tr("No preserved previous search")); return; } xml = string("\n") + "\n" + xml + "\n\n"; QFileDialog fileDialog(this, tr("Choose file to save")); fileDialog.setNameFilter(tr("Saved Queries (*.rclq)")); fileDialog.setDefaultSuffix("rclq"); fileDialog.setAcceptMode(QFileDialog::AcceptSave); fileDialog.setDirectory(prevDir()); if (!fileDialog.exec()) return; auto selfiles = fileDialog.selectedFiles(); auto s = selfiles.first(); if (s.isEmpty()) { return; } string tofile(qs2path(s)); // Work around qt 5.9-11 bug (linux at least): defaultSuffix is // not added to saved file name string suff = path_suffix(tofile); if (suff.compare("rclq")) { tofile += ".rclq"; } LOGDEB("RclMain::saveLastQuery: XML: [" << xml << "]\n"); string reason; if (!stringtofile(xml, tofile.c_str(), reason)) { QMessageBox::warning(this, tr("Write failed"), tr("Could not write to file")); } return; } void RclMain::loadSavedQuery() { QString s = QFileDialog::getOpenFileName(this, "Open saved query", prevDir(), tr("Saved Queries (*.rclq)")); if (s.isEmpty()) return; string fromfile(qs2path(s)); string xml, reason; if (!file_to_string(fromfile, xml, &reason)) { QMessageBox::warning(this, tr("Read failed"), tr("Could not open file: ") + QString::fromUtf8(reason.c_str())); return; } // Try to parse as advanced search SearchData. This fails because of the "type" attribute if // this is a simple search entry. std::shared_ptr sd = SearchData::fromXML(xml, false); if (sd) { showAdvSearchDialog(); asearchform->fromSearch(sd); return; } LOGDEB1("loadSavedQuery: Not advanced search. Parsing as simple search\n"); // Try to parse as Simple Search SSearchDef sdef; if (xmlToSSearch(xml, sdef)) { if (sSearch->fromXML(sdef)) return; } QMessageBox::warning(this, tr("Load error"), tr("Could not load saved query")); } recoll-1.43.12/qtgui/rclmain_w.h0000644000175000017500000002541515121730573015734 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef RCLMAIN_W_H #define RCLMAIN_W_H #include "autoconfig.h" #include #include #include #include #include "sortseq.h" #include "recoll.h" #include "advsearch_w.h" #include "rcldb.h" #include "searchdata.h" #include "spell_w.h" #include "pathut.h" #include "guiutils.h" #include "rclutil.h" class SnippetsW; class IdxSchedW; class ExecCmd; class Preview; class ResTable; class CronToolW; class WinSchedToolW; class RTIToolW; class FragButs; class SpecIdxW; class WebcacheEdit; class ConfIndexW; class RclTrayIcon; class QShortcut; class QActionGroup; class ActSearchW; class IdxTreeModel; class UIPrefsDialog; class ConfigSwitchW; class PTransEdit; #include "ui_rclmain.h" class RclMain : public QMainWindow, public Ui::RclMainBase { Q_OBJECT public: RclMain(QWidget * parent = 0) : QMainWindow(parent) { setupUi(this); init(); } ~RclMain() {} RclMain(const RclMain&) = delete; RclMain& operator=(const RclMain&) = delete; QString getQueryDescription(); /** This is only called from main() to set an URL to be displayed (using recoll as a doc extracter for embedded docs */ virtual void setUrlToView(const QString& u) { m_urltoview = u; } /** Same usage: actually display the current urltoview */ virtual void viewUrl(); bool lastSearchSimple() { return m_searchIsSimple; } // Takes copies of the args instead of refs. Lazy and safe. void newDupsW(const Rcl::Doc doc, const std::vector dups); enum IndexerState {IXST_UNKNOWN, IXST_NOTRUNNING, IXST_RUNNINGMINE, IXST_RUNNINGNOTMINE}; IndexerState indexerState() const { return m_indexerState; } void enableTrayIcon(bool onoff); void setupToolbars(); void setupStatusBar(); void buildMenus(); void setupMenus(); void setupCategoryFiltering(); enum SideFilterUpdateReason{SFUR_INIT, SFUR_USERCONFIG, SFUR_INDEXCONTENTS}; public slots: virtual void fileExit(); virtual void periodic100(); virtual void toggleIndexing(); virtual void startMonitor(); virtual void bumpIndexing(); virtual void rebuildIndex(); virtual void specialIndex(); virtual void startSearch(std::shared_ptr sdata, bool issimple); virtual void previewClosed(Preview *w); virtual void showAdvSearchDialog(); virtual void showSpellDialog(); virtual void showWebcacheDialog(); virtual void showIndexStatistics(); virtual void showFragButs(); virtual void showSpecIdx(); virtual void showAboutDialog(); virtual void showMissingHelpers(); virtual void showActiveTypes(); virtual void startOnlineManual(); virtual void startManual(const std::string& = std::string()); virtual void showDocHistory(); virtual void showExtIdxDialog(); virtual void setSynEnabled(bool); virtual void showUIPrefs(); virtual void showIndexConfig(); virtual void showPTrans(const QString& = ""); virtual void delPTrans(); virtual void execIndexConfig(); virtual void showConfigSwitch(); virtual void showCronTool(); virtual void execCronTool(); virtual void showRTITool(); virtual void execRTITool(); virtual void showIndexSched(); virtual void execIndexSched(); virtual void setUIPrefs(); virtual void enableNextPage(bool); virtual void enablePrevPage(bool); virtual void docExpand(Rcl::Doc); virtual void showSubDocs(Rcl::Doc); virtual void showSnippets(Rcl::Doc); virtual void showActionsSearch(); virtual void startPreview(int docnum, Rcl::Doc doc, int keymods); virtual void startPreview(Rcl::Doc); virtual void startNativeViewer(Rcl::Doc, int pagenum = -1, QString term = QString(), int line = -1, bool enterHistory=true); virtual void openWith(Rcl::Doc, std::string); virtual void saveDocToFile(Rcl::Doc); virtual void populateSideFilters(RclMain::SideFilterUpdateReason); virtual void previewNextInTab(Preview *, int sid, int docnum); virtual void previewPrevInTab(Preview *, int sid, int docnum); virtual void previewExposed(Preview *, int sid, int docnum); virtual void resetSearch(); virtual void eraseDocHistory(); virtual void eraseSearchHistory(); virtual void exportSimpleSearchHistory(); virtual void saveLastQuery(); virtual void loadSavedQuery(); virtual void setStemLang(QAction *id); virtual void adjustPrefsMenu(); virtual void catgFilter(int); virtual void catgFilter(QAction *); virtual void onFragmentsChanged(); virtual void initDbOpen(); virtual void toggleFullScreen(); virtual void sortByDateAsc(bool on); virtual void sortByDateDesc(bool on); virtual void showResultsAsTable(bool on); virtual void onSortDataChanged(DocSeqSortSpec); virtual void onExtSortDataChanged(DocSeqSortSpec); virtual void resultCount(int); virtual void setFilterCtlStyle(int stl); virtual void showTrayMessage(const QString& text); virtual void onSetDescription(QString); virtual void onNewShortcuts(); virtual void toggleTable(); virtual void clearDirFilter(); virtual void hideToolTip(); virtual void zoomIn(); virtual void zoomOut(); virtual void setFiltSpec(); virtual void onSSearchTypeChanged(int); virtual void enableSideFilters(bool enable); private slots: virtual bool updateIdxStatus(); virtual void onWebcacheDestroyed(QObject *); virtual void onSSTypMenu(QAction *act); virtual void onSSTypCMB(int); virtual void sideFilterChanged(); signals: void docSourceChanged(std::shared_ptr); void stemLangChanged(const QString& lang); void sortDataChanged(DocSeqSortSpec); void resultsReady(); void searchReset(); void uiPrefsChanged(); protected: virtual void closeEvent(QCloseEvent *); virtual void showEvent(QShowEvent *); private: SnippetsW *m_snippets{0}; Preview *curPreview{0}; AdvSearch *asearchform{0}; UIPrefsDialog *uiprefs{0}; ConfIndexW *indexConfig{0}; PTransEdit *pathTrans{0}; IdxSchedW *indexSched{0}; #ifdef _WIN32 WinSchedToolW *cronTool{0}; #else CronToolW *cronTool{0}; #endif RTIToolW *rtiTool{0}; SpellW *spellform{0}; FragButs *fragbuts{0}; SpecIdxW *specidx{0}; QTimer *periodictimer{0}; WebcacheEdit *webcache{0}; ResTable *restable{0}; ResTable *m_dupsw{0}; bool displayingTable{false}; ActSearchW *actsearchw{0}; ConfigSwitchW *configswitchw{0}; QAction *m_idNoStem{0}; QAction *m_idAllStem{0}; QToolBar *m_toolsTB{0}; QToolBar *m_resTB{0}; QFrame *m_filtFRM{0}; QComboBox *m_filtCMB{0}; QButtonGroup *m_filtBGRP{0}; QMenu *m_filtMN{0}; QShortcut *m_focustotablesc{0}; QShortcut *m_focustosearchsc{0}; QShortcut *m_focustosearcholdsc{0}; QShortcut *m_clearsearchsc{0}; QShortcut *m_toggletablesc{0}; QShortcut *m_actionssearchsc{0}; QShortcut *m_cleardirfiltersc{0}; QShortcut *m_showadvsearchsc{0}; QFileSystemWatcher m_watcher; std::vector m_viewers; ExecCmd *m_idxproc{0}; // Indexing process bool m_idxkilled{false}; // Killed my process TempFile *m_idxreasontmp{nullptr}; std::map m_stemLangToId; std::vector m_catgbutvec; int m_catgbutvecidx{0}; DocSeqFiltSpec m_filtspec; bool m_sortspecnochange{false}; DocSeqSortSpec m_sortspec; int m_sortspecsearchtype{-1}; std::shared_ptr m_source; IndexerState m_indexerState{IXST_UNKNOWN}; bool m_queryActive{false}; bool m_firstIndexing{false}; // Last search was started from simple bool m_searchIsSimple{false}; // This is set to the query string by ssearch, and to empty by // advsearch, and used for the Preview window title. If empty, we // use the Xapian Query string. QString m_queryDescription; // If set on init, will be displayed either through ext app, or // preview (if no ext app set) QString m_urltoview; RclTrayIcon *m_trayicon{0}; // We sometimes take the indexer lock (e.g.: when editing the webcache) Pidfile *m_pidfile{0}; IdxTreeModel *m_idxtreemodel{nullptr}; // Menu for the button version of the top menu. QMenu *buttonTopMenu; // Entries/submenus for the top menu. QMenu *fileMenu; QMenu *viewMenu; QMenu *toolsMenu; QMenu *preferencesMenu; QMenu *helpMenu; QMenu *resultsMenu; QActionGroup *sstypGroup; QMenu *queryMenu; QShortcut *butmenuSC{nullptr}; virtual void init(); virtual void setupResTB(bool combo); virtual void previewPrevOrNextInTab(Preview *, int sid, int docnum, bool next); // flags may contain ExecCmd::EXF_xx values virtual void execViewer(const std::map& subs, bool enterHistory, const std::string& execpath, const std::vector& lcmd, const std::string& cmd, Rcl::Doc doc, int flags=0); virtual void setStemLang(const QString& lang); virtual void onSortCtlChanged(); virtual void showIndexConfig(bool modal); virtual void showIndexSched(bool modal); virtual void showCronTool(bool modal); virtual void showRTITool(bool modal); virtual void updateIdxForDocs(std::vector&); virtual void initiateQuery(); virtual bool containerUpToDate(Rcl::Doc& doc); virtual bool checkIdxPaths(); virtual std::vector idxTreeGetDirs(); virtual void resultsSetFixedGeometry(); }; #endif // RCLMAIN_W_H recoll-1.43.12/qtgui/respopup.cpp0000644000175000017500000001647715121730573016201 0ustar dockesdockes/* Copyright (C) 2005-2022 J.F.Dockes * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include "log.h" #include "smallut.h" #include "recoll.h" #include "docseq.h" #include "respopup.h" #include "appformime.h" #include "rclmain_w.h" #include "utf8iter.h" #include "rclutil.h" using std::string; using std::vector; using std::map; using std::list; namespace ResultPopup { QMenu *create(QWidget *me, int opts, std::shared_ptr source, Rcl::Doc& doc) { QMenu *popup = new QMenu(me); LOGDEB("ResultPopup::create: opts " << opts << " haspages " << doc.haspages << " " << (source ? "Source not null" : "Source is Null") << " " << (source ? (source->snippetsCapable() ? "snippetsCapable":"not snippetsCapable") : "") << "\n"); string apptag; doc.getmeta(Rcl::Doc::keyapptg, &apptag); // Is this a top level file system file (accessible by regular utilities)? bool isFsTop = doc.ipath.empty() && doc.isFsFile(); popup->addAction(QWidget::tr("&Preview"), me, SLOT(menuPreview())); if (!theconfig->getMimeViewerDef(doc.mimetype, apptag, 0).empty()) { popup->addAction(QWidget::tr("&Open"), me, SLOT(menuEdit())); } if (isFsTop) { // Openable by regular program. Add "open with" entry. vector apps; DesktopDb *ddb = DesktopDb::getDb(); if (ddb && ddb->appForMime(doc.mimetype, &apps) && !apps.empty()) { QMenu *sub = popup->addMenu(QWidget::tr("Open With")); if (sub) { for (const auto& app : apps) { QAction *act = new QAction(u8s2qs(app.name), me); QVariant v(u8s2qs(app.command)); act->setData(v); sub->addAction(act); } sub->connect(sub, SIGNAL(triggered(QAction *)), me, SLOT(menuOpenWith(QAction *))); } } // See if there are any desktop files in $RECOLL_CONFDIR/scripts // and possibly create a "run script" menu. apps.clear(); ddb = new DesktopDb(path_cat(theconfig->getConfDir(), "scripts")); if (ddb && ddb->allApps(&apps) && !apps.empty()) { QMenu *sub = popup->addMenu(QWidget::tr("Run Script")); if (sub) { for (const auto& app : apps) { QAction *act = new QAction(u8s2qs(app.name), me); QVariant v(u8s2qs(app.command)); act->setData(v); sub->addAction(act); } sub->connect(sub, SIGNAL(triggered(QAction *)), me, SLOT(menuOpenWith(QAction *))); } } delete ddb; } if (doc.isFsFile()) { popup->addAction(QWidget::tr("Copy &File Path"), me, SLOT(menuCopyPath())); } popup->addAction(QWidget::tr("Copy &URL"), me, SLOT(menuCopyURL())); popup->addAction(QWidget::tr("Copy File Name"), me, SLOT(menuCopyFN())); popup->addAction(QWidget::tr("Copy Text"), me, SLOT(menuCopyText())); if ((opts&showSaveOne) && !(isFsTop)) popup->addAction(QWidget::tr("&Write to File"), me, SLOT(menuSaveToFile())); if ((opts&showSaveSel)) popup->addAction(QWidget::tr("Save selection to files"), me, SLOT(menuSaveSelection())); // We now separate preview/open parent, which only makes sense for // an embedded doc, and open folder (which was previously done if // the doc was a top level file and was not accessible else). Rcl::Doc pdoc; bool isEnclosed = source && source->getEnclosing(doc, pdoc); if (isEnclosed) { popup->addAction(QWidget::tr("Preview P&arent document/folder"), me, SLOT(menuPreviewParent())); popup->addAction(QWidget::tr("&Open Parent document"), me, SLOT(menuOpenParent())); } if (doc.isFsFile()) popup->addAction(QWidget::tr("&Open Parent Folder"), me, SLOT(menuOpenFolder())); if (opts & showExpand) popup->addAction(QWidget::tr("Find &similar documents"), me, SLOT(menuExpand())); if (doc.haspages && source && source->snippetsCapable()) popup->addAction(QWidget::tr("Open &Snippets window"), me, SLOT(menuShowSnippets())); if ((opts & showSubs) && rcldb && rcldb->hasSubDocs(doc)) popup->addAction(QWidget::tr("Show subdocuments / attachments"), me, SLOT(menuShowSubDocs())); return popup; } Rcl::Doc getParent(std::shared_ptr source, Rcl::Doc& doc) { Rcl::Doc pdoc; if (source) { source->getEnclosing(doc, pdoc); } return pdoc; } Rcl::Doc getFolder(Rcl::Doc& doc) { Rcl::Doc pdoc; pdoc.url = url_parentfolder(doc.url); pdoc.meta[Rcl::Doc::keychildurl] = doc.url; pdoc.meta[Rcl::Doc::keyapptg] = "parentopen"; pdoc.mimetype = "inode/directory"; return pdoc; } static const std::string twoslash{"//"}; void copyPath(const Rcl::Doc &doc) { auto path = fileurltolocalpath(doc.url); #ifdef _WIN32 path_backslashize(path); #endif // Problem: setText expects a QString. Passing a (const char*) as // we used to do causes an implicit conversion from latin1. File // are binary and the right approach would be no conversion, but // it's probably better (less worse...) to make a "best effort" // tentative and try to convert from the locale's charset than // accept the default conversion. This is unlikely to yield a // usable path for binary paths in non-utf8 locales though. QString qpath = path2qs(path); QApplication::clipboard()->setText(qpath, QClipboard::Selection); QApplication::clipboard()->setText(qpath, QClipboard::Clipboard); } // This is typically used to add the file name to the query string, so // we want the values as search terms here, not the binary from the // url. void copyFN(const Rcl::Doc &doc) { std::string fn; doc.getmeta(Rcl::Doc::keyfn, &fn); QString qpath = u8s2qs(fn); QApplication::clipboard()->setText(qpath, QClipboard::Selection); QApplication::clipboard()->setText(qpath, QClipboard::Clipboard); } void copyURL(const Rcl::Doc &doc) { QString url; #ifdef _WIN32 url = u8s2qs(doc.url); #else if (utf8check(doc.url)) { url = u8s2qs(doc.url); } else { url = u8s2qs(path_pcencode(doc.url)); } #endif QApplication::clipboard()->setText(url, QClipboard::Selection); QApplication::clipboard()->setText(url, QClipboard::Clipboard); } void copyText(Rcl::Doc &doc, RclMain *) { if (rcldb->getDocRawText(doc)) { QApplication::clipboard()->setText(u8s2qs(doc.text)); } } } recoll-1.43.12/qtgui/idxsched.h0000644000175000017500000000232015121730573015542 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _IDXSCHED_H_INCLUDED_ #define _IDXSCHED_H_INCLUDED_ #include "ui_idxsched.h" #include "rclhelp.h" class IdxSchedW : public QDialog, public Ui::IdxSchedW { Q_OBJECT public: IdxSchedW(QWidget * parent = 0) : QDialog(parent) { setupUi(this); (void)new HelpClient(this); HelpClient::installMap((const char *)this->objectName().toUtf8(), "RCL.INDEXING"); } }; #endif /* _IDXSCHED_H_INCLUDED_ */ recoll-1.43.12/qtgui/firstidx.ui0000644000175000017500000001253714753313314016004 0ustar dockesdockes FirstIdxDialog 0 0 502 503 First indexing setup 0 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> Qt::RichText true Indexing configuration false false This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Indexing schedule false This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Start indexing now Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() FirstIdxDialog accept() 248 254 157 274 buttonBox rejected() FirstIdxDialog reject() 316 260 286 274 runidxPB clicked() FirstIdxDialog accept() 215 400 215 228 recoll-1.43.12/qtgui/rclwebpage.h0000644000175000017500000000522015132373576016074 0ustar dockesdockes/* Copyright (C) 2005-2023 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _RCLWEBPAGE_H_INCLUDED_ #define _RCLWEBPAGE_H_INCLUDED_ #if defined(USING_WEBENGINE) #include #include #include #include #include #include #include // Subclass the page to hijack the link clicks class RclWebPage : public QWebEnginePage { Q_OBJECT public: RclWebPage(QWidget *parent) : QWebEnginePage((QWidget *)parent) {} RclWebPage(QWebEngineProfile *profile, QObject *parent = nullptr) : QWebEnginePage(profile, parent) {} protected: bool acceptNavigationRequest(const QUrl& url, NavigationType tp, bool isMainFrame) override { Q_UNUSED(isMainFrame); if (tp == QWebEnginePage::NavigationTypeLinkClicked) { emit linkClicked(url); return false; } else { return true; } } signals: void linkClicked(const QUrl&); }; // We intercept and forbid all loads except the initial page data (type 1, TypeTyped) class RclWebInterceptor: public QWebEngineUrlRequestInterceptor { public: static RclWebInterceptor *getInterceptor(); virtual void interceptRequest(QWebEngineUrlRequestInfo &info) { if (info.navigationType() != QWebEngineUrlRequestInfo::NavigationTypeTyped) { //qDebug() << "interceptRequest: blocking navtype " << info.navigationType() << // " url " << info.requestUrl().toString().left(40); info.block(true); } } private: RclWebInterceptor(QObject *p = nullptr) : QWebEngineUrlRequestInterceptor(p) {} static RclWebInterceptor *theInterceptor; }; // For enums #define WEBPAGE QWebEnginePage #elif defined(USING_WEBKIT) #include #include #define RclWebPage QWebPage // For enums #define WEBPAGE QWebPage #endif // Webkit #endif // _RCLWEBPAGE_H_INCLUDED_ recoll-1.43.12/qtgui/mtpics/0000755000175000017500000000000014753313624015104 5ustar dockesdockesrecoll-1.43.12/qtgui/mtpics/sownd.png0000644000175000017500000001101014753313624016735 0ustar dockesdockesPNG  IHDR@@iqgAMA7 cHRMz&u0`:pQ<bKGDIDATxyp\}?C]%$ c˒]402-H!N2 6 I&!%ĥ1iCNCDXDkdi]J+i%dy=~LsC79DY-i$I4ML䝏llo%N4!>:0kZ{$FK鄘Z@ØIW7n'@0zz)Iښy[;6^sغ>8'Ob&?³<#l|sy[z-j4mw}ߕ~O,kq>(9-6=g}6aX ȲHKϯD%|Ӧ ?: 0MeYϯB%uWoޙC#&,!I"$dI3UsAC\\ E!g,ti uuU\7>P292 hI ,[ʂ;Ys I`&w8?A Hm&++K:w5IןIg" ԩ!Wm5Mn{Ę$m=ܾ*d"Vƞc[zu=X^?LpBՆaSUӳg2hhl@č̀2wOĞX=F;ϰ:&IbAbEiλ/$Iľ}9]A+x4ƧQ3U3ʼn5G۸4q}It2$[FguzÚCx+ p8V^~oq`;?}7bodi}t3k(K+ ر?3M3 SŀgF x_v. @OȲ:<`Cn\v#݇k_۽b5( 5hTtmA׍KZF0kJ &<\AxU}l 㠟|4"X~s¿FNKEQp&X?u10 Clǀ&F_8e>, <8-ұk߾nU,nUP`DM4}(MM&10[7TKkT?"phtZ?+ƷBŃ:z_OyFNaI&ɦ.T5 utzH$ZD(cl:f9o2%0Xΰ0,,rSzj~|O?H03MT@Oa0`H| t?ϐ-jI;v顇Ku$=t],d!]J],X7ijTJG,7s-FOb=i̞_p ;2̖`{tAl4^[Ϧ/i!m^ JeÐ %AΩ+2Ƭ#ˉR9YtPnAm@: hG{ x^hk֯sUÕm.s{0 L JFo[ _Uyg|+Wjذa-|vtuevv-eﺖ;?#+Zẅ́mnt Hg4y?AN@^qCn]r9v۴|QM}܇w#o>–-l>Ǟy1Os&DC,S^:t2 |C}7 UUfhj7wN^>;'6H&)t uk??/ix}V) |g*& "|ɯD |~z Fy"p*r'yexSܶN:?2M =.JM l){"^0NXPv7O& 紤i9-R:d:gc7>* q:s!@vfLZ٭>IP?S'[V,$iydYF>p8qʩQ6akoJ$ Biy6|oƍ{E,˲Fa ]g+<]O32̙PyTUP^ ؓX<3P<]_ArVʫW_Ӵ/)bX HteUU4 UU̝x(//'˨Aa8V3f/qn36-@H$2ײWU EAe4pD"nrGC/4U,,/a.p=|ZUv;hp8tMdY ƃn(Jrb#xJOѤf6fDQ|n3<< H _Lŀ_SU5#gVUR3AA~P^^N(*I|/UxYݺ,|}}=\|Ź@EE B YBuu5>] 8tK(p0222୭^zL$Ә$ITVVRUUE8&022B4BTժ(ED@>[( @2dT(vӧO:DD"A2$H022ah"v;Sj?$I"ͦMYdGQI!D8~8$100($I8xtzl5ȑ#( gΜI(Kީ hx$  "N.`M0$LZTDUU9{,55l!(Q2o^30L0NnkY`'KD[[~?'IR؋"IRnu]BQ4M0 RXW^y?~5yonCiFR }m۶m;::k֬*g axhnn& qrv袋Xx1MMM*r.]ʕa+#MxL|Ǐjnnvn7,i,p`rCUUv{n^D"|>^/'Oĉ444q Ҳj x>f$f=$]Dvñ Ν[o8ꨭ:E9qdYĉȲ+?C~?vnӴ4SY 8[ h4Fy[DszJp]n |>rwp9"l dKƄ$UUD4 H]su,˔vihh׋$I^ WiN i@CD"_ B`0|MfBE|>{!a_d܌_/^/OĦn?]]]o籘5 d2IEE%+WbŊ?6Յ|CEkݴj9B2$&Є)h%=-!"b4AQd.]2JŒ<{pⅿ]X;<9xL.(=L4z" cpd$=NʘƋQr[jؾ%J͜s(7+%}5MӘKVN!fy &+#(Od %tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ stEXtSoftwareAdobe ImageReadyqe<IENDB`recoll-1.43.12/qtgui/mtpics/soffice.png0000644000175000017500000001262114753313624017232 0ustar dockesdockesPNG  IHDR@@iqgAMA7 cHRMz&u0`:pQ<bKGDIDATx՚itՕuޭ}k-^M166;%9 `2 a'$$gda 8>l![ ؖ%odEݭ^j>ZdYd9uW}[O`D6lp$Ik He u}ҺLTό~gNvH#B2?裏xSvW^y,t2#`l0 ۧ_4]NV?v"[n6l.p gQ N'{tGH% @7 t@ Khao]O_Fm1]t6}]j1J3=#g8KPM ]Xm&"'\UdFMx0k/=^J隁6)kF)`QuJuS;ɧG(evRϳP$T<4@==CTUq@`xźh n fb,4a yd+$IІI*aLhZ.ZZYI~ii JI'Lu?s\"й⊙Ӣ,1@ bQU>8Awn`- %Xd Qc$ک l9@Keh^?vHeq?iCtAg ij-*!Hq**\Tx\$:@J7VUIS 0Ѝ&F]308 TGu(xuY6Di,.J7˦c{&wO7F,fQo N u˶du!cEX oxR^I>Sq:MϚmAmG^)Jc+et l4m}uMmSRʞf=;}V;YZqVMX?a d:kX߾ǒo"gw&~rl:Se|.8`Ԭx۰y+(쟕%8a1՜kLק(N? @^ ~Z!v5-o>n-⪯\lѵ3TMf}AF$( 3:5ShFUdxx_OlXՃ8mP8V&Kd@G9S@dXg0yѪb^Z;L"}^oGEY\,ي;B8N[7V]IᷯanUiGxJ5AWm@LXvY&?+<\VOOm81\ʂt7u. d x̷RN~>xĢRCzp||㇕J9xؠ,Ǎ. qh _T),\]p$ga!t@ӑ,2$4ܵtwaB6fӳJv76G*4n<8H>])s(=*s#Ƣu,v6%"h0Jg , s٪$C 2ϡbCy`\7#] p?:T^V>blYS?Fe.X^D ˫8[Ǜ0xPtڊ Z{uxEijgAbLb,   ھ{|9N0*s' gM,a!Jc.khkSPrxTI~]:CWWd«d&Š;ϑ>אî9@RT Q$ IF|+38.1#}OoXjn$" 3re'RR7beȥw\s !PVzz­N:En~VpX[8 f:?9a@JP(e{XTsVIЉ2 uδ0  "ٚެ|8?_ˉV6Q1u!҇1C Ĭ27~5 Z@aBI"aNא"Ƀ'9ԅ#"#1#6D_0E˅#[d<Y1Mx7CnPuVnA ΁] D)Z _mweQD Or1D${ ~&nJ2hP.$4 ;EZTÔ-0^ar`WrZ9C7Yp8LCxV:.jfK0"*{b\}Mt,G#5ȶ|زV\1#;{_!h 3H *Im4t~w jbQ10@>=%cW4dZ='  a s Vd/{[vaeU-Vh!Rb`^JCDnE[feYnP6`8ÉЇ|nKl$^=Iox7uu@WAM?˞`',>խ.`x(>e`xִӹɬcl 7~i͜d|ƣ'Β8˪ xaA~T^O~~]=8)uoWfwwƭm,|a)9zhSD$I9yj]2-[s`*%Hwy#oP$*]9Ru֮vY93gnX'}9ļ:zN4}'^| JX w}-ʅQ;AsfXbJN 0%:崣(2n EQUP6W}_63vK K\t B]嬸e WCK;`d2͆̕Qlt XVd2&]$@$ b jFUMi:& , 8;Yϭ7ȬEh;wk[kl(0[beNnoov#IןL6x,tww駟vvuu 0Il$Oױ: `T4 "*t!-v?vשm|) KUUbEVe67&EaEaҥrnA+~zƍobB2dN&fedBh(PQ]ͭ2gA9}OºDk`+T0;Mj#s>?Ӻ?cyzg'Ā Pveӻa86&c;[[5'ԕE -'5c_fʢ( xǽ>ӡPh+&=&A@6,+fY)SǺ0VeEQ_x: mIqd>EH4>eQu>MhfP4_Y~?=~*[O xύ(u%Hɬ#?|O>yS~'N̓Jk;_$I}w|>_+1X8ҊO" ؘ$L#y, F%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/pdf.png0000644000175000017500000000745714753313624016400 0ustar dockesdockesPNG  IHDR@@iqgAMA7 cHRMz&u0`:pQ<bKGDFIDATx͛{}?$"#B[1ryN%NaRTJA) c:6FF,B[@<C=w=cnvow(~US3;}ۿ_ozqƅpߤA=D)*GY+P3=Tѳ6QQ%'PLRn ] ̽ n Ww}lWo=PqwpW\!WDL`3@)=.2gZOR67қwh=vw52z7_sw‘iYeU*j]?#ƅB]&ІD? P]oOlw;3nXzs뎝ˠ-K.l PZf@]#GO4H3HwM"ܤWRq~3@ -m "8Q2k$JTzJ Vo$|Ǻǭn;SdàyMr |QjB_TY`bw*F5D>Ng> ԯf i ‰644bPr*QV6**W"tZ4b~)W3-cp4IzRXEf@kTc3:4"je;~n L{J7^)U竉3,9!6h}GrңjedOڛov_ڰzh|##(U &;Nx`RVy! 1GaMuMɿI:CS}zILҀ6^u-مKZc}Dg٠gdoNp:2)u o_ M{dKOcRuWX:|~u?dS8fkKKQ,KG})_KDTڪ Sbr;4QM =D:`˗(ή 2 8vv LT(;H 2i0LZo"~н*qtYo[ wB p:KGm`{psl ޻ui0TS+ FD( ěaY;18fPخ@mX |/ȶ-#.w<pU1lY-[Ȏ N[*@^~ơx^p&ᥟJ3ȡ>D=pẹ8BLo2;C Jb?АZr>2a}]ȣ]hS]x&×`K.>2P H0&x--a5G40F3JSwfCW"cCa} ch|k+UW_q9s## dswП[E; 1ifhj!Ӣgkf4Ѧ}䶍N":"rEKh,BE!"B[@_A}EI;L~\4F"U~{}|i9cݘDQk1;w Mmavm|H!NgȴJ>>2RWr=R,eaʧ@# F)HaǾ3LK8HضKvLs hwԳeMWWW%RMpr_=~k{*Ui8[ȤP6p\yaլf,㡇ضmۣp1%  Axi3o1^!ihh}(,̼Dhڍb]v߃>SpNm m{[H^%&2oA6h=b㋯cwuWǨlUd @E;y-ĩsJ17EF\s+m4BBRc*=mzr~=M$qw??)1B{BM_ps3-^7OOc;Vp9 ɺu^` ?)oZ}#Q n6x_aΚUD- @(7fݺu7o<)+0ؿ~Iw e^^R_ʉ>b\j u@tvvrwWEL`Ұ0k~'9 \wfMi{x?QjYf?Vk|Y&H6+.CS=O}iYt饟C}j1`h$i3,@X,Ɔ :l;_Q@9p#E؎",4X5X?u۶{q˖-^d|Y.,|?47,"q}?j6v>Fc $qۺuk޾&%Z#_gӦM{n3Hs 08r6mW/`PJil4M:ݻ=NqB޽{^}h5?.QJ122btq HlIGŻ%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/message.png0000644000175000017500000001063014753313624017236 0ustar dockesdockesPNG  IHDR@@iqgAMA7 cHRMz&u0`:pQ<bKGDIDATx՛u?{ݙ\EuY(X#_O6 8chK2#+0lؖ/D1$-Ӣ")Sr޻swWP3.r WjT )UM6Uqα9}=)%k^yFɎ=Sհ^~W>;J'~ 4}a("]kveֻnl_GT7F J'N@Uw&,HiPB#ԚE C5Q%͖ê!sӮNqsuK8PN5m~7;~4bǟ??5L,|7]Xq1>YǍń\( T!'* yC BQi:'B`.|oߛ+-ag/VoB*/|YDtdy>zg#{ Cc$h\21K \nPS9wNWY92_s@b,?>DN8ӏy`(2*SvUȅž}C!QLSw=Q/ή`mojY <e>>ra'bigqSTz-88/Osh$_V(Dumgޠ[Ud7oG޺R3K"R?-H0UlB-ԓC#}E򍖟pujʧ!0S5 nP~Pm:sz<;{ǏkvA?mWWqa |-2/ TO>Xdrc=rgķ"ao_qe*!zy^4 ξ?__Ƃ%0!& L.XNVyޟNh%>Me[~?Y{8{5Q]7M756.ԉ"񗏖Skxxro\E)F(!4B.4FAN]h!PUF @|d2t^Dl$7箵>o)}= |KSU Cy>vO^ÍOެsy*!\Q5 P)}{CNZtQ-73DĻh9Å9kSeȇG|X1+#eÞ?0h=YKr傰? H_4Ԛ>f͆hX;ƧA1ױbOCC`9"P0clNA1Pv[쒥twuHrbxVC!f5Uň_| ( ppϘ!y1FVO!Ƭ~ :60(x\tĉk Qf+K%82 ;!BZK$qLm Gb'RC|`dX̒cW'S3Ĺ܄#b<&2rNI/Y~q쀒 ` oWxx<| *O=]U_ۍzwP0)C6L-8JPCD ?s>-W'Q avu6Hlxã@ûI+GC>S{>Cl4؈0IIQ0د|_gL@s06j"#xZ80 G!e sUYO]OhDA a_s+%EZˇ7rJ!b|`Ǘptr o.-e%pǨo@YC!$V+}E?9B#ғSz( -WK1[J_L+WЏ(;~@Aa&UQ26h2HGy7 @w$̸0WSfɉ'y景 ^vbSe90bY sUb]4 8UPe}E \T=76T7eߍFgyfs&''_SmW,tSDhY/ 0gٗVmOw[JnÐz3Ɋ VyE:'H+DoSӑSEL3w~jg>o26"69&`=ȔT*6y0ј_0̋|9@@xNJq(EۼtIz>n0eI9U˾@PVW U6=&!TE,,Rb/xJ~ is~DfS*h"W,bkU7yjBKDz,w1JR/t۶3gKҕi̡KFH6^$ BA}㭬4|jgU mfoS1>ԱC~Եe{FmpOlZrjxAQ%55!Vr|x|l'.J˲CvK3cMlJLӬ؀U *":W<_ѕхc+~~A%(?:Į(C¸BK=4|{Yzb$[Iqe<[փvne U#]M/IlJlv+${@I%"jzw,/<0Th^ pm{˾PJI1V BM x7$([ԭ(t7$VfF %Fc}UhYFgKU9Atmy6GAP5Fו$6.ظ˱>Ϡ]>07L{f'3Ѽ{_Q)W+%c3TpI4 @%BjJS!^~MuZR$XNB~v@w>|> %fhIY+J@9M;sI^xzC]Yqݭ9dr+R@Y_|ugqza^Z; P5L8镜FB!(DR $"sO$:<ɅS9DίgOmur뀢ӠiM4 E5GDlD'KV0bh*y/)LG18>{@,PD"PoKW/e߆X=sO6 WY]JaĉD L3SXd~>B}} pP6:ʥ;CxYr f P5 /u۶D "._8l^q.n\ (;`kLN}XḾ=<3^B|>uVfރƭ3kY&_bjٰX'.,xDݽ3Dva%͠A* mw$g|n^0`AYxXRQ  KR{ fy&&fr%7]_7 ixCl|-@{GiB`1a"eK׫g~Ah^ MN_񁩀!?s UGcru n0S1:u>}$@!QN9_P(zlpcYe (;YUUK_xѳN: hMXfOmqWbֵ'NȱP(d༏UJBs9?CϾ%W1N$OyG$O䄀I^xO' bfF 3'$0Q*"0f߰'ikB|>.I;tHŚ ~1?h_r%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/postscript.png0000644000175000017500000000620614753313624020030 0ustar dockesdockesPNG  IHDR@@iqgAMA|Q cHRMz%u0`:o_FbKGD pHYs   IDATx[oEuW<D p v\I8DQ8 AA2H^Q^xƏdC5=T~1OI3F (p:6j`>6?^)J{vHO?3x'I!D#IZ?h>{yJ beY&ud2o`eH$WWM::캅06Z/V_Mݫ/ 'V*`O? ,+k Z (/]+^xf=`|YgW\3 __jh"a1&_eI@Q`~`i fJI:d˲=FPKA1@UްQ[w&&)[ :;!zDu@T >8}՗^9Iz(lT`rҶ۷ǏmhWId' b7 6S##[Ӏeᇁ;EocᙫƇ`7ȯIJ޽$׶TAJjѫ9)ί^ʌ!`Xly2',\nz5}1c0@Oapx$ @eϕ8.(0MBCUB!nyLNN"@^7 رcLq/5T^EV͛hooǞ={`YVhfcU+vM"a EU$I:;;uH, e4M7R)*cW[*UDdAσ0.`&:.\ V$I/WݯpDQ?nԚes$O$0HUFO2'A|0khyPxqY X_F^Eޫ& ^@eJwo'0z HMK{riy Z}gCp!ĉ)|xB * h8i Jܾ}bщc$g]$I"R`qq"N{i@|>9:t=*&׽Xc4 ^ytww㡇B{{{$4kƍā`& <c W^pG wb%YZ3| ÀeY4 r ,0 #rY5"$R`ee?3#16~n:~/I ~W"NCUպ@ꡥ%΢T* =zzzBS8{ea׮]XXXobm۶1Am)s1@,\Ie2ڵ b󘘘6umGr# ̙3g0??eR<0 Dud2Ϝ]]]]GRܹsp + x D"h>)@&w8"`޽򠍏,˘?/uc ,((5㫪Z ʕ+t&_Ƌ/]CwgaY1>>Yٳa\qR 1Oƙd2wzA vܹd2 By[$ 7n>L&*Q1 W_믿"|~t3gshX{o>\~\bT Dib˖-,ˈ`,dYdY0ƐL&H$ru_~?[ c  Q(#D1:q;'KR/B?xp}))a#/EQf}v'\ d>TD"QNw;+!eɓ|pbzz ?@Qܕd2yQPG1) ^ p}llL;x?|r9߿Ĉ%THPJ:޽)3ɱ1#O-MI^t}ocTN::tI}ʶl Ti1MTjk,WÇO\pa : @!1@:O)_9r󩩩SP63qx&RoF?>9_|_En]ٳѣGOLMMZج$~W|Yѣu| Q?.-|wڱcF/^XIǏ|+ !M'<ǎ;133W~0M=]H,BTĄW_̈:ߴ~7E)}0xc,|LOO ` M|՗)WA;cKQ$%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/License_sidux.txt0000644000175000017500000000176314753312713020450 0ustar dockesdockesFor sidux-book.png: _________________________________________________________________ Coloured Sidux Book Icons (type2) Copyright (C) 2007 by spacepenguin, cako and cathbard (http://sidux.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA I suggest a copy be kept in your sources for safe keeping __________________________________________________________________________ recoll-1.43.12/qtgui/mtpics/aptosid-book.png0000644000175000017500000001103414753313624020204 0ustar dockesdockesPNG  IHDR00WgAMA a cHRMz&u0`:pQ<bKGD pHYs11(RIDATh͚y]U?.o%~/!$$`D-hGG- 3 N`3 NXRh!bB!F! %t-}߻g?ү&jV>sϹsaSZ7X VѺj`NZ*zNok^}w`Zkmklk1 ڤ5Zi4F'1k ֔ XKڵ `QW^xh2իH_Ak-֘BTct^clźZݻ}-]Fͪռ[0lB{B1#寣~2yRzuKVu.h=WJ!^~',/M{1X m+eegojœ8a-TV$cA>&2=wty8~_'Zo祛oo|͗\’k떠llX B'°,p<TWUWby^Dnxh:[}yp#^ɟ﹇;vл{7'hz/!Zp?j_SK͊#M%@OjݩAMM3-tݸKȏ>v뮣qq߸7*=? =?yԑT\$O=Ŋ|k 鷏a%K@1LUyE5.f Ѻht*Cn 3qvV|&2ǻ|u0눵6JO`&7 gOTZŒ' \+?)dѥKxuG1ECw, 4F"۾gtK^ ),DG~ud{571255]}5㯼[oQz5ar^t%f ^hMO4~i kOGKKTcy-L>u72YA3ؿI\ nk0Jhq]p ]Rdg]L,3aSkr"--cG1Z1nDgц©rP3`D)V |p! A9!l@M7mD&<^x>XB#Zt. @䱪"B/J5`A Ā֓RJtj|uG:; kй&Pf&[c,"r)TEaz^Xkq 18)! ccȊe6EQp=:?r-O #Cǻ9kё zV(g>@8Κkkݢ/, !4Oi=!J39bI,ԺBK͙9环2Ky}˒kyΝ޵?Ù4mgCaVeUUgcrRaS4 IV=|eo፻b?Tц?ﺋKy׿-b$n .㪫>G0>^gOe%, Gp`f&`zlu'& \+s]jWf mh Lxk+^"{ń᜹6okEg2!J{1To4 xHk+O tVHF8k_yy>p$::p|57]ID"cǘ8|s︃h֙10 kذa}Ÿ3cڶo딀L: >kldwK-}a܉!&J8N03ZOK)kWt.C}V]ˋ7݄WSˆۿ4g`hW_Ee2dN1י 8jH1em(>\HnJeݶm{MLwwn#:a:MT0vj:;]͛iټ-w wGsB?7*$ g̔iٙZK?H㏓BxÆ_|#:jvLc>ʛ?L J[(Yy׬!R]Ͷ;ЇxɎ y# Dd]YR+8_hPQ?38ȁo~=/u}}SnLȕWĎڶ~΋/ yƐ`zhxGzF<};c _Ydv^}h;\\!֟Rn) zC*&3>N`l`^Ͼo$7߿0a;W_F)X> +W6ּJcd2dsK/>V{/w;p80GnBȆ[/)) raLȾ}$׭+x8ZYWkٜVge-RHJG>:m-]*Gshhh|(0,Ƃc.8xh,F '0FD2 j>!ĢERgfӺ6Ց;M~"y뺸c, !0h4Juu5hq0!B<#O,S'F#V- 3Yk'7Wk֬qD"kq@cr8S.fffH)(a%.H̞,=^]ZRmO!떖Xš7 yNTS<^@r!`NRy)%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ stEXtSoftwarewww.inkscape.org<IENDB`recoll-1.43.12/qtgui/mtpics/document.png0000644000175000017500000001262614753313624017437 0ustar dockesdockesPNG  IHDR@@iqgAMA7 cHRMz&u0`:pQ<bKGDIDATx՛odǝ?o/W2$dEU*d[[rO aЧfn?$ C]3|/29G0jYXdYpg.|K!Qɝt'-/2EPc[`_k@ D|'ģo˃vw ߊ{]^U4@< c=1~~?>R9fa @ 8Sڌ ;:Jq7:^tM[oMh +h!"Ar` AtDFD<OԕѽDK:Hq[=h/ .I& L8@%Iz-a{?b21;R,N,L6LxiAknJı NQ2Aq< AH|$g! A$wD A zABo%I0T0CR`&T&C^ sEɌ0\|p+B54 k'8i,Fq68k`1d~M8L ֏`6ORSG X|zoAw cE)!YO4Rh PLȸ+F#b,/-M^{cFPQ<ۄP!Nlr+>7ygWs5x'N Q|DYHNـ89l3dϪ#6`a\ &řPS u#Qbkܸda1A$G@hiŁ P] iţoD]r`UxQ' I2R^ n,牓 )WRġ{GO#??$jN+M7 0^ZL&CEQD$0 h4iDQiE,Z`idNC`08mcvf33$Irh8<M y#<;;;Aq1MfI*իضݻwj C]NB@VnJ0 ˲4_~XNY?W `nnM4(XZZB4,en K.1 BEP`ff8Y\\ "ǡRE\~0Ԁ$4M9cOf.c355>N8in߾aEZJzNE,//O'"t]l"h0==͍7HR&{TweُyR\|e%F74$Iڲ0 0$I\%"(Bij8>stǣ'08(mcBjw;Q.2svt:2 Zt:i8F< ÐT*z=,q1$ A`6t`@u5d2!hLLL>rm4Mj38ZѠn#"<ϣP(l6u(0M ^c&w0 \Ŷm:Z}qhZضjfqd2 B:|JB\tI.$l68iTUKE\)vwwrTU%-GQz'Q1 ]yR}%tgss˲)}l,,,bnnN `0X, C"f`@T¶m8> (:w8J? `D:$ߟ\.c&[[[A矧+!_:V<@r^-ˢaVDQm'NcYi+&&&q̕+W4M\U$!)$$IHRܻwRDj#j7hdY%abP%W$iRf0Et=//,333R(&!jHe1q,x+v4t=$IBR91zb^ph%"麮D𤉞JPJ\$GLa}}T!RvMC¢("J|+:+1fVyr({T|GA>?ٙѶmR2L?HQuF>׍׏'PLQQU`kkKkkk4ML$I,Btz=֨VeZV>쐊\Hd'g$y MTq AU5 qzJ7#S*Q,(*hj$%SbrkkkxawSgY*#$]a:& C?P. P_]honn8@`ccme&&&(|G\r?\I"a< 8?cYadG&mJ"7rb2}&il&!\ץT*lH/!cMӔݰ,K2V Zfu]x,KIEʩ^ IXXX8T,,,裓$a~~^Ue78ko (7^&=gffȱC/X[8\O#Hi~_YBp !T46aYz/Am[C&V4Y__Oz\|YmK/6Lu6;;;T*lիܿZt]gaafݻwUN)}jɭu5$I *@ZXXPnSn])r˲d2ڵklnn};Y_,d2ꀄL4vnK:&ɐ嘛S@Ν;xǕ+Wy?iwXE??@x&g[[[|'_WceeE"G4^J^֭[ʝ4) r9666@i4MoPϔ+woߺu |#g5c)F_{-3Km秊%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/presentation.png0000644000175000017500000000724214753313624020332 0ustar dockesdockesPNG  IHDR@@iqgAMA a cHRMz&u0`:pQ<bKGD pHYs  ~tIME 1  IDATx{pT}?ݻoJE # p`;MvxS)vęcM2lx&θ&5 uGL`cc YʱC'v1%ޡ.֩2fQ- B C$gd`"O'SHJ$L4RN$Iʋ/H@»e (JE*HjT;wn^J:ˉR t]׋_V>N%K4< 921eYTSO6RyRbHTԪ 7npz2iܺVjSe͝d{k8u3tf=?# x kr9*7; |7}{c?T0O1YO_zywk.\W hk~~^8ߺ[̚5+݋SOaF= ac?]S$IbD,|+B{o;~ӉiZOn#H\6SkKZp8L4EUI{_5S, `ViWՎ5s8F0!5wb0L4?EH,+jA?5KJ;y=^1"QVyA{ |zl6[zL9B] jAÄ!='>#ؑIX+&{M4遴rLLyixR8?«2*{П #﯁{w6:,;vb0ƒ{X@< Fr R=x=x}*{F@^э|?Eź6,sPe }4CA {9>z u8ICm#@DDWawX֬etE- Z@!p.t.KyπO'>0vj9k>4' %V~Adߡ Y.+@5{-@0=5}GDCS꣄caLqS>!=ĸ>NLgp20!t,-G@u2 ‰6B)A$*,d!`H"DG N*7}̖k_N4MZgȲd@"DG"ad EQHEԊ $ā8/_' '0駢R!2b Ub2fPX J yla\VZVeBm-LJ.3 `mȲ?~yG!, $ s*8GF2 nYvKZf}45 ?~BלxY\sƣ!iSĔbeʗ)cM`r"YToa_$X%+&9{RV)1fY%+fɜ[] @&{,#BY+r,@Q5'^JQq#j Yq5 krd$˜||ZXySҡՒcϊLBqW == 2"x?NFW5\_s^nۯES6mv Ϛ䶵kc(X啩(8Nc:t96eYwaڵtӔ-TȎ;Bb\TtFjjjlD"{NCMr'.-eb6M:  Kp-?3eYb`Ll:A&zWL=,]€7?_e\ D߿2Q [j>lWn4T.M֪#rIx'Xl 6`T d2Q:<`08FٙE@!oNcc㔔|C}}=nh4:?Da:sO=))_J^U%o8B,`Ν444|Q>(4 >3444l޸qcYʗ$r_.twLK|{dz{Y4M H|?M---3>L>hEz>< w .kM~Sn %tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/spreadsheet.png0000644000175000017500000000671014753313624020125 0ustar dockesdockesPNG  IHDR@@iqgAMA7 cHRMz&u0`:pQ<bKGD IDATxݛMlr=䮸hHӢa lA"86>w In6$ ,'ɲ C(ْi X-~GwdgwcI{)`1UWUWm'4ͿUJ9RkRꇨ;@Нȶtvzm8ھBso}4J4\&7Ο7v< !}6|۷9{%S<ȿ- ܫs=؄k`1~ah`Y㡼J)ݻdDu>a?fu] @aFTgu]RTJݻwq]d22۶#֢t:M*u]8yd'ɠ믿f}}^{>jfL&J7|Ç@)뺁)@!n,@ ܹa 럔RD>X,#`ee49|0x4'iգzoA6ŶPm 2>>YD;I)EAT4@58ڇ=8Aqq]fROSem!o8ضSNy- 1M_~rBߢ۶YMz h߇(uKKKl'!mc6j5ZRyA9k#?RJ9y7H\eee~;Ԝ| pرP%  pj5jZ`H5 M*IAm][o.Ft% >JGA~P\.G>̙3OR uB"R) N jW%N3009?-rz3UB8NJh@]/8#СCrd*\T*HYP׻8V/y~W1 ë–TUFFFB :tP20 B7C ZO>N344۶Y]]edde J%FGG#M<100p(Vȑ#GBy݆(M1*el!ܸq#ETt+'na^oSLƫQh&I]PM0 y~a ^VJQ, r9_BfdD;Z.w@(-O[RӧOj ܹCw#8sLd9Aֱ`2$N#`aaZӧ[H$E&C===it(O&Zb&eouY[[cqq1yAJ`$A?[bȋ/>tS7QZl4Mo%l]ž}U.D})٠9r+l~9ARKɱ_IA'T_|sҥw}h~o4۶)(zEeQ,#}@ѠRP.CSJB^gccëAA/:ρĞor;2 lP NJB`eejrܞ pw|nn3`9_.p)%?zSO1>>X]]ĉz0`… ZG}鼧d7oRxW[Znac ޮ,{),i!4 l&Jł8_>>(B^x* TE:DQ7]W~ŋ?fff  @^T*Rl6K6eeeESϑ>P(x̄B z{{xۗ/裏>m# _ φ~7I)1r4[/_vΞ=̌죫qT*np{lT*yП}Wιsv-|,aukիW?xO'EըmH+¾|Rigjj곹s,oi ׮] WB;`\ǯ\bOMM}vu-|Kn O?*peYbyyY^|ZuI mrm#  l"E@@B,%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/aptosid-manual-copyright.txt0000644000175000017500000003400214753312746022574 0ustar dockesdockesThis package was debianized by Kel Modderman on Mon, 9 Apr 2007 13:54:11 +1000. It was downloaded from http://developer.berlios.de/projects/fullstory/ Files: lib/* Copyright: © 2006-2010 Trevor Walkley (bluewater) License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: bg/* Copyright: © 2008-2009 manul License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: da/* Copyright: © 2006-2009 Rasmus Pørksen License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: de/* Copyright: © 2006-2010 Markus Huber © 2006-2009 Markus Müller © 2006-2009 Philipp Rudolph License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License.. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: el/* Copyright: © 2008-2008 Gregory Gretri (grigris) siduxgr@gmail.com © 2008-2010 Nikolas Poniros (edhunter)edhunter@TBA.com © 2007-2008 mixalis (miles) georgiou mechmg93@gmail.com © 2007-2008 Pavlos (lathspell) fubar.ath@gmail.com © 2007-2008 Lazaros (riddle3)lazarost@gmail.com © 2007-2008 spyros melcher (xouzouris) License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: en/* Copyright: © 2006-2010 Trevor Walkley License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: es/* Copyright: © 2006-2009 Richard Holt © 2009-2010 Luis_P License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: fr/* Copyright: © 2006-2009 Philippe Masson License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: hr/* Copyright: © 2006-2009 Dinko Sabo License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: hu/* Copyright: © 2008-2009 mrowl Bagoj Ur © 2008-2009 ruess reuss@chello.hu © 2008-2009 Siposs Zoltan © 2008-2009 honorshark honorshark@gmail.com License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License.Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: it/* Copyright: © 2008-2009 Renato Zanotti zenren@tiscali.it © 2008-2009 speedygeo speedygeo@email.it © 2007-2009 Stefano Tombolini dedo.tombolini@gmail.com © 2008-2010 Alessio Giustini alessio@alessiogiustini.com License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: ja/* Copyright: © 2006-2009 Mutsumu Nomura License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: nl/* Copyright: © 2006-2010 S R Eissens © 2007-2009 Ronald Stam © 2007-2009 HarzG License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: pl/* Copyright: © 2006-2008 Marcin Słotwiński © 2008-2009 Michael R' Tokarczyk © 2009 dongle License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: pt-br/* Copyright: © 2006-2010 Jose Tadeu Barros License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: ro/* Copyright: © 2006-2008 Gabriel Palade © 2009-2010 Dorin Vatavu License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: ru/* Copyright: © 2006-2010 Roland Engert © 2006-2007 Dmytro Kychenko © 2006-2007 Mikhail Burov © 2009 kostiagol License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: menu/* Copyright: © 2006-2010 Trevor Walkley License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: debian/* Copyright: © 2007, Kel Modderman License: GPL-2+ The Debian packaging information is licensed under the GNU General Public License, version 2 or later. Files: menu/* Copyright: © 2006-2010 Trevor Walkley License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License.. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: menu/icons/* Copyright: © 2010 Rick Battle © 2008-2010 Bernard Gray © 2008 David Creedy © 2007 David Vignoni © 2007 Johann Ollivier Lapeyre © 2007 Kenneth Wimer © 2007 Nuno Fernades Pinheiro © 2007 Riccardo Iaconelli © 2007 David Miller License: CC-ASA-3.0 | LGPL-2+ | GPL-2+ aptosid-manual.svg also includes elements from The Oxygen Icon Theme. Licensed under the Creative Common Attribution-ShareAlike 3.0 license, as found here: http://creativecommons.org/licenses/by-sa/3.0/ or the GNU Library General Public License (with following clarification). Clarification: The GNU Lesser General Public License or LGPL is written for software libraries in the first place. We expressly want the LGPL to be valid for this artwork library too. KDE Oxygen theme icons is a special kind of software library, it is an artwork library, it's elements can be used in a Graphical User Interface, or GUI. Source code, for this library means: - where they exist, SVG; - otherwise, if applicable, the multi-layered formats xcf or psd, or otherwise png. The LGPL in some sections obliges you to make the files carry notices. With images this is in some cases impossible or hardly useful. With this library a notice is placed at a prominent place in the directory containing the elements. You may follow this practice. The exception in section 6 of the GNU Lesser General Public License covers the use of elements of this art library in a GUI. Files: * Copyright: © 2006-2010 Trevor Walkley License: GFDL-1.2+ All content is © 2006-2010 and released under GNU Free Documentation License. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Files: *Coloured sidux Book Icons (type2) Copyright (C) 2007  by spacepenguin, cako and cathbard (http://sidux.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA I suggest a copy be kept in your sources for safe keeping ________________________________________________________________________________ On Debian systems, the complete text of the GNU Free Documentation License, version 2, can be found in `/usr/share/common-licenses/GFDL-1.2'. On Debian systems, the complete text of the GNU General Public License, version 2, can be found in `/usr/share/common-licenses/GPL-2'. On Debian systems, the complete text of the GNU Lesser General Public License, version 2, can be found in `/usr/share/common-licenses/LGPL-2'. The Debian packaging is © 2007--2010, Kel Modderman and is licensed under the GPL, see `/usr/share/common-licenses/GPL'. recoll-1.43.12/qtgui/mtpics/video.png0000644000175000017500000001172314753313624016724 0ustar dockesdockesPNG  IHDR@@iqgAMA a cHRMz&u0`:pQ<bKGD pHYs7]7]F]tIME 5 RIDATx{\}?{类׮5WR'c)EmyF $iB"FJH! &QH5c{zv{;MX㙝{f};c7\@mX?5h _h4 'Yk%9!8$N0w/BZ1gmsǵwѡOz/Zc 2ͯxf il31:j5?2g fBx{V$+ȨUZ$ %,Z7ofӦXدSgI $)z ׸@pde%aHVx eW16TOu}9.?tIWv #Ga!O,?c{ ݎſ{Y`>FZ˂'R2m؜Τ8nrId!dhn<ԅp hl}6|^o'dd5("|;owyVO$N-@ADQHF,_4&7]cwbc P$!:<,FFAzzz5ARɅ66^۱@J*j$MiXkshFkjy̝ízܹ+TST*/f۶mX Kɩ{9J\T;N4#8hH6TT,$1{M^Wq?~4us$j5~\_ %̙; Yp!g,XpF p)IڭJIG`DUA$.R2<-{+gad߾16mĖ-[صk<ŧ {tj!ZJ%"IP :jD9k˨mӳEK.{~@HYe͚YrCC8WpB׋VEnQI[W4 I]nE?"=QYGWD(‚qyP>lƛhOpp ͘ Ͻ̅^Ȳ18x"ww~i sYgqiQSX$bҥ]ySG)Ž…'۠VͬKFcsVNd@ m4 OXN+/bժU> ߸N:5lXz5Zkm.N>tǏJ&& P{HdXR*%U qk榏^OF̟?RO\jg>%s$泟t>'"0{@fJflv6 "E!\V( ̪UWWO<ΝWTkz˗܆y-߿v; [_'S;!BR"E:ऐyleY ]bG:&j}L*NKXKcF)l6'nfVedR䵄̉fg8 \t\GAuATXyu$NNY,ε fq+r1H g5}ߺoE0+[kmkwqAct^JokBCј`h@i@^)P֨T"O?ᥗifGqRPV9jPNH+HM>9~CDNd}iD#kqBcIw]Z-zmqidEa{-͵^?ΝZ~l;?g1愳%]e $_r\D!fI B*>5.zH~:\q;k02R-JVvfY >z<:*! o!A" B2 knuOVZˊp+x䑵EQC+JuPqF!֔~g=RiML++0{{QƠl?YDQ̙g>`crcZ =, ^4!/d}?II X%c>v-|R Qb>Ry#C͝'ssX~0u"hQl<{>qDiw޽w/B ڱnypn;]nzhNLU*yS/83{G1Zi&&&8;Ax=J)cu+|'̼T|<_]F ;dTY譴~7$1v,{w >(c^ztu &&:)L_ìٳ!˥pY+ q}Fw^C~t߾]W ߽-h@: Yct"#Td^lRuS4MI{GG{yJ)7x?j}8#$) 2 Q&%=vvś{l9B<{Ȅwbe?P(W𮿿Vv&*%MZ+?>cރlϚ= k- vw\tчQxӕJ oY3 xvJӼ@~~4M͝ҥKynÆ/q$g?glw$Sɖf%Y8\ZɌ͝%<~U7ьSbg^C(UgFkڪbNRhr|"`㈊Ԏ oȋ}&D DtVwrdݿߍYS1mq"GJra7u֢{ZpXc??v3Xq 0>,Ӿsj;tAQD.%+E;%k|vJG_՝]Ģ*t?;1~b\t[ݻ ]o`NLĢ)_I*_kJg0‘k.TLWl:O۞$GDNT3(;>}q7^w~;1~F67q<>‹ϚBW[ )%B!!)|q&ѻY;ꔁ,0䕟8 uhѓ7rKrN]\X4Zhtۗǔqt!1H%JJ#PB Ǔ(Wxs6Ў#̬Ayq9? SFBxLmmݤ'# %RI# UHGHn8up~R~|c))'ZgǸ{«w6=Iwka Am X+LɶON8m$X0w>u7^w \YHqs]i]4771~XG9^̺2n4 @@XHwٳs/3/Kf 7ϼ?~7Ht.7mo"P1z;@5<{KOB0 |/;5w,0skNژQIwug9sd \4Ʉc_x~x2 fG.;a6 qxAVS Xaר3 E/*pBuQE^^&U+Yu&ϙ@-KX !0(5rXNXI/\F=5E(B7\u^-ZG$ەW˞&ʅ1d/FI:%'F#4j` 3<ߛrɃD"BcqJ)kJf]5Y|XDٍ7c/asv5 ?Ŝk{Xkn2]9hYؐ(6qsiݗdsQǓL<IK%XcdU:FyUÖWvL3tR9 H>!ؐ? qTTl|i+4r)usO qC]r-n$'o ȶw(p`c(*XrL.Hk3KSG!`8QX;fnTgW`1kA k57!AG;=\g6Kw|nj]cՒs/:9Fxm-EB@ei%ON}3w?ܫ Kc,҄VPU3kpI'a%G)ü}!oɒy4[k[P&s8fDy4nJQ燄K 6`(F[vOw1c){N(Sɘ6@Eܟ|E<5̤3?R luVF"-B 2}̟!(wޘc)6úFֶi)+)lʙ$ # 0M : >zn~X<@O4H!8oD:[RXc +:0mƠ47q]x+Y@cCk2'OeFEjE[6w{0:i x1-YS*RYThpUoVjh0@k !hZS E,V~Thpkk-)q0~Ybq˝nr } շDxDimo` U WIfV=ն+0w5~*\;slꢮґD;HWi PDtg@>btc-^Ѷƿ[5B D' .MƸhlF@&hXcg>A:нZZhm::v0i)?<{^ڻ#Np\ǫR YG[$FZgl++JY $(Dþ赀3fZXkiFa-UJy:qp5_X>|2i GZBKy$!RI#Rɞ@X 'Za+'*ʄ1&FkL$ [qzvy95"8*t|\wСK ^f_$ȳ0zk+(*NqT1:,m?8IE@D>w׾ cLj2|x?!  #) AD M+ !ǎ?1f]Hi) J@XdaQc,^_8-}HIp&=EZIφ DvJGs2q()|>/S]f@˃LyL $YH UM]S^ǵN f@f2*IcL.v)3ɒJߵ. S.SSbUG;d"|nV'CIO|CEu{nx)Jfe).)}Ŷe+zqkoϨDyyI9¡ǘ[8Bo0TE<] 25("`~|U'_z}7hU1ox5\Cޣ,/]Nsg G];+0w'ufbeRf>rX4ɼtpzs̡f*AxUߟ*QZҶ- 6Ww B1ҙ~ԴcPӛ*#Yȉb*F{{xx,,,pBx`JNU) YHc+sl\!Nkt› s}F!ַ4m5|TssgN1$Zmwx?@lo;4μ ,|/5n-/|:*CUj4hhJ'BUInjΘGxI>> Ne*yi6oF6ʰ },2KeRIB+XҌ[n/?Oqt,T~*!jyvuH+=h 3UzbLrzȩc1^-fj uc0+2C\5@%T WŔ<490,rT (UFͰF1t`|])QPKU}8?cz $(")̐jUf%!~)12Ԩ^q$YBsiAۦ8 oq_$f=DCݮx&WHͩ0A-h^-|4k߆VSe#4|p&Obkk?_D*?wŋbH/ʷ na?8,.,P8mۙ~r}c/xfsckׯ_ݯ|M$gf.]=꺦QU"L䜞y}$?41Ν?k\PNY)f ;Cڱ<5 Cο.]ڟ׀Y nk" !C" @̺g9^}Wg-995-+++x{weVdž '#m`@pFL#QOEY@l2=,=aOEӿY7": %tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/html.png0000644000175000017500000001160314753313624016557 0ustar dockesdockesPNG  IHDR@@iqgAMA7 cHRMz&u0`:pQ<bKGDIDATx՚{]G}?3s}ǽkmǯ<5!hH  ъ?**T*BHJ N:)IEl$8qmu9gfǜݻ]{ӆt4眙3g~c~#<׉D.!ld Z@o{6t`ߡAFF2O -=J|_fU>tvv{_)̏sYik5s;j'kmw{B!?яz@؛ɒ`1D WjNZDֱ䞝u}N[ׯ{6ق1]emK=L6Za,_ZzB+^3 c CቈuLB[<"#|NbM GLS 5Z'DtҖM!ZCWJ{h(*\-.ŗ/WpJ¥bxZprz<źl IdhX)Niz4>0ZlVBSր$.ce:n-W4Z^<]& -Bo|*츅-Kƶ= xKl8oOWXWʐN.o[=7m0Y6E%LנGbyFk J`*&0U~XZ5Ҝ>o.lϢ<`tR Sn Qj830]3lO$w '4-?o,TB䔎'e,?yr݊)IR?;wva-$|ӯLsEI.\ybb`߲\ Б'Fn$*/8 ذ&E5VXtf<>_ZVLH(<)O)AOC)tUsQҼoahX4W% ]4Ch~/#Ak-a!dǍ)[KX[qSa`K7z$|EƗd1/БsUbVju6gz]ɩY#xjS)W측7t5mGm_ֆ$!IeN5CKfm{nәVҒL­<Rܻ/7ȲmCIر5Kʗ$}I*Jk</\`M.IWo%@PήM v±Q*-3$+ceo5})tDC3kmɲ,G_.6Iؼċ+цޜIOuSK- n3c+@ 9ͭg?g4kV=I$=%E#[KW]=tW.tz{@-0=>tK7ccc5ܜn팶>X ,7s(|`%sH,)1^ \b3t,_ud2:0t!no=+bx_ϰ{w{vЩ/b\ tcg>&8_!EuՏC9!?e3!S?$a{n HO#UOuZ!c!-4ޑ3_jߘfebSGS:RYR3գX7+њ%Yܭ`>* X}9j5iANvՙ BK4OKL z|DdyM!ג,+ W,kR_BN - &~xq/F0ezTHjREs[)a:I>>$bPA|?J,6P=ru \ .mNr>}r[m: .߲-pb£ =(ǩ9z$8iP`"bDguM °!+ @JÇ`۸1'5i  Yu+'2FΟoˋc<4[֥I&$DB2~yW2-R$Ɇ&Z|ҟ,?>dx2o*sR*m,ٌG684; MNb;IsWk={oA駟^&phP)E.CEhe oq} C ,cHx,ٴEa2CRJ,Ba$/Ѿ}MUS$9 cPe6q([ϖpXdbbb}~>88XgB bk-gh Wv_z T͂].3EQC[Czb-+ZA6'm~[mN/>MuZO<=yGiDj {>~xѣWSnG oU~oOuGo- sB\j{`S79TU{qRK>pv8?|ѣ98q?;&jZJq#!%$F߳s& tb wj#׷4,' H.Q %tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/bookchap.png0000644000175000017500000000612614753313624017405 0ustar dockesdockesPNG  IHDR@@iqgAMA a cHRMz&u0`:pQ<bKGD pHYs7]7]F]tIME '٣Z EIDATxKWfpb0EN"8qPx$€ ė@bG"6 [%&n{cydDg%1Y_+r>w=,F6:ԁ?Xl&,!I[m%tAbߊ3m6Y?۠{l>4Y^2`JX_h}} \},*Cz@^S〄nƦ3zjlՕj=.=:^U'KS'NE:M WCVsT{싌#jpuJOۼYq&$Rמ{+,]}?;[[u5g(l&U D@s(=41RI^r&5_wÃ6U  im"ZK *SEB@FյE$,˸kO<+@BM, >q{bwRAqx4]uDC1l0]&! J J'CvlxH۲(iVK'rT|ATQb#G)hi- Z"J} /jr1B*C"D H>Jq :CkTtJF.^%WJR&u-syD@D%m,e=O94fB*Ga"TX-̻t%E0h< 0ܦmR*| FrEiYx HM!x4S*8)(x6ڊfC: ep3\IOj`@ nx-:.#T'$z`JS~9u*"dD$ـHҢ>-и(Hw}G]7y.|sIUm!BJg6"=AS+G\hr蔴r{RAVU#Qɗvԩ|⦑i ZEwB([tČ dU|$=M_39j s  o'hH@Tlc=DC5uB!ZuBLu4 JϴikE)pH^ $yvB8H5GD8{{7@hyFDu1b̠ĸL<f4e3g>_~%1@ U IV. ДuFE"(ww9F?ɽk8/ӧ8uC\z_yfѴpUx:X 2WTBSP%lAMD[?:u-l޾;oK2'1\v< W"4xk:/! QB{߄u=nܸϋ.]B0o_G*`|w.IA"Jŏyx_׌G#֭[_{׀w!gДĀH|I 5i⾤/*G-2шw}g}UUUJp u+#Aos=<V?oYP3ϼnmxQL;&B!KGh\q"QU$%~g{~%q~sQd"\ KX@IY $Bi":ݻlomx^uν~aeD$Vs$14Q@'Ua}ﳹ  iQ+W`00\.?*.Ws"!͛<+#G}3dURckC_o{|=MFO!ID37/w~K/s2DV,xV~"F6x?~_t;"ۀ$+q{  t@=w__|ׁ/y8~Lm}}+W^֘qf?qĖsI4M &#}=Cu+. 19;*]{p6;V1 H%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/aptosid-manual.png0000644000175000017500000001103414753313624020527 0ustar dockesdockesPNG  IHDR00WgAMA a cHRMz&u0`:pQ<bKGD pHYs11(RIDATh͚y]U?.o%~/!$$`D-hGG- 3 N`3 NXRh!bB!F! %t-}߻g?ү&jV>sϹsaSZ7X VѺj`NZ*zNok^}w`Zkmklk1 ڤ5Zi4F'1k ֔ XKڵ `QW^xh2իH_Ak-֘BTct^clźZݻ}-]Fͪռ[0lB{B1#寣~2yRzuKVu.h=WJ!^~',/M{1X m+eegojœ8a-TV$cA>&2=wty8~_'Zo祛oo|͗\’k떠llX B'°,p<TWUWby^Dnxh:[}yp#^ɟ﹇;vл{7'hz/!Zp?j_SK͊#M%@OjݩAMM3-tݸKȏ>v뮣qq߸7*=? =?yԑT\$O=Ŋ|k 鷏a%K@1LUyE5.f Ѻht*Cn 3qvV|&2ǻ|u0눵6JO`&7 gOTZŒ' \+?)dѥKxuG1ECw, 4F"۾gtK^ ),DG~ud{571255]}5㯼[oQz5ar^t%f ^hMO4~i kOGKKTcy-L>u72YA3ؿI\ nk0Jhq]p ]Rdg]L,3aSkr"--cG1Z1nDgц©rP3`D)V |p! A9!l@M7mD&<^x>XB#Zt. @䱪"B/J5`A Ā֓RJtj|uG:; kй&Pf&[c,"r)TEaz^Xkq 18)! ccȊe6EQp=:?r-O #Cǻ9kё zV(g>@8Κkkݢ/, !4Oi=!J39bI,ԺBK͙9环2Ky}˒kyΝ޵?Ù4mgCaVeUUgcrRaS4 IV=|eo፻b?Tц?ﺋKy׿-b$n .㪫>G0>^gOe%, Gp`f&`zlu'& \+s]jWf mh Lxk+^"{ń᜹6okEg2!J{1To4 xHk+O tVHF8k_yy>p$::p|57]ID"cǘ8|s︃h֙10 kذa}Ÿ3cڶo딀L: >kldwK-}a܉!&J8N03ZOK)kWt.C}V]ˋ7݄WSˆۿ4g`hW_Ee2dN1י 8jH1em(>\HnJeݶm{MLwwn#:a:MT0vj:;]͛iټ-w wGsB?7*$ g̔iٙZK?H㏓BxÆ_|#:jvLc>ʛ?L J[(Yy׬!R]Ͷ;ЇxɎ y# Dd]YR+8_hPQ?38ȁo~=/u}}SnLȕWĎڶ~΋/ yƐ`zhxGzF<};c _Ydv^}h;\\!֟Rn) zC*&3>N`l`^Ͼo$7߿0a;W_F)X> +W6ּJcd2dsK/>V{/w;p80GnBȆ[/)) raLȾ}$׭+x8ZYWkٜVge-RHJG>:m-]*Gshhh|(0,Ƃc.8xh,F '0FD2 j>!ĢERgfӺ6Ց;M~"y뺸c, !0h4Juu5hq0!B<#O,S'F#V- 3Yk'7Wk֬qD"kq@cr8S.fffH)(a%.H̞,=^]ZRmO!떖Xš7 yNTS<^@r!`NRy)%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ stEXtSoftwarewww.inkscape.org<IENDB`recoll-1.43.12/qtgui/mtpics/emblem-symbolic-link.png0000644000175000017500000000426214753313624021631 0ustar dockesdockesPNG  IHDR@@iqgAMA a cHRMz&u0`:pQ<bKGD pHYsu85IDATx[OlT}ÊصREu A*KHn(JI5USPJRɁ#PosJ B VpJWZNupЂ ;̼7o{z|y~ߟy%fjZ- hMO@C""BVF*ҞY[tx@%l V 4yVW^G6skFm3=;v(LLL- |(kRT*GFF,":53h+_xʕ+o۷\./X=:]vo*륍 &_, 6x(˅BaL趧aM#`#Q>IyTIՒ#/.vOOە"(y9}Ӎll9r)/<|W; ]'F@j?  H9X9 $X aȄfR-3CAZ lG,$XgkvL9B f$l cp`ndPy4^R `YΟl 1.?4y 0\AHc A ^5ڹ{iCc աĀHܹO!"Yu,ޣC&gD@ ± BP|jI>8^‹N9g.Cb^G 0Ξ=^ځ}"@k a-BBC^ ƛ 7Os94ns|gmL=h)@ '8>p ?z(gM9uD[$fǬocΝx?5<`< X B 3Dݑ0ppmmmM#]GZ'{-{iv@ pؽ{wME|7;7n F-ͳ\Y_d)Mq L}1] hdttDXYY%,,,Ğ"?J>cLu\AU 9p`Qވ~pXk:uʳ=>Wϱ雤 #?~86{c|ءR-j2s9sw=gH&MOO!H1)h~$ ]{߭xc9sZƄh1_/n)n懯?"klnnxG\i咀i9%su}WVP;(؎˅ F6T*ZOOܭ~7(WHADO<8nCnShI)AD6R"dWHh6ƚm K)qe\B4d` IJiWAywBDOD, 8euRS5+k<}4,9CQ1hJ ઠ d[( hZhI*1uO4ѰW! q}3*ccT5"(##QKk|pDUJDSi܋@x kEtBa,PUx(fMmJPryh2q J&R2]fn[4L. $.HfW\*6 9IɔĢ>eaڒ' f,F/enQ}*LjhBAni5A͖(`6BJz.&lCoBA (RHAnAUXBI k_id)і?KѽH.[2 f/`r$v1cdv;eOO2pHW5Em߭ Uq.߻s;+p ySukٍO<*}6^s][p:G]qjxxY]|\(J\^p_2$`vWb e2 خm?g{{]3öm=thuu5ŋܺuQTH??{(ܺu!^xTy.</^$Hp=}A>˗嶓!ށv;qI\4Mj㪪DR8hz MSQUPY&)æ_g5y[&Ocv <^J>0 D"В$A\f{{xf,'|sz`Joo/Lqfgg334idZF>g``I4Mcrr+WMky5t ә8Rh4˗I,--GQ* 묯d?fjj !x>ؒ]ܑ"KKK-٠]m>m_L\g!J@;33$IoG}<Ì+Wp1lfhh|>OT"(>M7 _6LXa^JRLMMsϓdr1::ʫʏ||~;t//sssul&ߏL&CP`tt `O خoO^g||D"iI" 211mΟ?d]{4Mo2??O__lL&8R)[J{ZaU^GQ9Khj/^l [zt*Jv7ξ|s 4eD0MʊP4W|uw)` '<.ߟX,;d2OSbS/9nٴb|C8MP?$LJ%YQ;j{_1 ^Aso'h:-Ҳ,RX 4Y\ @_e6[#_j Rجדz¯Y]]měGA4X,ZRR*,β(aw g*_ eI =(؎GW&@y{RիW#@RRpĉ;sv鮝ƃA~O[vFUU 'FT^d|ARiX-uOpp jw0558$ _Vd|:mŎݖO. /*lM$L&O?|2Ca8b6sss 8_lnnRV[Nw<vfߩ?heq5N<8BR!Loo/O?BPY__'144(NojNiPQ_ lz{{)-a˲T*H)SZ<) - 8Nz>\ xia,ҥKTUpp4}60 X,F"x|1v'kGiށaDQT*|FpO9B\.G:FJaض\%(vnA *gΜks`+ p]a0Ms߹n !o9j@fS_+<t]'Nw-ARJ8jշk]YYY_=s'UnGb~ p\_0X^^ٳ7xszN·p/SK*B44ٳA+'@7(o=믿^wn[E~zzo#˲.4+"h4J6?oyβ_ѥ@`$auusNOO,+ {S7ul6;3;==æ-|GUh,[o/z3 ''O~o{t]gmmw} Tx@J(I)THRv͛iǮCEO>}…5k"g7~x4iZ< Q d}]Dmag~gM,p-z70 ۶0vwwKo|>c!Z F}f);9 >?|'j2ZJ%W$z D D2ĕ!2ė!2!BdRHB~[ C°7 ~IHI]o}H{qsޅs8Bo}/x"R4;Z0 A"&hu%^I$4?(}Y W6[H_ !~}|c}~wl,RCE b!@0{߱ب\ZÐlRV^O?O;uӥ8{-=-hM>I{IBH=@cM;qJ=%`aB,FC>{qŇ lRp×k.Ӝ11 AhĿ$k EIJSה=0tE1_tX6WbXXXѣGy<ϥjy1Mnh64dsYl&L177.LnsJi\Ą⨧b\G| d!4u2 P,4M,+"XiNA4$HJ*f}H)q˲^n<M0uK.JtGAJyd:RrL2\.3==MP`ccc6>D0 Y[[ :F۶ 4I&H),,,H$B B"qh\<hZe `cc˗/I<+:Ai$ No,Rfɓ'O( A@V#Lb RG!=0}LDDx&\\\dvv˲x0 ^z !BN:v_W):!wyGj}u] @4 Pף=rssifOq>t}^Eubv$?'&"N/zVpR~Dh8&?AwDZC.^ݻwF[6`mm 0ÐXR)b;;;XqnW5"\ Hh4lll0??O }ZiH.#ă >#2==ޞRSu=&''T*J>,%*ne&DAR˲!ua΋yc"l˲,T*epEL&Wq5&ڄoEq9̫B`6{{{͍=eVD"A2Rb`dvM*lf1 VE2P(thZYALTa`&a q\ PD4deeFA2h099I٤Rp9=zit: PhZضdh055u?ab],DN=虳nbaB@/,p]W%("yeTdB8׮]Sm.sssSqٳgq]Wop D| kCk ]=82p Eg?~B[[[mt]L$+O0 bmm qHӸ˫ʝ;wxIRc#--F%!@#ؒX8N>A(x}%2JEun˩Sf躮M<ƁBõ(I ${C4F!F "v[8b1eam)%m(.y饗&@96#[+x3cgzP8((OvI&t:GQDL]c$F*'Ma"<Q("Qm۴Zq tu]WN`*-i_b( z[9BHӄalF3]*LO!+*h6*Oh8C*b~~UZ,麎8*|d2v3ځQ3M8q4M+uUM/QyF4qlfd2I^4M&ӬP(j* Zm111q"]v$aH9RބvD0L H)fzzZSSSAV#s5,DBآ4Z3OZ%͒Jv/v<+c&xn'G4=3_~%j*nN@O1_t .]۷RYXXj5O~r cjh m?s\W^a1 Ce:Ze"op]VVVzguy2'Ɗ@Ovãm :c?&L0 fggbd2fi4P9rUc[[[ӧBX0j-S)4a8ޤhBnSI 쑄Bnx@Jə3gX^^V=wX+Qb9sFU9 4()!gt]ck,--Kr< ƒKJIVuݡI(yyޡ8{'AjF:VN`4MϜ"@T }BZV_ jN\.w"1;;wg*Gmn޼qDxF S!GeYcIaܹXy>}6;XU>+xބ`f旿{[?tNDrQ2D<0x!?A^Gg0ƍկ>#0m* v[yTQxee|>iיEu666d2b1b89|ߧ\.+'f~~^sl=Q$:X'Opƍ7n|dXt:lmm)l6rj5677IRxG&,2tz.Orƍ =s`vvvh}Wgz-:Cё)\ibY?я"nl6eQEMduu۶ s1r[nٶ|8`cc۷oS* &pU2e׿Û7oF "?,yי}6S"H`bჃժ:JoҥK[יqUlH)ZR*X[[#ͪRJ `gg>h֭[ |8zD|MkQ:*H$W\u]JTJ(똦U<:!eY;w:@\zw*!?^yo]=?1}6?} P .駟"7޽{jܟ'4_5b`qn֭[u]Sz2ȏ%3gxwI$ضD4M?HR e""UUur@U*>o>߸oCR !!.$Iu?n811mפ :9R.s 8yyuu54g0 988пǟ|[# Zl0 Ng0D^t:/8"Vy Lze~0L%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/drawing.png0000644000175000017500000001232414753313624017247 0ustar dockesdockesPNG  IHDR@@iqgAMA a cHRMz&u0`:pQ<bKGD pHYs  ~tIME =IDATxyp՝?shhdaɶlls8 Y& !a) VH*Gf1 p$#` ei$)͌f舰%Y쐭UMMw{~߷_%_W_4}\/}9]\F*U @Y?x3dYלY׀ߝ3EpD"lh_}9T5 īzԇr4űlJU#_1L>B`C'#3cw gkeJkYO%}5t$Zɧp.ʺFPťQ=@%8i4⨊9gƜM*1m UQl>o=[qS+4kۖ@4NjF$I"_*p`YN3>QD7 umeS5 Ld 58hU29GAY8 S1Wmb$ ƥc~̱@c*:8},ޥ?]m39X;'~`)s`6.`ګ'/Tv:o 6O4/ZGu)[0KY F}?Y8StFG w{,I05ͼ|o\} {i|:}m{']L8^Pgf8 K5r!x6}JcK iH4/ gbBo*yƔNgsr~2[oo`r->exʀ~_^&xC>BzX ,8J|~w~RrxVf$4Qem^psN8 J1>>iA4%qER0P31vM^^?[~ H.rLKK Xn|J Is?&i*o}J/Kb>#   hq@I'uP/kySro1p*m#˿Ao.oUN.c``˲F l޴5_džI8@( mJ0 ǿUЌ@7w|@bEK Lf&-Bw$VRa׮]x<EX]K.]C9'hBIAE9>BDw o\q!C[.'02wᕃK#ypM=ߊ"+8"d2!JL&1M|%uȑ#l۶q`2dP,nd?ST;91՞eA}4^DZ ԮH>Q o,!@) POVZŞ={zdY+W$Be1 344ĶmȘ)IOaX Z@ކ^/4Id+ixh P1 <{nlڴ:ZZZK"p\ X E\H V?]?ۈ[.Z/0AzǪ~k᡹!(477(QL&C]C b^H ~$@Qf`47f;R-U xRo#[ eRѼg!1 7g?5kPUs H0JS纈dn0+UTS$ F(*׋dtK6OCZKoI EJIUlb C+b[6LH $Wu_˞D"zzz8uSXI*!dMD3'2Z#9r=}r5'z r|/(jXBIb5lµar܂%۶4 ]QEQhmmСC!];B$idRiN$%˒dl߱rL'RЗJq'":u=^^xsR CJ`9q!B-"-oTtsq~zFa|eYXE(btuu1_Saؖd*\x%7@-YOC}c趁9'-Aܱ?BJ|1|Ӯ48! +4\=ζNÑxc_%_k׬nci0x^H&d2 Jkk+:\Z\X @ 4j*]'^4T;:%dLQ*W!{n< 13߸G>2?6jvÇ81ñ6l~yX$rF|>Je(L*0 2 lzB.!-\BpoSrZl ݰ1%$#Y({pm{cdjVuol޽h4͛ 9Lߨş"*8c9!ב(5DׯDxټi RSi,&dwS*PTWyQ J_KL&[p O?-F/8LWV 0L5(#*0LԩXb%[7ob~AIA1SO;UU|/L@4(񑋼\FeJ7r $Egg'###477G@e</#YWj"+ L&W6~0ٲ ;UZP%e@+i0^bl i]㢽^>$IDtIJt:<f%H7F@<y%T(OrjrBv)8BP(9z|t:M.X,R*f 7-1@šk נ^ $) f28L_ ʃhůi/IRׇ8466ƍFȲ̷m*/{.?]{- xu<  2[v3m 5;/_Av{H{Wy%Ip;Mfm۞1|62=lQSᶶ6^l\{1褍)L)ϋc 0i8V\uA~isz}dv=}\/X &q-r+^a!VTU6@Oqާ82|455-B }{糧oZ$m9QEFGBeȿ NhOЀ*Hz-H|;l׿uV^0sazįF}s=jSP o;'&GChX_~>t>ݧp2?Wnzt.)я OI]|%#4%[/8."b&8B1#ϰi΍ Ki&2~pmΝC45^=Gq$5A ,JYDzBXqcM6ͿAb2_|o^|={K$V㌤PU/BzYi MygD"g wG`=K2~^#[la˖-N*"͙=%? \w:::[d,S>vϚ }32~Aeioo[o=#`6;wuY ^LdvvܹlO{̙׾i9']&vmB-M]'%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/book.png0000644000175000017500000001152314753313624016546 0ustar dockesdockesPNG  IHDR@@iqgAMA a cHRMz&u0`:pQ<bKGD pHYs7]7]F]tIME 9O BIDATxKdQqιU==؞S#@   H ;>o`FXϱMLOwU',"nV3rY,씪+uO?$oM.{\{<'/`lky'u>/6Sr:aN/Cԝ1`۔B!j M;:4* ,tFm S,Y6 Aws~.=ibZ "lsripwZYz#XF!#Gõv,Ke|Y BUdò4?m)DC$뼵nflN >v?̎$XfH"I% ,;#K;-d BptcHNw@YHQ.&J"Iuڋp D(Q ecKwN2:3։EwL5/$>i-0Mض31UdڟZ 0x%"mV-餓59&ۺL]f"r1Z 0UFk|osw{;'QՄW /?QtIM#5ܲD=}M7I4P%wg|ﱞ&l3@P +**KBx t | fetk9_WY[x<-;%ˤv7?wq[?O?y>z>Oe Yr  0\ =pGWȏ=T7|c] ]o ~\__;~ﭧ,3ӧ71x~|IX4ńpUۗa& a4 KZ{jLY>!ћ`MS5uȍV)xۥoc۔ѓ-<;eL>x%,7[@~`n[φJ"n5H/“F~!YB+bnۼhMa맑Q_ij zMZIR%Ԍ.BX^|k}3t :IU|!M KkgF! Eh2Y^,-S+[m]q\<2-N$2A wƐbE֒k ޳I.݉bf~B r6z#wҲdtsNqMV7gޅ%Luwp&Hpj 7BY sfCQ z|86-sr~P #iU04s\䶩?p8vTPHnΜBeffcio t_יIg45-xWOM=?CU=ѣ0%Ny0 czK)X . 4ETkB6YFcN]H^t؁Pm$XY?/Pa)K" "WU_ vo){n_z!s3N4!moXi$4~4iުV@w[3+/߅UHң 4D91cخj!te@Zrhl'M`PDj{KЂG n:)~3bh/boHK$'GhRނM@mID~DfP+j6}$9{ U&p Zx,H胂c* zHT9ט\3j3g,9.{F }D̀3Ky9'X:g԰M9 RԘSMU;^nE"gna~^3RB;1ձwSd۔e-!KܨiNc]8)<ͬZhfBL*lNwIH^%gAQ?, pMj8Qi2R/dH7jMdd7aۈD檴CX߀oIQ\=G݌9ֲx\ 8ǥNVEzJN{̚?AKsG_QnPNrrjgcj^A!-Oy^6k{azv/PDkSFG>2~2@"huH~(wɽ2 w$}tTi*#3ai{9Ö@?ח{G[̈řj;!ܹ. i5.ݏӎaeey+@=  ų-3Oxμ}Pc[3f~Wil_swRO{ױxa&5Fy_yPΐqu(O-]}4aI9'#=Y,cֻ4Ij5`PPV%f]ܼEHyXzn'ҒL K;+LArlh&qoXD5tn1-(ڷŢ6hP4mwE\ر[%Q%JH>$>p8hHb?`t8sFw9gRe1u!>~EهTC,-ܮ{j?iMQ$j@ a Ёp 8sO :3Vߪ_?~hWu׋OU< W+UJ BlAF3 3=l|[:[񶲥R;wvS,BYϠ/T*t::ivdxܹ&}=Dスm?[^,JD"A4A۷Ƞ:˄aa,H$B`Y lňp83, #br<@m(lJ!ˑL&!L+8`׋{(cj>DW^B>{J%fQ@Hgg1 'r@w]8[[[:u &h0b+e"JFJ!4[fP dlp`zj%4MC ( t.T* ]g#\w቟{p(f~ 0K3b_jYTV)VӷSS`6Z/^  ƒr$Eypl6beղR8;=뗎#A)>{GIٵzOatq u:͛\x:bR:M[ Acj ҅Nh*/e9~(1dn1 ts9>=`qap$n3(uFSR7%,b}۟qq{4[-!xꩧw_|ٹǏ7Yؔ(yz>= V!дdE;vL5{\;(e(BMne׆XX 0&Qj@`{kp$a;# to7 RB@>lK<GuH&7 iשV+4~p$V6K(&QMdӧ)(>ý=) ;amm7<䓔EZˑ'iQݰP* N!Cr;ށB-ѱ'xEJ{* JcsH)٭m:_tS gRsMjJjHqЍRJToh'bT;l# 7JƂLy[m7Cހ72FrLŞMEjxڵkH;Xu}q 5~4M2V_[0}_뿯#ELz'bԊ  jZMhIoeXN.Q;wKR)J*q>8ud<@hj@p4LVEJ9\tXj(T=4rPG;-/ jqzNZ=Ҳ({k-< .OkĂgC9@P^#7at,@'1aUakY\&8l0 ;dw5H4D,tة0489=5+BZom&^x(Zva"'} u40C9a)=?$zqskR_ѩ1G6О7W/>rMӰ, ˲z蔘mDs엘#G FæԶ= 6i+O"PשT*NAtL(jz^|έ7-Z&@H"xi`)7xgj;jeX]]]{WmY @SP M?x"T ˗/4M Ǹ)qIWE96x?O,BJI  :Z~cc#wʕ?*˶{ }3( 7D^X|;{Q*^AѴdGX)<ӤAt]GJEZ^79v>s\իܼ q'2 P\.G  h4x<ΎѾ/%G3òlj̫i4iRӜ9};ѿ^#H>˕~?qaׯsYR:ӧGiBeoכ;JwfsR),Kb&@|&ٹznܸq Xv4{[hmr>wTs{h6[fl6K0S*XYYY{WoE(-äl"uR^z魞 'PRJ+}hfIV#a&?]IRu\fwwbɓ'G" Q.~'/X'AhE^|駤R)H`ἧenn9<Cّ')%|_xoYuOd0'J!3_h rZ^+z[(r 4 ]5றV~̆CΜ9+ kjj{շ : ao@ [~3 iM&"vOIe>q'z@0'!7M ϊ/YȬ%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ stEXtSoftwarewww.inkscape.org<IENDB`recoll-1.43.12/qtgui/mtpics/sidux-book.png0000644000175000017500000000367714753313624017713 0ustar dockesdockesPNG  IHDR00` gAMA a cHRMz&u0`:pQ<PLTEϢccCC$$oϷxx99Z:.C9mc$$xϬzxx$9$C.N9x.$ϗoccNN$XNcXxcڬ9.zcXO99/xx/CN/$xᏂ:.$dXcxmXXNC..9$$x$.$ccXXXXdXN:$N.X9X9D99zmmZCCOCC$$$DZ$.$.cCxcZXC9$NCxmC9mcZNN.$ocXN9ĂmdNNdXX.zC9:$d9.ccommxx:$$$mcNCOC9.$9.ڢCC$NNXXύC9NC/$$xxςzccmmėZXXXNڍڗ䷷9.C9ύϗq5RtRNS@fbKGDH pHYs  tIME &3dT{IDATHDž_DL.pi h)Bi6AteW;,|!(>Vfa :WdsA/ m:~'~.]c((]. LMUBCAiƊy Ɨ8xUTCF6e,d2l$`^c!1UUShf 5Fst8ȣZa k@ɽRsNrACYa.5W 6ó\,0\fLσX&XPo76aQB`p$$f%@UZIVDܢ\ ؠ%QQ[[[y4:b$3s !Ohi9]񞄦i,_P,S' x2iU2NS-mg&=̳t>d;G.<1T/jK[ŋݣci1#O/Mi}@ geӡK=:˯\zg-sS%d{UIb,b]ͷ~&P6^",~&HLAHgd0W<= z)u}XYY]2$N߸OJf?>LZr/?%Qu]XUozuuw_x[Pr[؈[9}Z@S2cf{涶Ggƴڄe07Bv )?wx\UnMvzF~X8' Ѡ$)x6EwpR+I#ȝT.4 X_og@$ V!D*iwRXg]~)Z1Kɝ$XBKuno(M!C+4X[Y@{4b!#d +PVDd/{IȞLd{N03`j,reg5e7wz /o8 , ϝ} OBXZz@ )L=좉9KsK5%ZukB`/>m,E1\Je|;/>qc VYcԵ:ξaV 9՛Jo_Hq;ڿk{е%ܛekcXpQ>k+ORG#p@V=5>,CL&p`ֱVtp7*| kFsӥ8BMUuq%+Ĺ !}JaR-iWd X |/$q1eR2eXrHR?lo@_;Eprط/bHubjF(}pRR*<9E~CGԤI=,s2m_O@C'H.X,^$I"Hs`4~?W q)Y<|ݼ_kVJXL%/ Ivau鐺"؛ψW<2 7JLE*7KG_n<%C76eFsa>;-Bzus‹]1\n.K?wĤtpptޤ,]w$>JX EEh*E1L]V9\\4B9wqޭWrV ]|[gb}ˬBZ ڮ(_O+f]9,x  %c A^uM]REbuȰO#@9K벙 ގvB !$3JsY1cKLlm_,x0 [P%+6Vl] qk!A6v֣Ǒ*-ytWOKΕB_sx`TtqY.ࢱ Foj8Xg?!"as-|5q$5]a_#BpFc D6)~mR~za1JXq6Jl3̼i|<NMLLHE FˊasyEz'T卓JW = nHPsKIhb 8?=6[9k\նUDi;F0 O4-!L~41 CJ0[HD}h(0~o;^O5~NadqZ`I|q)$x6P,9qg2`L~U`Á=Nhz*9 hZK>&b 2 lG "Mf=`ɟy& Ĩ\)opvHR2}Fidh i ఛQIck0H 9sAZmK@2x{)!@+jB1PfLɀcvbk~WLJ 胩fe AwDt $#LII87!Ŗ+5GHqd $}c sєh~jeNx̛i)\!O>Oqp(&;`.xF9LqnS^"Oq0kǼtyk{;sxX{Z SKw~?-% Do|O ^gea6+qcyc ]Q<!?[h{'m8tMm1[P}~#42ɮG %>7#- )e"t 9N5l){|Vhkw.x]?ol)٬<k9ؿgRkD peInnppgW'81ǞGZbU`oIxx5}1ßoÙ ['-e䦧}]=j}\Hԧ5ɤ1q~9Q%i3JְLGb4E)ν랕RVTW*(U7p]!  ub u;2]pA~y[Æ>$Ea`IiB=o|0ޫ~>9;{+\I,Yu0 jP>kKD^R¤*}DRIa}e@yk˛}*ۚdFxs̬\Õ*%tii&>HH UUKRY/SfIIn,/o%TWTp aKh30Zc%%w=zV\X?L_/R~ H,y0*9E xi#Uь@3Ul4[DurhJǨKrȵfXAjzO cS |.XxA9gDu.@zvjI4^;4ꗞMFZm~pی7cHL 0qOϴx8mʲ뺠jX ^a#'߿4>@dΧm^ry.l *bzMOąKp$gFsz!zUG!A jdgUW[ƵڼYf@+ta@f"@[*8c#3Sll $Ɂ=@ qʢGI'aR)p]; !hhh7hT]G("M - =^2naař럶X̟R3̼i`2L,ˁݻ$& 7NsBq4cOՍl=M:V4&T6hoPV-o,xPO1:ljci9 E"3)= Ewrw!MMlg(^Iuol]p偸2n6l5t #뉲%tXW^.R5fX0Mp9q}]<10b]<~56y2V*jG8iyd9o[$)SȞaJOX?n!O Pޤ}fՓhYbλR7x0:4T`U2Ovz>oO&aJ $C( _졼1VV"t8P{0?q_۪̏ N+61VVĸ ;xj E*~_ `HrR^6馬>v\'`SsKy8=oE %Uc/3:ڎōsթpzё nQ{y Ww ="AgѸѭeu&^>BģI}@"ک !imbE;}z fC\qS);9J!ǡg R,p'H/Ϯmlb_Mc} =nvSk,a.,U.uӌm/]7޲'`l.,:ʃYG״+_щчI'z,mZc .ʽQDNswsEh4F]]+O];~XOYvD;b1߰Z,<PsRΈp7\9ܟ {۸zVo"ܶ]h˴- r,qEN[pn!d gd 90=:xzΦq;izGYVhN$w"vm Tݜ=~M9;/7 D>Vky6M{u~thǟkhّ^0aQ4.k5_#iG%[MZ].7DDϨ1e.ڭ8Y@aoM8;Y}" }!TO,c7p8c&^V݌l=+`'&FLWbUR ~{_3E%_vQ!WP a[) cl(0$q_?F筿(u@%ijg'd"%tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ sIENDB`recoll-1.43.12/qtgui/mtpics/source.png0000644000175000017500000001025514753313624017115 0ustar dockesdockesPNG  IHDR@@iqgAMA7 cHRMz&u0`:pQ<bKGDIDATxś[lՖݾan1b'q h4::м !q}@,[OIdC8bX{BӋ-yA)KrP@ Ҟ]RJuo/-D3ͻ?mwض䁠NЫ`XNpPC^du!2?)NBBBY6ULs+}gڄ¼w1\_^>]ӦiqlƶmsO,//3::裏@ Pk׮JWWyLV! EAQ&&&B҂EOJACCBP穩)N8A[[ D"ߟmۜ$---,E!{n|>T@ q/e*eۦ( `0oww7DTJI @Ӵbmm-kB,tuuIRn{ (+|E(?* :\#3>>N<OO BvڅiD"YZuYEOOn?χie?T$JiZAUUe``5t]w Sr;SPA$bYV^HR*}}}R)TU%HH$\>)b l8[Ns, 3\Sαǃ˲*$B~BϪ+sydj*'XJwMYg2iaTW6Eanng޽{Y:={d2IGGCCC˦Ἓ fUPͤX,ǩ#0::*}sAZl1˗/O? @gg'R)^k+<!$`&>B߹kJ4Mc˖-ZlllK #4M_f,LjR0[g'KeՅavv՜T+|] ׳gbxUU P(޽{I$YIN5W;tOKp1BE JJhS@PTLbϋ;{UriP*&; Pf mn,q܊Qm7o" k}5M#@[[uuui3)VVV|_4}6BQU6ؿ?yӧp300@wwwV2Wb%14/D"199---Y飯ʙ3gr LLLm6:;;Bl,pry3gP[[s=(LOO@(8?/b1&''I$^mrEy ܹsElvy47npe^xXYYann-mn<w b1]9oNss3e(d 9TUeiia d`0*v&K=pS^\\k< ڀҴ3Gfhsmmm4M,rB{t !0M' b RA)%4d)%eJ4Mioog||d22lT̫BKmm-333n+7B`zz4zUf25Q[[۱, UUIR.oEQ'Rj^9Î;H$Y%Bݭ[8J@fi߿DTUu+s[&s3͚wS!0UT4\5Ms\=û_TuK.qyjjj7/iF4ܹsqz!vܙW0 ׯc۷o3͠aPQ ҥK|Wر!nݺܜ{+ | r<cccZV]>}Ř/RUP [_~'|Gy4 ,--eiUu]Fcc#<{5?? ϟ?ρ8x eF4-HZJ TSSCSS à [lqC% #!I!f#ld$-G*${s;{߻ xў={ +)SU['3ȵ-Hl6W/Zh;n <<|prr?>Qk$rT@UAU@Q[P}rYN_yUE/U]~˽S3.J[qH Z0Ֆ{f|-GY0<!W_Ĵ-`}NS;y)¯hLh.E` 'd_P; +v[ow|hT>ҩVP3. D%/:{M7Z.H;Fs$3ðU'вk%/r\ g@ [t5~;5]On+(Ƶ7H$u:k;@_7.Vz᦬,233)))I0LyRtt4O<MO3gX~=DGG3zhFMDD)))9r$>}]-[ҥK1Wev‹/fƍ]VI !^&H\;>=YήXVRSSOxWX`(LEQPUy@o)[z5}~6U1 : "?W֜sO -ߙF`4bGmWS8sd%IIIO?eÆ vm>~;J\ͳ7:?֩лZZǔ ||`t E4$~  b츣 pwNBz'̙3%Kxb"##{.m+ &;r?eo?dOB/5P_ sIȻ&qhɃk֬!11}y@Gȑ#lt=axx8ǏBaqk(N}V&{BNq>ZV.\Ȗ-[p5@477;#b!ܠ'1?VT0n8>#^_giCE >֪`XqSⁱ>e,tRl6O?tTioaTTT_%HhD׍:ϖ-[8(E\iҵaĊϒ}ñXc=v`SS`Νl޼EQFBE`*Ζ`)ճ)Bu8mVn n ~$QXs LʨJJJ &zk3=oAFFg7/MD>} :BNZk2m&يVP]28m@^#qU^2$SOΌ3: *((ॗ^bǎ 41?q8sHXN4` 7*`0Zv2k@& .]2gpnǔ)SHMM"233{Œ3(**"!6!ZF@` $sJ= 0Jw9B}:I؏ifGĪ='##u1eDQhlЋ/HQQOԾvb5[A ]\f5o]ے*Ո |mO͛)++cƍDEEv>3uנX)s(ἑ}ٻ^B']Me]>DMW+bڴil߾cv;*`СC8.Y?> ]P9/+2QZ&Z2 3D j i ϋyq! 9s&Ǐo__6 Պri +t,Y\b_o]EŜv.,iP.!4աGnn.=,_s,#2VKccJLB T )16'ފ˯IUU%''͛7[o U #F̔%*QO1ahKrS؃zߙq7OꩩG08D[\ Xd >(۶m֗gy];!zǒY&5ɑ xEQ6sP8UBD٢/֭[,\vmZ-> _|_- 0]ُ1/= R.*pgDʌQED48645.ުU0 k<0}tAo~NV$Ó8>kg? 続TsB؇"!1*XQRb0D0G_E@Ů/Zoݸq#s%''$^}Վ 5W(99ŋi&OPox<(K͚**9A}PHaMGvPdOJ Y4#+ ht NW1mD< %(R 7cgΜa޽ݻwf`07wfΝGgΜynLm۶ocX>q8?!cv-*1j4455qy :U_[(\8l0f3saڵ !!!7{=jx3g;vĉ*.`0~x#GwyK֭[GSSOٶG'1RZZ>IL6222|aIe~=p"%K|6%z4-Vu ԌW}g*(ѲR;0$I")) NӆFEܼkv8EFFi&VX(9aաE(5/+etfͻuF JRR_><;p | bm|yvwƛle˖-!כ4 O>$'lg,1SY|=Em@eEp<_zN52Ob6+:r#٬_>k׮]_^tCmIEt:---mv3UPĖdg AwGoٳހʻ)((AK83|!Wnw_p=?s<{; (6nd(-d zc>]]>9BviSB{(=` ;ԓo JKK=5bx<ՕbAчx"N Unn;AA(/on$b_!He?UU96PUo PU!C,2nGq@h'NVݿU)ukvٻwd>?{uuuoޢAiHYlhnn~eҥ{^SBtEXtAuthorUnknown! %tEXtdate:create2019-05-13T15:38:51+02:00 }V%tEXtdate:modify2019-05-13T15:38:51+02:00{ stEXtDescriptiona pictureAtEXtTitleMade with Sodipodi/'IENDB`recoll-1.43.12/qtgui/snippets.ui0000644000175000017500000001012614753313624016011 0ustar dockesdockes Snippets 0 0 640 400 Snippets 1 0 QFrame::StyledPanel QFrame::Raised 1 1 0 0 X Qt::ToolButtonTextOnly Find: 0 0 0 0 Next 0 0 Prev Qt::Horizontal QDialogButtonBox::Close searchClosePB clicked() searchFM hide() 33 414 328 414 recoll-1.43.12/qtgui/scbase.h0000644000175000017500000001114315121730573015212 0ustar dockesdockes/* Copyright (C) 2021 J.F.Dockes * * License: GPL 2.1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _SCBASE_H_INCLUDED_ #define _SCBASE_H_INCLUDED_ #include #include #include #include /** Shortcuts storage classe. Singleton. * * Manage settings storage for key sequences shortcuts. * Each shortcut is defined by 4 strings: * - Context (e.g. "Main Window"). * - Description (e.g. "Move focus to search entry"). * - Current value, possibly changed by user, e.g. "Ctrl+l". * - Default value. * * The customised values are read from the stored settings by the SCBase * constructor. * The entries with default values are created from the init() method * of each class responsible for a context (e.g. RclMain, SnippetsW), * or from a static method for classes which are not instantiated when * the program starts up. * * Macros are provided for actually creating the shortcuts in the * init() routines, or for just creating the default entries (for use * in the preferences screen). */ class SCBase : public QObject { Q_OBJECT public: ~SCBase(); SCBase(const SCBase&) = delete; SCBase& operator=(const SCBase&) = delete; /* Return a reference to the instantiated singleton */ static SCBase& scBase(); /** Get the current keysequence for the shortcut. If the entry was not * created from the settings, create it with the default * sequence. This is called from the context classes and returns * either the default or the customised sequence. */ QKeySequence get(const QString& id, const QString& context, const QString& description, const QString& defkeyseq); /** Set a customised value for the designated shortcut. Called * from the preference code. */ void set(const QString& id, const QString& context, const QString& description, const QString& keyseq); /** Return a list of all shortcuts. This is used to create the * preferences table. Each entry in the list is a string * tuple: id, context, description, value, default */ QStringList getAll(); /** Return a list of all shortcuts, with only default values (no settings). * Used for resetting the defaults, especially if a lang changed * has messed up the keys */ QStringList getAllDefaults(); /** Store the customised values to the settings storage. Called * from the preferences accept() method. */ void store(); class Internal; signals: /** Preference change has been accepted and client classes should * update their shortcuts */ void shortcutsChanged(); private: Internal *m{nullptr}; SCBase(); }; /** This can be used in the client class init method, to actually * create and connect the shortcuts. */ #define SETSHORTCUT(OBJ, ID, CTXT, DESCR, SEQ, FLD, SLTFUNC) \ do { \ QKeySequence ks = SCBase::scBase().get(ID, CTXT, DESCR, SEQ); \ if (!ks.isEmpty()) { \ delete FLD; \ FLD = new QShortcut(ks, OBJ, SLOT(SLTFUNC())); \ } \ } while (false); /** This can be used from a static method, to be called by the program * initialisation, for classes which are not instantiated at startup, * and so that the shortcuts are available for the preferences * customisation screen. Same param list as SETSHORTCUT to make it * easy to duplicate a list of ones into the other, even if some * parameters are not used here. */ #define LISTSHORTCUT(OBJ, ID, CTXT, DESCR, SEQ, FLD, SLTFUNC) \ do { \ SCBase::scBase().get(ID, CTXT, DESCR, SEQ); \ } while (false); #endif /* _SCBASE_H_INCLUDED_ */ recoll-1.43.12/qtgui/ptrans_w.h0000644000175000017500000000331215121730573015606 0ustar dockesdockes/* Copyright (C) 2006-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _PTRANS_W_H_INCLUDED_ #define _PTRANS_W_H_INCLUDED_ #include #include #include "ui_ptrans.h" class QTableWidgetItem; class PTransEdit : public QDialog, public Ui::PTransEditBase { Q_OBJECT public: // @param dbddir is the initial dbdir to select. May be empty. PTransEdit(const std::string& dbdir, QWidget* parent = 0) : QDialog(parent) { setupUi(this); init(dbdir); } void setCurrentDb(const std::string &dbdir); public slots: virtual void curIdxChanged(const QString& text); virtual void onItemDoubleClicked(QTableWidgetItem *); virtual void savePB_clicked(); virtual void addPB_clicked(); virtual void delPB_clicked(); virtual void transTW_itemSelectionChanged(); private: virtual void init(const std::string& dbdir); }; #endif /* _PTRANS_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/CMakeLists.txt0000644000175000017500000001007015121730572016336 0ustar dockesdockes# qtgui related set(qtgui_ui_SOURCES actsearch.ui advsearch.ui configswitch.ui crontool.ui firstidx.ui idxsched.ui preview.ui ptrans.ui rclmain.ui restable.ui rtitool.ui snippets.ui specialindex.ui spell.ui ssearchb.ui uiprefs.ui viewaction.ui webcache.ui widgets/editdialog.ui widgets/listdialog.ui winschedtool.ui ) set(qtgui_SOURCES actsearch_w.cpp actsearch_w.h advsearch_w.cpp advsearch_w.h advshist.cpp advshist.h confgui/confgui.cpp confgui/confgui.h confgui/confguiindex.cpp confgui/confguiindex.h configswitch.cpp configswitch.h crontool.cpp crontool.h firstidx.h fragbuts.cpp fragbuts.h guiutils.cpp guiutils.h idxmodel.cpp idxmodel.h idxsched.h main.cpp multisave.cpp multisave.h preview_load.cpp preview_load.h preview_plaintorich.cpp preview_plaintorich.h preview_w.cpp preview_w.h ptrans_w.cpp ptrans_w.h pv_search.cpp rclhelp.cpp rclhelp.h rclm_idx.cpp rclm_menus.cpp rclm_preview.cpp rclm_saveload.cpp rclm_sidefilters.cpp rclm_view.cpp rclm_wins.cpp rclmain_w.cpp rclmain_w.h rclwebpage.h rclzg.cpp rclzg.h recoll.h reslist.cpp reslist.h respopup.cpp respopup.h restable.cpp restable.h rtitool.cpp rtitool.h scbase.cpp scbase.h searchclause_w.cpp searchclause_w.h snippets_w.cpp snippets_w.h specialindex.h spell_w.cpp spell_w.h ssearch_w.cpp ssearch_w.h systray.cpp systray.h uiprefs_w.cpp uiprefs_w.h viewaction_w.cpp viewaction_w.h webcache.cpp webcache.h widgets/editdialog.h widgets/listdialog.h widgets/qxtconfirmationmessage.cpp widgets/qxtconfirmationmessage.h widgets/qxtglobal.h xmltosd.cpp xmltosd.h ) #--- recoll --- find_package(Qt${QT_MAJOR_VERSION} COMPONENTS Core) if (NOT Qt${QT_MAJOR_VERSION}_FOUND) message(FATAL_ERROR "Could not find Qt version ${QT_MAJOR_VERSION}!") endif() if (QT_MAJOR_VERSION GREATER 5) qt_standard_project_setup() endif() set(CMAKE_AUTOMOC TRUE) set(CMAKE_AUTOUIC TRUE) set(CMAKE_AUTORCC TRUE) add_executable(recoll ${qtgui_SOURCES} ${qtgui_ui_SOURCES} recoll.qrc ) set_target_properties(recoll PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}/recoll" MACOSX_BUNDLE TRUE MACOSX_BUNDLE_GUI_IDENTIFIER org.lesbonscomptes.recoll MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" MACOSX_BUNDLE_ICON_FILE recoll.icns ) target_compile_definitions(recoll PRIVATE BUILDING_RECOLLGUI) set(QtComponents Core Gui Widgets PrintSupport) if (RECOLL_ENABLE_WEBENGINE) list(APPEND QtComponents WebEngineWidgets) target_compile_definitions(recoll PUBLIC USING_WEBENGINE) else() list(APPEND QtComponents WebKitWidgets) target_compile_definitions(recoll PUBLIC USING_WEBKIT) endif () find_package(Qt${QT_MAJOR_VERSION} REQUIRED COMPONENTS ${QtComponents}) list(TRANSFORM QtComponents PREPEND "Qt${QT_MAJOR_VERSION}::" OUTPUT_VARIABLE _qt_targets) target_link_libraries(recoll PUBLIC ${_qt_targets}) unset(_qt_targets) target_include_directories(recoll PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} widgets ../query ) target_link_libraries(recoll PRIVATE librecoll) if (QT_MAJOR_VERSION GREATER 5) qt_finalize_target(recoll) endif() ### Special handling of translation files find_package(Qt${QT_MAJOR_VERSION} COMPONENTS LinguistTools) # include all *.ts files under locale file(GLOB TRANS_FILES "qtgui/i18n/*.ts") # Put generated *.qm to output dir's locale set_source_files_properties(${TRANS_FILES} PROPERTIES OUTPUT_LOCATION "${PROJECT_BINARY_DIR}/i18n") # Do *.ts -> *.qm during the target `recoll` and store result files to ${QM_FILES} qt_add_translation(QM_FILES ${TRANS_FILES}) target_sources(recoll PRIVATE ${QM_FILES}) recoll-1.43.12/qtgui/fragbuts.cpp0000644000175000017500000001424615121730572016130 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include "fragbuts.h" #include "pathut.h" #include "smallut.h" #include "recoll.h" #include "log.h" #include "readfile.h" #include "copyfile.h" #include "picoxml.h" using namespace std; class FragButsParser : public PicoXMLParser { public: FragButsParser( const std::string& in, FragButs *_p, vector& _bts) : PicoXMLParser(in), parent(_p), vlw(new QVBoxLayout(parent)), vl(new QVBoxLayout()), buttons(_bts) {} void startElement(const std::string &nm, const std::map&) override { //std::cerr << "startElement [" << nm << "]\n"; currentText.clear(); if (nm == "buttons") { radio = false; hl = new QHBoxLayout(); } else if (nm == "radiobuttons") { radio = true; bg = new QButtonGroup(parent); hl = new QHBoxLayout(); } else if (nm == "label" || nm == "frag" || nm == "fragbuts" || nm == "fragbuttons" || nm == "fragbut" || nm == "fragbutton" || nm == "message") { } else { QMessageBox::warning(0, "Recoll", QString("Bad element name: [%1]").arg(nm.c_str())); } } void endElement(const std::string& nm) override { //std::cerr << "endElement [" << nm << "]\n"; if (nm == "label") { label = u8s2qs(currentText); } else if (nm == "frag") { frag = currentText; } else if (nm == "fragbut" || nm == "fragbutton") { string slab = qs2utf8s(label); trimstring(slab, " \t\n\t"); label = u8s2qs(slab.c_str()); QAbstractButton *abut; if (radio) { QRadioButton *but = new QRadioButton(label, parent); bg->addButton(but); if (bg->buttons().length() == 1) but->setChecked(true); abut = but; } else { QCheckBox *but = new QCheckBox(label, parent); abut = but; } abut->setToolTip(u8s2qs(currentText)); buttons.push_back(FragButs::ButFrag(abut, frag)); hl->addWidget(abut); } else if (nm == "message") { string slab = qs2utf8s(label); trimstring(slab, " \t\n\t"); label = u8s2qs(slab.c_str()); QLabel *lbl = new QLabel(label, parent); hl->addWidget(lbl); } else if (nm == "buttons" || nm == "radiobuttons") { vl->addLayout(hl); hl = 0; } else if (nm == "fragbuts" || nm == "fragbuttons") { vlw->addLayout(vl); } else { QMessageBox::warning( 0, "Recoll", QString("Bad element name: [%1]").arg(nm.c_str())); } } void characterData(const std::string &str) override { //std::cerr << "characterData [" << str << "]\n"; currentText += str; } private: QWidget *parent; QVBoxLayout *vlw; QVBoxLayout *vl; vector& buttons; // Temporary data while parsing. QHBoxLayout *hl{nullptr}; QButtonGroup *bg{nullptr}; QString label; std::string currentText; std::string frag; bool radio{false}; }; FragButs::FragButs(QWidget* parent) : QWidget(parent), m_reftime(0), m_ok(false) { m_fn = path_cat(theconfig->getConfDir(), "fragment-buttons.xml"); string data, reason; if (!path_exists(m_fn)) { // Try the older name m_fn = path_cat(theconfig->getConfDir(), "fragbuts.xml"); if (!path_exists(m_fn)) { // No configuration file yet: create it from the sample file string src = path_cat(theconfig->getDatadir(), "examples"); src = path_cat(src, "fragment-buttons.xml"); m_fn = path_cat(theconfig->getConfDir(), "fragment-buttons.xml"); copyfile(src.c_str(), m_fn.c_str(), reason); } } if (!file_to_string(m_fn, data, &reason)) { QMessageBox::warning(0, "Recoll", tr("%1 not found.").arg(path2qs(m_fn))); LOGERR("Fragbuts:: can't read [" << m_fn << "]\n"); return; } FragButsParser parser(data, this, m_buttons); if (!parser.Parse()) { QMessageBox::warning( 0, "Recoll", tr("%1:\n %2").arg(path2qs(m_fn), u8s2qs(parser.getLastErrorMessage()))); return; } for (auto& entry : m_buttons) { connect(entry.button, SIGNAL(clicked(bool)), this, SLOT(onButtonClicked(bool))); } setWindowTitle(tr("Query Fragments")); isStale(&m_reftime); m_ok = true; } FragButs::~FragButs() { } bool FragButs::isStale(time_t *reftime) { struct PathStat st; path_fileprops(m_fn, &st); bool ret = st.pst_mtime != m_reftime; if (reftime) *reftime = st.pst_mtime; return ret; } void FragButs::onButtonClicked(bool on) { LOGDEB("FragButs::onButtonClicked: [" << (int(on)) << "]\n" ); emit fragmentsChanged(); } void FragButs::getfrags(std::vector& frags) { for (auto &entry : m_buttons) { if (entry.button->isChecked() && !entry.fragment.empty()) { LOGDEB("FragButs: fragment [" << entry.fragment << "]\n" ); frags.push_back(entry.fragment); } } } recoll-1.43.12/qtgui/reslist.h0000644000175000017500000001465515132373576015462 0ustar dockesdockes/* Copyright (C) 2005-2023 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _RESLIST_H_INCLUDED_ #define _RESLIST_H_INCLUDED_ #include "autoconfig.h" #include #include #include "plaintorich.h" #if defined(USING_WEBENGINE) # include # define RESLIST_PARENTCLASS QWebEngineView #elif defined(USING_WEBKIT) # include # define RESLIST_PARENTCLASS QWebView #else # include # define RESLIST_PARENTCLASS QTextBrowser #endif class RclMain; class QtGuiResListPager; class QEvent; class QProgressDialog; namespace Rcl { class Doc; } /** * Display a list of document records. The data can be out of the history * manager or from an index query, both abstracted as a DocSequence. */ class ResList : public RESLIST_PARENTCLASS { Q_OBJECT friend class QtGuiResListPager; public: ResList(QWidget* parent = 0, const char* name = 0); virtual ~ResList(); ResList(const ResList&) = delete; ResList& operator=(const ResList&) = delete; // Return document for given docnum. We mostly act as an // intermediary to the docseq here, but this has also the // side-effect of making the entry current (visible and // highlighted), and only works if the num is inside the current // page or its immediate neighbours. bool getDoc(int docnum, Rcl::Doc &); bool displayingHistory(); int listId() const {return m_listId;} int pageFirstDocNum(); void setFont(); void setRclMain(RclMain *m, bool ismain); public slots: virtual void setDocSource(std::shared_ptr nsource); virtual void resetList(); // Erase current list virtual void resPageUpOrBack(); // Page up pressed virtual void resPageDownOrNext(); // Page down pressed virtual void resultPageBack(); // Previous page of results virtual void resultPageFirst(); // First page of results virtual void resultPageNext(); // Next (or first) page of results virtual void resultPageFor(int docnum); // Page containing docnum virtual void menuPreview(); virtual void menuSaveToFile(); virtual void menuEdit(); virtual void menuOpenWith(QAction *); virtual void menuCopyFN(); virtual void menuCopyPath(); virtual void menuCopyURL(); virtual void menuCopyText(); virtual void menuExpand(); virtual void menuPreviewParent(); virtual void menuOpenParent(); virtual void menuOpenFolder(); virtual void menuShowSnippets(); virtual void menuShowSubDocs(); virtual void previewExposed(int); virtual void append(const QString &text); virtual void readDocSource(); virtual void highlighted(const QString& link); virtual void createPopupMenu(const QPoint& pos); virtual void showQueryDetails(); virtual void onUiPrefsChanged(); signals: void nextPageAvailable(bool); void prevPageAvailable(bool); void docPreviewClicked(int, Rcl::Doc, int); void docSaveToFileClicked(Rcl::Doc); void previewRequested(Rcl::Doc); void showSnippets(Rcl::Doc); void showSubDocs(Rcl::Doc); void editRequested(Rcl::Doc); void openWithRequested(Rcl::Doc, std::string cmd); void docExpand(Rcl::Doc); void wordSelect(QString); void wordReplace(const QString&, const QString&); void hasResults(int); protected: void keyPressEvent(QKeyEvent *e); void mouseReleaseEvent(QMouseEvent *e); void mouseDoubleClickEvent(QMouseEvent*); public slots: virtual void onLinkClicked(const QUrl &); #if defined(USING_WEBENGINE) virtual void onLinkClicked1(const QUrl &); #endif virtual void onPopupJsDone(const QVariant&); protected slots: virtual void languageChange(); void setupArrows(); #if defined(USING_WEBENGINE) void runStoredJS(bool); void onPageScrollPositionChanged(const QPointF &position); void onPageContentsSizeChanged(const QSizeF &size); #endif // USING_WEBENGINE private: QtGuiResListPager *m_pager{0}; std::shared_ptr m_source; int m_popDoc{-1}; // Docnum for the popup menu. QPoint m_popPos; int m_curPvDoc{-1};// Docnum for current preview int m_lstClckMod{0}; // Last click modifier. int m_listId{0}; // query Id for matching with preview windows #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) // Webview makes it more difficult to append text incrementally, // so we store the page and display it when done. QString m_text; QProgressDialog *m_progress{nullptr}; int m_residx{0}; // result index in page QString m_lasttext; void runJS(const QString& js); #if defined(USING_WEBENGINE) // Webengine local image display appears to break randomly (for some versions and platforms, // circa 2022) when we display the same data multiple times. Detect and avoid. QPointF m_scrollpos{0,0}; QSizeF m_contentsize{0,0}; #endif // WEBENGINE #else // Translate from textedit paragraph number to relative // docnum. Built while we insert text into the qtextedit std::map m_pageParaToReldocnums; virtual int docnumfromparnum(int); virtual std::pair parnumfromdocnum(int); #endif // Running js after page load. Sometimes we don't want to do it on the first event (which may be // a reset), hence the countdown. QString m_js; #if defined(USING_WEBENGINE) int m_js_countdown{0}; #endif // Webengine RclMain *m_rclmain{0}; bool m_ismainres{true}; void doCreatePopupMenu(); virtual void displayPage(); static int newListId(); void resetView(); bool scrollIsAtTop(); bool scrollIsAtBottom(); }; class PlainToRichQtReslist : public PlainToRich { public: virtual std::string startMatch(unsigned int idx); virtual std::string endMatch(); }; #endif /* _RESLIST_H_INCLUDED_ */ recoll-1.43.12/qtgui/restable.h0000644000175000017500000001721415121730573015560 0ustar dockesdockes/* Copyright (C) 2006 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _RESTABLE_H_INCLUDED_ #define _RESTABLE_H_INCLUDED_ #include "autoconfig.h" #include #include #include #include #include #include #include #include "ui_restable.h" #include "docseq.h" class ResTable; typedef std::string (FieldGetter)( const std::string& fldname, const Rcl::Doc& doc); class RecollModel : public QAbstractTableModel { Q_OBJECT public: RecollModel(const QStringList fields, ResTable *tb, QObject *parent = 0); // Reimplemented methods virtual int rowCount (const QModelIndex& = QModelIndex()) const; virtual int columnCount(const QModelIndex& = QModelIndex()) const; virtual QVariant headerData (int col, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole ) const; virtual void saveAsCSV(std::fstream& fp); virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); // Specific methods virtual void readDocSource(); virtual void setDocSource(std::shared_ptr nsource); virtual std::shared_ptr getDocSource() {return m_source;} virtual void deleteColumn(int); virtual const std::vector& getFields() {return m_fields;} static const std::map& getAllFields() { return o_displayableFields; } static QString displayableField(const std::string& in); virtual void addColumn(int, const std::string&); // Some column name are aliases/translator for base document field // (ie: date, datetime->mtime). Help deal with this: virtual std::string baseField(const std::string&); // Ignore sort() call because virtual void setIgnoreSort(bool onoff) {m_ignoreSort = onoff;} friend class ResTable; signals: void sortDataChanged(DocSeqSortSpec); private: ResTable *m_table{0}; mutable std::shared_ptr m_source; std::vector m_fields; std::vector m_getters; static std::map o_displayableFields; bool m_ignoreSort; FieldGetter* chooseGetter(const std::string&); HighlightData m_hdata; // Things we cache because we are repeatedly asked for the same. mutable QFont m_cachedfont; mutable int m_reslfntszforcached{-1234}; mutable Rcl::Doc m_cachedoc; mutable int m_rowforcachedoc{-1}; }; class ResTable; // Modified textBrowser for the detail area class ResTableDetailArea : public QTextBrowser { Q_OBJECT public: ResTableDetailArea(ResTable* parent = 0); public slots: virtual void createPopupMenu(const QPoint& pos); virtual void setFont(); virtual void init(); private: ResTable *m_table; }; class ResTablePager; class QUrl; class RclMain; class QShortcut; // This is an intermediary object to help setting up multiple similar // shortcuts with different data (e.g. Ctrl+1, Ctrl+2 etc.). Maybe // there is another way, but this one works. class SCData : public QObject { Q_OBJECT public: SCData(QObject* parent, std::function cb, int row) : QObject(parent), m_cb(cb), m_row(row) {} public slots: virtual void activate() { m_cb(m_row); } private: std::function m_cb; int m_row; }; class ResTable : public QWidget, public Ui::ResTable { Q_OBJECT public: ResTable(QWidget* parent = 0, QStringList fields = QStringList()) : QWidget(parent) { setupUi(this); init(fields); } virtual ~ResTable() {} ResTable(const ResTable&) = delete; ResTable& operator=(const ResTable&) = delete; virtual RecollModel *getModel() {return m_model;} virtual ResTableDetailArea* getDetailArea() {return m_detail;} virtual int getDetailDocNumOrTopRow(); void setRclMain(RclMain *m, bool ismain); void setDefRowHeight(); int fontsize(); public slots: virtual void onTableView_currentChanged(const QModelIndex&); virtual void tableView_entered(const QModelIndex& index); virtual void setDocSource(std::shared_ptr nsource); virtual void saveColState(); virtual void resetSource(); virtual void readDocSource(bool resetPos = true); virtual void onSortDataChanged(DocSeqSortSpec); virtual void createPopupMenu(const QPoint& pos); virtual void onClicked(const QModelIndex&); virtual void onDoubleClick(const QModelIndex&); virtual void menuPreview(); virtual void menuSaveToFile(); virtual void menuSaveSelection(); virtual void menuEdit(); virtual void menuEditAndQuit(); virtual void menuOpenWith(QAction *); virtual void menuCopyFN(); virtual void menuCopyPath(); virtual void menuCopyURL(); virtual void menuCopyText(); virtual void menuCopyTextAndQuit(); virtual void menuExpand(); virtual void menuPreviewParent(); virtual void menuOpenParent(); virtual void menuOpenFolder(); virtual void menuShowSnippets(); virtual void menuShowSubDocs(); virtual void createHeaderPopupMenu(const QPoint&); virtual void deleteColumn(); virtual void addColumn(); virtual void resetSort(); // Revert to natural (relevance) order virtual void saveAsCSV(); virtual void onLinkClicked(const QUrl&); virtual void makeRowVisible(int row); virtual void takeFocus(); virtual void onUiPrefsChanged(); virtual void onNewShortcuts(); virtual void setCurrentRowFromKbd(int row); virtual void toggleHeader(); virtual void toggleVHeader(); signals: void docPreviewClicked(int, Rcl::Doc, int); void docSaveToFileClicked(Rcl::Doc); void previewRequested(Rcl::Doc); void editRequested(Rcl::Doc); void openWithRequested(Rcl::Doc, std::string cmd); void headerClicked(); void docExpand(Rcl::Doc); void showSubDocs(Rcl::Doc); void showSnippets(Rcl::Doc); void detailDocChanged(Rcl::Doc, std::shared_ptr); friend class ResTablePager; friend class ResTableDetailArea; protected: bool eventFilter(QObject* obj, QEvent* event); private: void init(QStringList fields); RecollModel *m_model{nullptr}; ResTablePager *m_pager{nullptr}; ResTableDetailArea *m_detail{nullptr}; int m_detaildocnum{-1}; Rcl::Doc m_detaildoc; int m_popcolumn{0}; RclMain *m_rclmain{nullptr}; bool m_ismainres{true}; bool m_rowchangefromkbd{false}; QShortcut *m_opensc{nullptr}; QShortcut *m_openquitsc{nullptr}; QShortcut *m_previewsc{nullptr}; QShortcut *m_showsnipssc{nullptr}; QShortcut *m_showheadersc{nullptr}; QShortcut *m_showvheadersc{nullptr}; QShortcut *m_copycurtextsc{nullptr}; QShortcut *m_copycurtextquitsc{nullptr}; std::vector m_rowlinks; std::vector m_rowsc; }; #endif /* _RESTABLE_H_INCLUDED_ */ recoll-1.43.12/qtgui/crontool.cpp0000644000175000017500000000741515121730572016152 0ustar dockesdockes/* Copyright (C) 2005-2023 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include "recoll.h" #include "crontool.h" #include "ecrontab.h" #include "smallut.h" #include "rclutil.h" #include "pathut.h" using std::string; using std::vector; using std::map; using std::list; static string marker; static string idstring(const string& confdir) { // Quote conf dir, there may be spaces and whatelse in there return string("RECOLL_CONFDIR=") + escapeShell(confdir); } void CronToolW::init() { marker = "RCLCRON_RCLINDEX="; enableButton = new QPushButton(tr("Enable")); disableButton = new QPushButton(tr("Disable")); buttonBox->addButton(enableButton, QDialogButtonBox::ActionRole); buttonBox->addButton(disableButton, QDialogButtonBox::ActionRole); connect(enableButton, SIGNAL(clicked()), this, SLOT(enableCron())); connect(disableButton, SIGNAL(clicked()), this, SLOT(disableCron())); // Try to read the current values if (!theconfig) return; if (checkCrontabUnmanaged(marker, "recollindex")) { QMessageBox::warning( 0, "Recoll", tr("It seems that manually edited entries exist for " "recollindex, cannot edit crontab")); QTimer::singleShot(0, this, SLOT(close())); } string id = idstring(theconfig->getConfDir()); vector sched; if (getCrontabSched(marker, id, sched)) { minsLE->setText(QString::fromUtf8(sched[0].c_str())); hoursLE->setText(QString::fromUtf8(sched[1].c_str())); daysLE->setText(QString::fromUtf8(sched[4].c_str())); } } void CronToolW::enableCron() { changeCron(true); } void CronToolW::disableCron() { changeCron(false); } void CronToolW::changeCron(bool enable) { if (!theconfig) return; string id = idstring(theconfig->getConfDir()); string cmd("recollindex"); #ifdef __APPLE__ // The MACPORTS and HOMEBREW flags are set by the resp. portfile // and recipee. Adjust the path for finding recollindex accordingly #if defined(MACPORTS) cmd = string("PATH=/opt/local/bin/:$PATH ") + cmd; #elif defined(HOMEBREW) cmd = string("PATH=/opt/homebrew/bin:/usr/local/bin/:$PATH ") + cmd; #else // Built as a bundle. We add the binary location to the PATH. auto bindir = path_thisexecdir(); cmd = string("PATH=") + bindir + string(":$PATH ") + cmd; #endif #endif string reason; if (!enable) { editCrontab(marker, id, "", "", reason); accept(); } else { string mins(qs2utf8s(minsLE->text().remove(QChar(' ')))); string hours(qs2utf8s(hoursLE->text().remove(QChar(' ')))); string days(qs2utf8s(daysLE->text().remove(QChar(' ')))); string sched = mins + " " + hours + " * * " + days; if (editCrontab(marker, id, sched, cmd, reason)) { accept(); } else { QMessageBox::warning( 0, "Recoll", tr("Error installing cron entry. Bad syntax in fields ?")); } } } recoll-1.43.12/qtgui/systray.h0000644000175000017500000000243714753313624015502 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _SYSTRAY_H_INCLUDED_ #define _SYSTRAY_H_INCLUDED_ #include #include class RclMain; class RclTrayIcon : public QSystemTrayIcon { Q_OBJECT public: RclTrayIcon(RclMain *mainw, const QIcon& icon, QObject* parent = 0) : QSystemTrayIcon(icon, parent), m_mainw(mainw) { init(); } public slots: void onRestore(); void onActivated(QSystemTrayIcon::ActivationReason reason); private: void init(); RclMain *m_mainw; }; #endif /* _SYSTRAY_H_INCLUDED_ */ recoll-1.43.12/qtgui/advsearch_w.h0000644000175000017500000000523615121730572016245 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _ADVSEARCH_W_H_INCLUDED_ #define _ADVSEARCH_W_H_INCLUDED_ #include "autoconfig.h" #include #include #include #include "searchclause_w.h" #include "recoll.h" #include #include "searchdata.h" #include "advshist.h" class QDialog; class QShortcut; #include "ui_advsearch.h" class AdvSearch : public QDialog, public Ui::AdvSearchBase { Q_OBJECT public: AdvSearch(QDialog* parent = 0) : QDialog(parent) { setupUi(this); init(); } static void listShortcuts(); public slots: virtual void delFiltypPB_clicked(); virtual void delAFiltypPB_clicked(); virtual void addFiltypPB_clicked(); virtual void addAFiltypPB_clicked(); virtual void guiListsToIgnTypes(); virtual void filterDatesCB_toggled(bool); virtual void filterBirthDatesCB_toggled(bool); virtual void filterSizesCB_toggled(bool); virtual void restrictFtCB_toggled(bool); virtual void restrictCtCB_toggled(bool); virtual void runSearch(); virtual void fromSearch(std::shared_ptr sdata); virtual void browsePB_clicked(); virtual void saveFileTypes(); virtual void delClause(bool updsaved=true); virtual void addClause(bool updsaved=true); virtual void addClause(int, bool updsaved=true); virtual void slotHistoryNext(); virtual void slotHistoryPrev(); virtual void onNewShortcuts(); signals: void startSearch(std::shared_ptr, bool); void setDescription(QString); private: virtual void init(); std::vector m_clauseWins; QStringList m_ignTypes; bool m_ignByCats; QShortcut *m_histnextsc{nullptr}; QShortcut *m_histprevsc{nullptr}; MyGFNParams m_gfnparams; void saveCnf(); void fillFileTypes(); size_t stringToSize(QString); }; #endif /* _ADVSEARCH_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/rclm_menus.cpp0000644000175000017500000002324115125756472016465 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" // For ENABLE_SEMANTIC #include #include "rclmain_w.h" #include "ssearch_w.h" #include #include #include #include using std::string; using std::vector; using std::map; static const QString ellips{"..."}; void RclMain::buildMenus() { fileMenu = new QMenu(menuBar()); fileMenu->setObjectName(QString::fromUtf8("fileMenu")); fileMenu->setTitle(QApplication::translate("RclMainBase", "&File")); viewMenu = new QMenu(menuBar()); viewMenu->setObjectName(QString::fromUtf8("viewMenu")); viewMenu->setTitle(QApplication::translate("RclMainBase", "&View")); toolsMenu = new QMenu(menuBar()); toolsMenu->setObjectName(QString::fromUtf8("toolsMenu")); toolsMenu->setTitle(QApplication::translate("RclMainBase", "&Tools")); preferencesMenu = new QMenu(menuBar()); preferencesMenu->setObjectName(QString::fromUtf8("preferencesMenu")); preferencesMenu->setTitle(QApplication::translate("RclMainBase", "&Preferences")); helpMenu = new QMenu(menuBar()); helpMenu->setObjectName(QString::fromUtf8("helpMenu")); helpMenu->setTitle(QApplication::translate("RclMainBase", "&Help")); resultsMenu = new QMenu(menuBar()); resultsMenu->setObjectName(QString::fromUtf8("resultsMenu")); resultsMenu->setTitle(QApplication::translate("RclMainBase", "&Results")); queryMenu = new QMenu(menuBar()); queryMenu->setObjectName(QString::fromUtf8("queryMenu")); queryMenu->setTitle(QApplication::translate("RclMainBase", "&Query")); fileMenu->addAction(fileToggleIndexingAction); fileMenu->addAction(fileStartMonitorAction); fileMenu->addAction(fileBumpIndexingAction); fileMenu->addAction(fileRebuildIndexAction); actionSpecial_Indexing->setText(actionSpecial_Indexing->text() + ellips); fileMenu->addAction(actionSpecial_Indexing); fileMenu->addSeparator(); actionSave_last_query->setText(actionSave_last_query->text() + ellips); fileMenu->addAction(actionSave_last_query); actionLoad_saved_query->setText(actionLoad_saved_query->text() + ellips); fileMenu->addAction(actionLoad_saved_query); fileMenu->addSeparator(); fileExportSSearchHistoryAction->setText(fileExportSSearchHistoryAction->text() + ellips); fileMenu->addAction(fileExportSSearchHistoryAction); fileMenu->addAction(fileEraseSearchHistoryAction); fileMenu->addSeparator(); fileMenu->addAction(fileEraseDocHistoryAction); fileMenu->addSeparator(); fileMenu->addAction(actionSwitch_Config); fileMenu->addAction(fileExitAction); viewMenu->addSeparator(); viewMenu->addAction(toggleFullScreenAction); viewMenu->addAction(zoomInAction); viewMenu->addAction(zoomOutAction); toolsDoc_HistoryAction->setText(toolsDoc_HistoryAction->text() + ellips); toolsMenu->addAction(toolsDoc_HistoryAction); toolsAdvanced_SearchAction->setText(toolsAdvanced_SearchAction->text() + ellips); toolsMenu->addAction(toolsAdvanced_SearchAction); toolsSpellAction->setText(toolsSpellAction->text() + ellips); toolsMenu->addAction(toolsSpellAction); actionQuery_Fragments->setText(actionQuery_Fragments->text() + ellips); toolsMenu->addAction(actionQuery_Fragments); actionWebcache_Editor->setText(actionWebcache_Editor->text() + ellips); toolsMenu->addAction(actionWebcache_Editor); toolsMenu->addAction(showMissingHelpers_Action); toolsMenu->addAction(showActiveTypes_Action); toolsMenu->addAction(actionShow_index_statistics); queryPrefsAction->setText(queryPrefsAction->text() + ellips); preferencesMenu->addAction(queryPrefsAction); preferencesMenu->addSeparator(); indexConfigAction->setText(indexConfigAction->text() + ellips); preferencesMenu->addAction(indexConfigAction); indexScheduleAction->setText(indexScheduleAction->text() + ellips); preferencesMenu->addAction(indexScheduleAction); queryMenu->addSection(QIcon(), tr("Simple search type")); sstypGroup = new QActionGroup(this); auto actSSAny = new QAction(tr("Any term"), this); actSSAny->setData(QVariant(SSearch::SST_ANY)); actSSAny->setCheckable(true); sstypGroup->addAction(actSSAny); queryMenu->addAction(actSSAny); auto actSSAll = new QAction(tr("All terms"), this); actSSAll->setData(QVariant(SSearch::SST_ALL)); actSSAll->setCheckable(true); sstypGroup->addAction(actSSAll); queryMenu->addAction(actSSAll); auto actSSFile = new QAction(tr("File name"), this); actSSFile->setData(QVariant(SSearch::SST_FNM)); actSSFile->setCheckable(true); sstypGroup->addAction(actSSFile); queryMenu->addAction(actSSFile); auto actSSQuery = new QAction(tr("Query language"), this); actSSQuery->setData(QVariant(SSearch::SST_LANG)); actSSQuery->setCheckable(true); sstypGroup->addAction(actSSQuery); queryMenu->addAction(actSSQuery); #ifdef ENABLE_SEMANTIC auto actSSSem = new QAction(tr("Semantic"), this); actSSSem->setData(QVariant(SSearch::SST_SEM)); actSSSem->setCheckable(true); sstypGroup->addAction(actSSSem); queryMenu->addAction(actSSSem); #endif // SEMANTIC queryMenu->addSeparator(); queryMenu->addAction(enbSynAction); queryMenu->addSeparator(); extIdxAction->setText(extIdxAction->text() + ellips); queryMenu->addAction(extIdxAction); queryMenu->addAction(pTransAction); connect(queryMenu, SIGNAL(triggered(QAction *)), this, SLOT(onSSTypMenu(QAction *))); connect(sSearch->searchTypCMB, SIGNAL(currentIndexChanged(int)), this, SLOT(onSSTypCMB(int))); queryMenu->addSection(QIcon(), tr("Stemming language")); // Stemming language menu g_stringNoStem = tr("(no stemming)"); g_stringAllStem = tr("(all languages)"); m_idNoStem = queryMenu->addAction(g_stringNoStem); m_idNoStem->setCheckable(true); m_stemLangToId[g_stringNoStem] = m_idNoStem; m_idAllStem = queryMenu->addAction(g_stringAllStem); m_idAllStem->setCheckable(true); m_stemLangToId[g_stringAllStem] = m_idAllStem; // Can't get the stemming languages from the db at this stage as // db not open yet (the case where it does not even exist makes // things complicated). So get the languages from the config // instead vector langs; if (!getStemLangs(langs)) { QMessageBox::warning(0, "Recoll", tr("error retrieving stemming languages")); } QAction *curid = prefs.queryStemLang == "ALL" ? m_idAllStem : m_idNoStem; QAction *id; for (const auto& lang : langs) { QString qlang = u8s2qs(lang); id = queryMenu->addAction(qlang); id->setCheckable(true); m_stemLangToId[qlang] = id; if (prefs.queryStemLang == qlang) { curid = id; } } curid->setChecked(true); helpMenu->addAction(userManualAction); helpMenu->addAction(onlineManualAction); helpMenu->addAction(showMissingHelpers_Action); helpMenu->addAction(showActiveTypes_Action); helpMenu->addSeparator(); helpMenu->addAction(helpAbout_RecollAction); resultsMenu->addAction(nextPageAction); resultsMenu->addAction(prevPageAction); resultsMenu->addAction(firstPageAction); resultsMenu->addSeparator(); resultsMenu->addAction(actionSortByDateAsc); resultsMenu->addAction(actionSortByDateDesc); resultsMenu->addSeparator(); resultsMenu->addAction(actionShowQueryDetails); resultsMenu->addSeparator(); resultsMenu->addAction(actionShowResultsAsTable); resultsMenu->addSeparator(); actionSaveResultsAsCSV->setText(actionSaveResultsAsCSV->text() + ellips); resultsMenu->addAction(actionSaveResultsAsCSV); menuBar()->addAction(fileMenu->menuAction()); menuBar()->addAction(queryMenu->menuAction()); menuBar()->addAction(resultsMenu->menuAction()); menuBar()->addAction(viewMenu->menuAction()); menuBar()->addAction(toolsMenu->menuAction()); menuBar()->addAction(preferencesMenu->menuAction()); menuBar()->addSeparator(); menuBar()->addAction(helpMenu->menuAction()); buttonTopMenu = new QMenu(menuBar()); buttonTopMenu->addAction(fileMenu->menuAction()); buttonTopMenu->addAction(queryMenu->menuAction()); buttonTopMenu->addAction(viewMenu->menuAction()); buttonTopMenu->addAction(toolsMenu->menuAction()); buttonTopMenu->addAction(resultsMenu->menuAction()); buttonTopMenu->addAction(preferencesMenu->menuAction()); buttonTopMenu->addSeparator(); buttonTopMenu->addAction(helpMenu->menuAction()); sSearch->menuPB->setMenu(buttonTopMenu); return; } void RclMain::onSSTypMenu(QAction *act) { if (act->actionGroup() != sstypGroup) { return; } int id = act->data().toInt(); sSearch->onSearchTypeChanged(id); } void RclMain::onSSTypCMB(int idx) { QList ssacts = sstypGroup->actions(); for (int i = 0; i < ssacts.size(); ++i) { if (ssacts.at(i)->data().toInt() == idx) ssacts.at(i)->setChecked(true); } } recoll-1.43.12/qtgui/preview.ui0000644000175000017500000001045515121730573015626 0ustar dockesdockes Preview 0 0 777 432 Form 0 true Tab 1 &Search for: searchTextCMB true QComboBox::NoInsert &Next &Previous false Clear Match &Case Qt::Horizontal 40 20 Qt::Vertical Previous result document :/images/prevpage.pngimages/prevpage.png Next result document :/images/nextpage.pngimages/nextpage.png Qt::Vertical Qt::Horizontal 40 20 Open recoll-1.43.12/qtgui/recoll.qrc0000644000175000017500000000117214753313624015575 0ustar dockesdockes images/asearch.png images/cancel.png images/close.png images/code-block.png images/history.png images/nextpage.png images/prevpage.png images/firstpage.png images/sortparms.png images/spell.png images/table.png images/up.png images/down.png images/recoll.png images/interro.png images/clock.png images/menu.png recoll-1.43.12/qtgui/rclmain.ui0000644000175000017500000004451015121730573015571 0ustar dockesdockes RclMainBase 0 0 800 600 0 0 Recoll 0 0 Qt::Horizontal QFrame::StyledPanel Query Language Filters Qt::Horizontal Filter dates false false false Filter birth dates false false false QFrame::NoFrame 2 0 0 0 800 32 E&xit Ctrl+Q fileExitAction Update &index fileToggleIndexingAction false Trigger incremental pass fileBumpIndexingAction true Start real time indexer fileStartMonitorAction &Rebuild index fileRebuildIndexAction &Erase document history fileEraseDocHistoryAction &Erase search history fileEraseSearchHistoryAction E&xport simple search history fileExportSSearchHistoryAction Missing &helpers showMissingHelpers_Action Indexed &MIME types showActiveTypes_Action &About Recoll helpAbout_RecollAction &User manual (local, one HTML page) userManualAction &Online manual (Recoll Web site) onlineManualAction :/images/history.png:/images/history.png Document &History Document History toolsDoc_HistoryAction :/images/asearch.png:/images/asearch.png &Advanced Search Assisted complex search toolsAdvanced_SearchAction &Sort parameters Sort parameters toolsSort_parametersAction :/images/spell.png:/images/spell.png Term &explorer Term explorer tool toolsSpellAction false :/images/nextpage.png:/images/nextpage.png Next page Next page of results PgDown nextPageAction false :/images/firstpage.png:/images/firstpage.png First page Go to first page of results Shift+PgUp firstPageAction false :/images/prevpage.png:/images/prevpage.png Previous page Previous page of results PgUp prevPageAction &Index configuration indexConfigAction Path translations pTransAction Indexing &schedule indexScheduleAction &GUI configuration queryPrefsAction E&xternal index dialog External index dialog extIdxAction true Enable synonyms Enable synonyms enbSynAction &Full Screen Full Screen F11 toggleFullScreenAction Increase results text font size Increase Font Size zoomInAction Decrease results text font size Decrease Font Size zoomOutAction true false :/images/up.png:/images/up.png Sort by date, oldest first Sort by dates from oldest to newest true false :/images/down.png:/images/down.png Sort by date, newest first Sort by dates from newest to oldest Show Query Details true :/images/table.png:/images/table.png Show as table Show results in a spreadsheet-like table Save as CSV (spreadsheet) file Saves the result into a file which you can load in a spreadsheet Next Page Previous Page First Page :/images/code-block.png:/images/code-block.png Query Fragments true With failed files retrying Next update will retry previously failed files fileToggleIndexingAction Save last query Load saved query Special Indexing Indexing with special options Switch Configuration... Choose another configuration to run on, replacing this process Index &statistics Webcache Editor SSearch QWidget
ssearch_w.h
ResList QWidget
reslist.h
ssearch_w.h reslist.h
recoll-1.43.12/qtgui/recoll.h0000644000175000017500000000634315121730573015240 0ustar dockesdockes/* Copyright (C) 2004 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _RECOLL_H_INCLUDED_ #define _RECOLL_H_INCLUDED_ #include #include #include "rclconfig.h" #include "rcldb.h" #include "rclutil.h" #include // Misc declarations in need of sharing between the UI files // Open the database if needed. We now force a close/open by default extern bool maybeOpenDb(std::string &reason, bool force, bool *maindberror = nullptr); extern const std::vector *getCurrentExtraDbs(); /** Retrieve configured stemming languages */ bool getStemLangs(std::vector& langs); extern RclConfig *theconfig; class RclDynConf; extern RclDynConf *g_dynconf; class AdvSearchHist; extern AdvSearchHist *g_advshistory; extern TempFile *rememberTempFile(TempFile); extern void forgetTempFile(std::string &fn); extern void deleteAllTempFiles(); extern std::shared_ptr rcldb; extern int recollNeedsExit; extern void startManual(const std::string& helpindex); extern void applyStyle(); inline std::string qs2utf8s(const QString& qs) { auto qb = qs.toUtf8(); return std::string(qb.data(), qb.size()); } inline std::string qs2u8s(const QString& qs) { auto qb = qs.toUtf8(); return std::string(qb.data(), qb.size()); } inline QString u8s2qs(const std::string& us) { return QString::fromUtf8(us.c_str(), us.size()); } inline QString path2qs(const std::string& us) { #ifdef _WIN32 return QString::fromUtf8(us.c_str()); #else return QString::fromLocal8Bit(us.c_str()); #endif } inline std::string qs2path(const QString& qs) { #ifdef _WIN32 return qs2utf8s(qs); #else return (const char*)qs.toLocal8Bit().data(); #endif } /** Specialized version of the qt file dialog. Can't use getOpenFile() etc. cause they hide dot files... Need something more adaptable than the static functions but less complex than the full dialog */ // Also : can't keep adding parms with default values, we now use an object as parameter. class MyGFNParams { public: QString caption; bool filenosave{false}; QString dirlocation; // Note: this holds the new location on return QString dfltnm; std::vector sidedirs; bool readonly{false}; }; extern QString myGetFileName(bool isdir, QString caption = QString(), bool filenosave = false, QString dirlocation = QString(), QString dlftnm = QString() ); extern QString myGetFileName(bool isdir, MyGFNParams &parms); #endif /* _RECOLL_H_INCLUDED_ */ recoll-1.43.12/qtgui/searchclause_w.h0000644000175000017500000000300315121730573016736 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SEARCHCLAUSE_H #define SEARCHCLAUSE_H // A class for entry of a search clause: type (OR/AND/etc.), distance // for PHRASE or NEAR, and text #include #include #include "searchdata.h" class QVBoxLayout; class QHBoxLayout; class QComboBox; class QSpinBox; class QLineEdit; class SearchClauseW : public QWidget { Q_OBJECT public: SearchClauseW(QWidget* parent = 0); Rcl::SearchDataClause *getClause() const; void setFromClause(Rcl::SearchDataClauseSimple *cl); void clear(); QComboBox* sTpCMB; QComboBox* fldCMB; QSpinBox* proxSlackSB; QLineEdit* wordsLE; public slots: virtual void tpChange(int); protected slots: virtual void languageChange(); }; #endif // SEARCHCLAUSE_H recoll-1.43.12/qtgui/rclm_sidefilters.cpp0000644000175000017500000001204315121730573017637 0ustar dockesdockes/* Copyright (C) 2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include "log.h" #include "rclmain_w.h" #include "idxmodel.h" #include "guiutils.h" void RclMain::populateSideFilters(SideFilterUpdateReason reason) { if (m_idxtreemodel && reason == SFUR_USERCONFIG && (m_idxtreemodel->getDepth() == prefs.idxFilterTreeDepth && m_idxtreemodel->getEDbs() == *getCurrentExtraDbs())) { // The filter depths and set of external indexes are the only things which may impact us // after the user has changed the GUI preferences. So no need to lose the current user // selections if these did not change. return; } auto old_idxtreemodel = m_idxtreemodel; m_idxtreemodel = new IdxTreeModel(prefs.idxFilterTreeDepth, *getCurrentExtraDbs(), idxTreeView); m_idxtreemodel->populate(); m_idxtreemodel->setHeaderData(0, Qt::Horizontal, QVariant(tr("Filter directories"))); idxTreeView->setModel(m_idxtreemodel); // Reset the current filter spec, the selection is gone. sideFilterChanged(); if (nullptr != old_idxtreemodel) old_idxtreemodel->deleteLater(); if (reason == SFUR_INIT) { idxTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); idxTreeView->setSelectionMode(QAbstractItemView::MultiSelection); connect(idxTreeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(sideFilterChanged())); minDateFilterDTEDT->setCalendarPopup(true); maxDateFilterDTEDT->setCalendarPopup(true); minDateFilterDTEDT->setDate(QDate::currentDate()); auto dateformat = prefs.sidefilterdateformat; if (!dateformat.isEmpty()) minDateFilterDTEDT->setDisplayFormat(dateformat); maxDateFilterDTEDT->setDate(QDate::currentDate()); if (!dateformat.isEmpty()) maxDateFilterDTEDT->setDisplayFormat(dateformat); connect(minDateFilterDTEDT, SIGNAL(dateChanged(const QDate&)), this, SLOT(sideFilterChanged())); connect(maxDateFilterDTEDT, SIGNAL(dateChanged(const QDate&)), this, SLOT(sideFilterChanged())); connect(dateFilterCB, SIGNAL(toggled(bool)), this, SLOT(sideFilterChanged())); connect(dateFilterCB, SIGNAL(toggled(bool)), minDateFilterDTEDT, SLOT(setEnabled(bool))); connect(dateFilterCB, SIGNAL(toggled(bool)), maxDateFilterDTEDT, SLOT(setEnabled(bool))); #ifdef EXT4_BIRTH_TIME birthDateFilterCB->show(); minBirthDateFilterDTEDT->show(); maxBirthDateFilterDTEDT->show(); minBirthDateFilterDTEDT->setCalendarPopup(true); maxBirthDateFilterDTEDT->setCalendarPopup(true); minBirthDateFilterDTEDT->setDate(QDate::currentDate()); maxBirthDateFilterDTEDT->setDate(QDate::currentDate()); connect(minBirthDateFilterDTEDT, SIGNAL(dateChanged(const QDate&)), this, SLOT(sideFilterChanged())); connect(maxBirthDateFilterDTEDT, SIGNAL(dateChanged(const QDate&)), this, SLOT(sideFilterChanged())); connect(birthDateFilterCB, SIGNAL(toggled(bool)), this, SLOT(sideFilterChanged())); connect(birthDateFilterCB, SIGNAL(toggled(bool)), minBirthDateFilterDTEDT, SLOT(setEnabled(bool))); connect(birthDateFilterCB, SIGNAL(toggled(bool)), maxBirthDateFilterDTEDT, SLOT(setEnabled(bool))); #else birthDateFilterCB->hide(); minBirthDateFilterDTEDT->hide(); maxBirthDateFilterDTEDT->hide(); #endif } } void RclMain::sideFilterChanged() { setFiltSpec(); initiateQuery(); } void RclMain::enableSideFilters(bool enable) { idxTreeView->setEnabled(enable); dateFilterCB->setEnabled(enable); minDateFilterDTEDT->setEnabled(enable && dateFilterCB->isChecked()); maxDateFilterDTEDT->setEnabled(enable && dateFilterCB->isChecked()); } void RclMain::clearDirFilter() { idxTreeView->clearSelection(); } std::vector RclMain::idxTreeGetDirs() { std::vector out; auto selmodel = idxTreeView->selectionModel(); if (nullptr != selmodel) { auto selected = selmodel->selectedIndexes(); std::string clause; for (int i = 0; i < selected.size(); i++) { out.push_back(qs2path(selected[i].data(Qt::ToolTipRole).toString())); } } return out; } recoll-1.43.12/qtgui/restable.cpp0000644000175000017500000013626415121730573016122 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "restable.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "recoll.h" #include "docseq.h" #include "log.h" #include "guiutils.h" #include "reslistpager.h" #include "reslist.h" #include "rclconfig.h" #include "plaintorich.h" #include "indexer.h" #include "respopup.h" #include "rclmain_w.h" #include "multisave.h" #include "appformime.h" #include "transcode.h" #include "scbase.h" using std::string; using std::vector; using std::map; using std::list; static const QKeySequence quitKeySeq("Ctrl+q"); static const QKeySequence closeKeySeq("Ctrl+w"); // Compensate for the default and somewhat bizarre vertical placement of text in cells. static const int ROWHEIGHTPAD = 2; static const int TEXTINCELLVTRANS = -1; static PlainToRichQtReslist g_hiliter; static const char *settingskey_fieldlist="/Recoll/prefs/query/restableFields"; static const char *settingskey_fieldwiths="/Recoll/prefs/query/restableWidths"; static const char *settingskey_splittersizes="resTableSplitterSizes"; ////////////////////////////////////////////////////////////////////////// // Restable "pager". We use it to print details for a document in the // detail area /// class ResTablePager : public ResListPager { public: ResTablePager(RclConfig *cnf, ResTable *p) : ResListPager(cnf, 1, prefs.alwaysSnippets), m_parent(p) {} virtual bool append(const string& data) override; virtual bool flush() override; virtual string trans(const string& in) override; virtual const string &parFormat() override; virtual string absSep() override { return (const char *)(prefs.abssep.toUtf8());} virtual string headerContent() override { // Using the CSS causes glitches in the QTextBrowser which currently handles the // display. Let it set the font by itself in setFont(). To be changed if we ever switch to // WebKit/Engine //return prefs.htmlHeaderContents(); return ""; } private: ResTable *m_parent; string m_data; }; bool ResTablePager::append(const string& data) { m_data += data; return true; } bool ResTablePager::flush() { #ifdef helps_discoverability_of_shiftclick_but_is_ennoying QString msg = QApplication::translate( "ResTable", "Use Shift+click to display the text instead."); if (!prefs.resTableTextNoShift) { m_data += std::string("

") + qs2utf8s(msg) + "

"; } #endif m_parent->m_detail->setHtml(u8s2qs(m_data)); m_data = ""; return true; } string ResTablePager::trans(const string& in) { return string((const char*)ResList::tr(in.c_str()).toUtf8()); } const string& ResTablePager::parFormat() { return prefs.creslistformat; } ///////////////////////////////////////////////////////////////////////////// /// Detail text area methods ResTableDetailArea::ResTableDetailArea(ResTable* parent) : QTextBrowser(parent), m_table(parent) { setContextMenuPolicy(Qt::CustomContextMenu); connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(createPopupMenu(const QPoint&))); } void ResTableDetailArea::createPopupMenu(const QPoint& pos) { if (m_table && m_table->m_model && m_table->m_detaildocnum >= 0) { int opts = m_table->m_ismainres ? ResultPopup::showExpand : 0; opts |= ResultPopup::showSaveOne; QMenu *popup = ResultPopup::create( m_table, opts, m_table->m_model->getDocSource(), m_table->m_detaildoc); popup->popup(mapToGlobal(pos)); } } void ResTableDetailArea::setFont() { int fs = m_table->fontsize(); if (prefs.reslistfontfamily != "") { QFont nfont(prefs.reslistfontfamily, fs); QTextBrowser::setFont(nfont); } else { QFont font; font.setPointSize(fs); QTextBrowser::setFont(font); } } void ResTableDetailArea::init() { setFont(); QTextBrowser::setHtml(""); } ////////////////////////////////////////////////////////////////////////////// //// Data model methods //// // Routines used to extract named data from an Rcl::Doc. The basic one // just uses the meta map. Others (ie: the date ones) need to do a // little processing static string gengetter(const string& fld, const Rcl::Doc& doc) { const auto it = doc.meta.find(fld); if (it == doc.meta.end()) { return string(); } return it->second; } static string sizegetter(const string& fld, const Rcl::Doc& doc) { const auto it = doc.meta.find(fld); if (it == doc.meta.end()) { return string(); } int64_t size = atoll(it->second.c_str()); return displayableBytes(size) + " (" + it->second + ")"; } static string dategetter(const string&, const Rcl::Doc& doc) { string sdate; if (!doc.dmtime.empty() || !doc.fmtime.empty()) { time_t mtime = doc.dmtime.empty() ? atoll(doc.fmtime.c_str()) : atoll(doc.dmtime.c_str()); struct tm *tm = localtime(&mtime); sdate = utf8datestring("%Y-%m-%d", tm); } return sdate; } static string datetimegetter(const string&, const Rcl::Doc& doc) { string datebuf; if (!doc.dmtime.empty() || !doc.fmtime.empty()) { time_t mtime = doc.dmtime.empty() ? atoll(doc.fmtime.c_str()) : atoll(doc.dmtime.c_str()); struct tm *tm = localtime(&mtime); // Can't use reslistdateformat because it's html (  etc.) datebuf = utf8datestring("%Y-%m-%d %H:%M:%S", tm); } return datebuf; } // Static map to translate from internal column names to displayable ones map RecollModel::o_displayableFields; FieldGetter *RecollModel::chooseGetter(const string& field) { if (!stringlowercmp("date", field)) return dategetter; else if (!stringlowercmp("datetime", field)) return datetimegetter; else if (!stringlowercmp("bytes", field.substr(1))) return sizegetter; else return gengetter; } string RecollModel::baseField(const string& field) { if (!stringlowercmp("date", field) || !stringlowercmp("datetime", field)) return "mtime"; else return field; } RecollModel::RecollModel(const QStringList fields, ResTable *tb, QObject *parent) : QAbstractTableModel(parent), m_table(tb), m_ignoreSort(false) { // Initialize the translated map for column headers o_displayableFields["abstract"] = tr("Abstract"); o_displayableFields["author"] = tr("Author"); o_displayableFields["dbytes"] = tr("Document size"); o_displayableFields["dmtime"] = tr("Document date"); o_displayableFields["fbytes"] = tr("File size"); o_displayableFields["filename"] = tr("File name"); o_displayableFields["fmtime"] = tr("File date"); o_displayableFields["ipath"] = tr("Ipath"); o_displayableFields["keywords"] = tr("Keywords"); o_displayableFields["mtype"] = tr("MIME type"); o_displayableFields["origcharset"] = tr("Original character set"); o_displayableFields["relevancyrating"] = tr("Relevancy rating"); o_displayableFields["title"] = tr("Title"); o_displayableFields["url"] = tr("URL"); o_displayableFields["mtime"] = tr("Date"); o_displayableFields["date"] = tr("Date"); o_displayableFields["datetime"] = tr("Date and time"); // Add dynamic "stored" fields to the full column list. This // could be protected to be done only once, but it's no real // problem if (theconfig) { const auto& stored = theconfig->getStoredFields(); for (const auto& field : stored) { if (o_displayableFields.find(field) == o_displayableFields.end()) { o_displayableFields[field] = u8s2qs(field); } } } // Construct the actual list of column names for (QStringList::const_iterator it = fields.begin(); it != fields.end(); it++) { m_fields.push_back((const char *)(it->toUtf8())); m_getters.push_back(chooseGetter(m_fields.back())); } g_hiliter.set_inputhtml(false); } int RecollModel::rowCount(const QModelIndex&) const { LOGDEB2("RecollModel::rowCount\n"); if (!m_source) return 0; return m_source->getResCnt(); } int RecollModel::columnCount(const QModelIndex&) const { LOGDEB2("RecollModel::columnCount\n"); return static_cast(m_fields.size()); } void RecollModel::readDocSource() { LOGDEB("RecollModel::readDocSource()\n"); beginResetModel(); endResetModel(); } void RecollModel::setDocSource(std::shared_ptr nsource) { LOGDEB("RecollModel::setDocSource\n"); m_rowforcachedoc = -1; if (!nsource) { m_source = std::shared_ptr(); } else { // We used to allocate a new DocSource here instead of sharing // the input, but I can't see why. m_source = nsource; m_hdata.clear(); } } void RecollModel::deleteColumn(int col) { if (col > 0 && col < int(m_fields.size())) { vector::iterator it = m_fields.begin(); it += col; m_fields.erase(it); vector::iterator it1 = m_getters.begin(); it1 += col; m_getters.erase(it1); readDocSource(); } } void RecollModel::addColumn(int col, const string& field) { LOGDEB("AddColumn: col " << col << " fld [" << field << "]\n"); if (col >= 0 && col < int(m_fields.size())) { col++; vector::iterator it = m_fields.begin(); vector::iterator it1 = m_getters.begin(); if (col) { it += col; it1 += col; } m_fields.insert(it, field); m_getters.insert(it1, chooseGetter(field)); readDocSource(); } } QString RecollModel::displayableField(const std::string& in) { const auto it = o_displayableFields.find(in); return (it == o_displayableFields.end()) ? u8s2qs(in) : it->second; } QVariant RecollModel::headerData(int idx, Qt::Orientation orientation, int role) const { LOGDEB2("RecollModel::headerData: idx " << idx << " orientation " << (orientation == Qt::Vertical ? "vertical":"horizontal") << " role " << role << "\n"); if (orientation == Qt::Vertical && role == Qt::DisplayRole) { if (idx < 26) { return QString("%1/%2").arg(idx).arg(char('a'+idx)); } else { return idx; } } if (orientation == Qt::Horizontal && role == Qt::DisplayRole && idx < int(m_fields.size())) { return displayableField(m_fields[idx]); } return QVariant(); } QVariant RecollModel::data(const QModelIndex& index, int role) const { LOGDEB2("RecollModel::data: row " << index.row() << " col " << index.column() << " role " << role << "\n"); // The font is actually set in the custom delegate, but we need // this to adjust the row height (there is probably a better way // to do it in the delegate?) if (role == Qt::FontRole) { if (m_reslfntszforcached != m_table->fontsize()) { m_reslfntszforcached = m_table->fontsize(); m_table->setDefRowHeight(); m_cachedfont = m_table->font(); m_cachedfont.setPointSize(m_reslfntszforcached); } LOGDEB1("ResTable: cachedfont pointsize " << m_cachedfont.pointSize() << " pixelsize " << m_cachedfont.pixelSize() << "\n"); return m_cachedfont; } // Note that, because we use a style sheet, there is no way to dynamically set the background // color. See: https://forum.qt.io/topic/95940/model-backgroundrole-overridden-by-style-sheet/ // https://bugreports.qt.io/browse/QTBUG-70100 if (!m_source || role != Qt::DisplayRole || !index.isValid() || index.column() >= int(m_fields.size())) { return QVariant(); } if (m_rowforcachedoc != index.row()) { m_rowforcachedoc = index.row(); m_cachedoc = Rcl::Doc(); if (!m_source->getDoc(index.row(), m_cachedoc)) { return QVariant(); } } string colname = m_fields[index.column()]; string data = m_getters[index.column()](colname, m_cachedoc); #ifndef _WIN32 // Special case url, because it may not be utf-8. URL-encode in this case. // Not on windows, where we always read the paths as Unicode. if (!colname.compare("url")) { int ecnt; string data1; if (!transcode(data, data1, cstr_utf8, cstr_utf8, &ecnt) || ecnt > 0) { data = path_pcencode(data, 7); } } #endif list lr; g_hiliter.plaintorich(data, lr, m_hdata); return u8s2qs(lr.front()); } void RecollModel::saveAsCSV(std::fstream& fp) { if (!m_source) return; m_source->setqquantum(30000); int cols = columnCount(); vector tokens; for (int col = 0; col < cols; col++) { QString qs = headerData(col, Qt::Horizontal, Qt::DisplayRole).toString(); tokens.push_back(qs2utf8s(qs)); } auto csv = stringsToCSV(tokens); fp << csv << "\n"; for (int row = 0;; row++) { Rcl::Doc doc; if (!m_source->getDoc(row, doc)) { break; } for (int col = 0; col < cols; col++) { tokens[col] = m_getters[col](m_fields[col], doc); } csv = stringsToCSV(tokens); fp << csv << "\n"; } m_source->setqquantum(100); } // This gets called when the column headers are clicked void RecollModel::sort(int column, Qt::SortOrder order) { if (m_ignoreSort) { return; } LOGDEB("RecollModel::sort(" << column << ", " << order << ")\n"); DocSeqSortSpec spec; if (column >= 0 && column < int(m_fields.size())) { spec.field = m_fields[column]; if (!stringlowercmp("relevancyrating", spec.field) && order != Qt::AscendingOrder) { QMessageBox::warning(0, "Recoll", tr("Can't sort by inverse relevance")); QTimer::singleShot(0, m_table, SLOT(resetSort())); return; } if (!stringlowercmp("date", spec.field) || !stringlowercmp("datetime", spec.field)) spec.field = "mtime"; spec.desc = (order != Qt::AscendingOrder); } emit sortDataChanged(spec); } /////////////////////////// // ResTable panel methods // We use a custom delegate to display the cells because the base // tableview's can't handle rich text to highlight the match terms class ResTableDelegate: public QStyledItemDelegate { public: ResTableDelegate(QObject *parent) : QStyledItemDelegate(parent) {} // We might want to optimize by passing the data to the base // method if the text does not contain any term matches. Would // need a modif to plaintorich to return the match count (easy), // and a way to pass an indicator from data(), a bit more // difficult. Anyway, the display seems fast enough as is. void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QVariant value = index.data(Qt::DisplayRole); QString text; if (value.isValid() && !value.isNull()) { text = value.toString(); } if (text.isEmpty()) { QStyledItemDelegate::paint(painter, option, index); return; } QStyleOptionViewItem opt = option; initStyleOption(&opt, index); painter->save(); /* As we draw with a text document, not the normal tableview painter, we need to retrieve the appropriate colors and set them as HTML styles. */ QString color = opt.palette.color(QPalette::Base).name(); QString textcolor = opt.palette.color(QPalette::Text).name(); QString selcolor = opt.palette.color(QPalette::Highlight).name(); QString seltextcolor = opt.palette.color(QPalette::HighlightedText).name(); QString fstyle; QFont fnt = qvariant_cast(index.data(Qt::FontRole)); int fs = fnt.pointSize(); LOGDEB1("ResTable: delegate: Got fs " << fs << "\n"); fstyle = QString("font-size: %1pt").arg(fs) + ";"; QString ntxt("
") + text + QString("
"); text.swap(ntxt); painter->setClipRect(opt.rect); QPoint where = option.rect.topLeft(); where.ry() += TEXTINCELLVTRANS; painter->translate(where); QTextDocument document; document.setHtml(text); document.drawContents(painter); painter->restore(); } }; int ResTable::fontsize() { int fs; if (prefs.reslistfontfamily != "") { fs = prefs.reslistfontsize; LOGDEB1("ResTable::fontsize() got font size from reslist prefs: " << fs << "\n"); fs = std::round(fs * prefs.wholeuiscale); } else { /* The font size we get here is already scaled */ this->ensurePolished(); fs = this->font().pointSize(); LOGDEB1("ResTable::fontsize() got fs from widget: " << fs << "\n"); } if (fs + prefs.zoomincr > 3) fs += prefs.zoomincr; else fs = 3; LOGDEB1("ResTable::fontsize() returning: " << fs << "\n"); return fs; } void ResTable::setDefRowHeight() { QHeaderView *header = tableView->verticalHeader(); if (header) { // Don't do this: it forces a query on the whole model (all // docs) to compute the height. No idea why this was needed, // things seem to work ok without it. The row height does not // shrink when the font is reduced, but I'm not sure that it // worked before. // header->setSectionResizeMode(QHeaderView::ResizeToContents); // Compute ourselves instead, for one row. QFont font = tableView->font(); int fs = fontsize(); if (fs > 0) font.setPointSize(fs); QFontMetrics fm(font); header->setDefaultSectionSize(fm.height() + ROWHEIGHTPAD); header->setSectionResizeMode(QHeaderView::Fixed); } } void ResTable::init(QStringList _ifields) { QStringList restableFields; QString qw; QVariant splittersizes; if (!_ifields.empty()) { restableFields = _ifields; } else { bool locset; if (theconfig->getConfParam("idxlocalguisettings", &locset) && locset) { QSettings settings( u8s2qs(path_cat(theconfig->getConfDir(), "recollgui.ini")), QSettings::IniFormat); restableFields = settings.value(settingskey_fieldlist).toStringList(); qw = settings.value(settingskey_fieldwiths).toString(); splittersizes = settings.value(settingskey_splittersizes); } if (restableFields.empty()) { QSettings settings; restableFields = settings.value(settingskey_fieldlist).toStringList(); qw = settings.value(settingskey_fieldwiths).toString(); splittersizes = settings.value(settingskey_splittersizes); } if (restableFields.empty()) { restableFields.push_back("date"); restableFields.push_back("title"); restableFields.push_back("filename"); restableFields.push_back("author"); restableFields.push_back("url"); } } if (!(m_model = new RecollModel(restableFields, this))) return; tableView->setModel(m_model); tableView->setMouseTracking(true); tableView->setSelectionBehavior(QAbstractItemView::SelectRows); tableView->setItemDelegate(new ResTableDelegate(this)); tableView->setContextMenuPolicy(Qt::CustomContextMenu); tableView->setAlternatingRowColors(true); onNewShortcuts(); connect(&SCBase::scBase(), SIGNAL(shortcutsChanged()), this, SLOT(onNewShortcuts())); auto sc = new QShortcut(QKeySequence(Qt::Key_Escape), this); connect(sc, SIGNAL(activated()), tableView->selectionModel(), SLOT(clear())); connect(tableView, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(createPopupMenu(const QPoint&))); connect(tableView, SIGNAL(entered(const QModelIndex&)), this, SLOT(tableView_entered(const QModelIndex&))); QHeaderView *header = tableView->horizontalHeader(); if (header) { if (_ifields.empty()) { vector vw; stringToStrings(qs2utf8s(qw), vw); vector restableColWidths; for (const auto& w : vw) { restableColWidths.push_back(atoi(w.c_str())); } if (int(restableColWidths.size()) == header->count()) { for (int i = 0; i < header->count(); i++) { header->resizeSection(i, restableColWidths[i]); } } header->setSortIndicatorShown(true); header->setSortIndicator(-1, Qt::AscendingOrder); header->setContextMenuPolicy(Qt::CustomContextMenu); connect(header, SIGNAL(sectionResized(int,int,int)), this, SLOT(saveColState())); connect(header, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(createHeaderPopupMenu(const QPoint&))); } else { header->setSortIndicatorShown(false); } header->setStretchLastSection(1); } #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) header->setSectionsMovable(true); #else header->setMovable(true); #endif setDefRowHeight(); connect(tableView->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex &)), this, SLOT(onTableView_currentChanged(const QModelIndex&))); connect(tableView, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(onDoubleClick(const QModelIndex&))); connect(tableView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(onClicked(const QModelIndex&))); m_pager = new ResTablePager(theconfig, this); m_pager->setHighLighter(&g_hiliter); deleteZ(textBrowser); m_detail = new ResTableDetailArea(this); m_detail->setReadOnly(true); m_detail->setUndoRedoEnabled(false); m_detail->setOpenLinks(false); m_detail->init(); // signals and slots connections connect(m_detail, SIGNAL(anchorClicked(const QUrl&)), this, SLOT(onLinkClicked(const QUrl&))); splitter->addWidget(m_detail); splitter->setOrientation(Qt::Vertical); if (splittersizes != QVariant()) { splitter->restoreState(splittersizes.toByteArray()); } else { QList sizes; sizes << 355 << 125; splitter->setSizes(sizes); } installEventFilter(this); onUiPrefsChanged(); } void ResTable::onNewShortcuts() { if (prefs.noResTableRowJumpSC) { for (auto& lnk : m_rowlinks) { delete lnk; } m_rowlinks.clear(); for (auto& sc : m_rowsc) { delete sc; } m_rowsc.clear(); } else if (m_rowlinks.empty()) { // Set "go to row" accelerator shortcuts. letter or digit for 0-9, // then letter up to 25 std::function setrow = std::bind(&ResTable::setCurrentRowFromKbd, this, std::placeholders::_1); for (int i = 0; i <= 25; i++) { auto qs = QString("Ctrl+Shift+%1").arg(char('a'+i)); auto sc = new QShortcut(QKeySequence(qs2utf8s(qs).c_str()), this); m_rowlinks.push_back(new SCData(this, setrow, i)); m_rowsc.push_back(sc); connect(sc, SIGNAL(activated()), m_rowlinks.back(), SLOT(activate())); if (i > 9) continue; qs = QString("Ctrl+%1").arg(i); sc = new QShortcut(QKeySequence(qs2utf8s(qs).c_str()), this); m_rowsc.push_back(sc); m_rowlinks.push_back(new SCData(this, setrow, i)); connect(sc, SIGNAL(activated()), m_rowlinks.back(), SLOT(activate())); } } SETSHORTCUT(this, "restable:704", tr("Result Table"), tr("Open current result document"),"Ctrl+O", m_opensc, menuEdit); SETSHORTCUT(this, "restable:706", tr("Result Table"), tr("Open current result and quit"), "Ctrl+Alt+Shift+O", m_openquitsc, menuEditAndQuit); SETSHORTCUT(this, "restable:709", tr("Result Table"), tr("Preview"), "Ctrl+D", m_previewsc, menuPreview); SETSHORTCUT(this, "restable:711", tr("Result Table"), tr("Show snippets"), "Ctrl+E", m_showsnipssc, menuShowSnippets); SETSHORTCUT(this, "restable:713", tr("Result Table"), tr("Show header"), "Ctrl+H", m_showheadersc, toggleHeader); SETSHORTCUT(this, "restable:715", tr("Result Table"), tr("Show vertical header"), "Ctrl+V", m_showvheadersc, toggleVHeader); SETSHORTCUT(this, "restable:718", tr("Result Table"), tr("Copy current result text to clipboard"), "Ctrl+G", m_copycurtextsc, menuCopyText); SETSHORTCUT(this, "restable:734", tr("Result Table"), tr("Copy result text and quit"), "Ctrl+Alt+Shift+G", m_copycurtextquitsc, menuCopyTextAndQuit); std::vector scps={ m_opensc, m_openquitsc, m_previewsc, m_showsnipssc, m_showheadersc, m_showvheadersc, m_copycurtextsc, m_copycurtextquitsc}; for (auto& scp : scps) { scp->setContext(Qt::WidgetWithChildrenShortcut); } } bool ResTable::eventFilter(QObject*, QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent* key = static_cast(event); if ((key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return)) { menuEdit(); return true; } } return false; } void ResTable::setRclMain(RclMain *m, bool ismain) { m_rclmain = m; m_ismainres = ismain; // We allow single selection only in the main table because this // may have a mix of file-level docs and subdocs and multisave // only works for subdocs if (m_ismainres) tableView->setSelectionMode(QAbstractItemView::SingleSelection); else tableView->setSelectionMode(QAbstractItemView::ExtendedSelection); if (!m_ismainres) { // Don't set this shortcut when we are a child of main, would be duplicate/ambiguous connect(new QShortcut(quitKeySeq, this), SIGNAL(activated()), m_rclmain, SLOT (fileExit())); new QShortcut(closeKeySeq, this, SLOT (close())); } connect(this, SIGNAL(previewRequested(Rcl::Doc)), m_rclmain, SLOT(startPreview(Rcl::Doc))); connect(this, SIGNAL(editRequested(Rcl::Doc)), m_rclmain, SLOT(startNativeViewer(Rcl::Doc))); connect(this, SIGNAL(docSaveToFileClicked(Rcl::Doc)), m_rclmain, SLOT(saveDocToFile(Rcl::Doc))); connect(this, SIGNAL(showSnippets(Rcl::Doc)), m_rclmain, SLOT(showSnippets(Rcl::Doc))); } void ResTable::toggleHeader() { if (tableView->horizontalHeader()->isVisible()) { prefs.noResTableHeader = true; tableView->horizontalHeader()->hide(); } else { prefs.noResTableHeader = false; tableView->horizontalHeader()->show(); } } void ResTable::toggleVHeader() { if (tableView->verticalHeader()->isVisible()) { prefs.showResTableVHeader = false; tableView->verticalHeader()->hide(); } else { prefs.showResTableVHeader = true; tableView->verticalHeader()->show(); } } void ResTable::onUiPrefsChanged() { if (m_detail) { m_detail->setFont(); } auto index = tableView->indexAt(QPoint(0, 0)); // There may be a better way to force repainting all visible rows // with the possibly new font, but this works... tableView->setAlternatingRowColors(false); tableView->setAlternatingRowColors(true); makeRowVisible(index.row()); if (prefs.noResTableHeader) { tableView->horizontalHeader()->hide(); } else { tableView->horizontalHeader()->show(); } if (prefs.showResTableVHeader) { tableView->verticalHeader()->show(); } else { tableView->verticalHeader()->hide(); } } void ResTable::setCurrentRowFromKbd(int row) { LOGDEB1("setCurrentRowFromKbd: " << row << "\n"); m_rowchangefromkbd = true; tableView->setFocus(Qt::ShortcutFocusReason); // After calling setCurrentIndex(), currentChanged() gets called // twice, once with row 0 and no selection, once with the actual // target row and selection set. It uses this fact to discriminate // this from hovering. For some reason, when row is zero, there is // only one call. So, in this case, we first select row 1, and // this so pretty hack gets things working if (row == 0) { tableView->selectionModel()->setCurrentIndex( m_model->index(1, 0), QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Rows); } tableView->selectionModel()->setCurrentIndex( m_model->index(row, 0), QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Rows); } int ResTable::getDetailDocNumOrTopRow() { if (m_detaildocnum >= 0) return m_detaildocnum; QModelIndex modelIndex = tableView->indexAt(QPoint(0, 0)); return modelIndex.row(); } void ResTable::makeRowVisible(int row) { LOGDEB("ResTable::showRow(" << row << ")\n"); QModelIndex modelIndex = m_model->index(row, 0); tableView->scrollTo(modelIndex, QAbstractItemView::PositionAtTop); tableView->selectionModel()->clear(); m_detail->init(); m_detaildocnum = -1; } // This is called by rclmain_w prior to exiting void ResTable::saveColState() { if (!m_ismainres) return; QSettings gsettings; QSettings lsettings( u8s2qs(path_cat(theconfig->getConfDir(), "recollgui.ini")), QSettings::IniFormat); QSettings *settings = &gsettings; bool locset; if (theconfig->getConfParam("idxlocalguisettings", &locset) && locset) { settings = &lsettings; } settings->setValue(settingskey_splittersizes, splitter->saveState()); QHeaderView *header = tableView->horizontalHeader(); const vector& vf = m_model->getFields(); if (!header) { LOGERR("ResTable::saveColState: no table header ??\n"); return; } // Remember the current column order. Walk in visual order and // create new list QStringList newfields; QString newwidths; for (int vi = 0; vi < header->count(); vi++) { int li = header->logicalIndex(vi); if (li < 0 || li >= int(vf.size())) { LOGERR("saveColState: logical index beyond list size!\n"); continue; } newfields.push_back(u8s2qs(vf[li])); newwidths += QString().setNum(header->sectionSize(li)) + QString(" "); } settings->setValue(settingskey_fieldlist, newfields); settings->setValue(settingskey_fieldwiths, newwidths); } void ResTable::onTableView_currentChanged(const QModelIndex& index) { bool hasselection = tableView->selectionModel()->hasSelection(); LOGDEB2("ResTable::onTableView_currentChanged(" << index.row() << ", " << index.column() << ") from kbd " << m_rowchangefromkbd << " hasselection " << hasselection << "\n"); if (!m_model || !m_model->getDocSource()) return; Rcl::Doc doc; if (!m_model->getDocSource()->getDoc(index.row(), doc)) { m_detaildocnum = -1; return; } m_detail->init(); m_detaildocnum = index.row(); m_detaildoc = doc; bool isShift = (QApplication::keyboardModifiers() & Qt::ShiftModifier); bool showcontent{false}; bool showmeta{false}; if (m_rowchangefromkbd) { // Ctrl+... jump to row. Show text/meta as for simple click if (hasselection) { // When getting here from ctrl+... we get called twice, once with row 0 // and no selection, once with the actual row and selection. Only // reset fromkbd and set showcontent in the second case. m_rowchangefromkbd = false; showcontent = prefs.resTableTextNoShift; } } else { // Mouse click. Show text or meta depending on shift key. Never show text when hovering // (no selection). showcontent = hasselection && (isShift ^ prefs.resTableTextNoShift); } if (!showcontent) { showmeta = hasselection || !prefs.resTableNoHoverMeta; } bool displaydone{false}; if (showcontent) { // If it's an image, and simply stored in a file, display it. We don't go to the trouble of // extracting an embedded image here. if (mimeIsImage(m_detaildoc.mimetype) && m_detaildoc.ipath.empty()) { auto image = QImage(fileurltolocalpath(m_detaildoc.url).c_str()); if (!image.isNull()) { m_detail->setPlainText(""); auto w = m_detail->width(); auto h = m_detail->height(); if (image.width() > w || image.height() > h) { image = image.scaled(w, h, Qt::KeepAspectRatio); } m_detail->document()->addResource(QTextDocument::ImageResource,QUrl("image"),image); m_detail->textCursor().insertImage("image"); displaydone = true; } } if (!displaydone && rcldb->getDocRawText(m_detaildoc)) { m_detail->setPlainText(u8s2qs(m_detaildoc.text)); displaydone = true; } } if (!displaydone && showmeta) { m_pager->displaySingleDoc(theconfig, m_detaildocnum, m_detaildoc, m_model->m_hdata); } emit detailDocChanged(doc, m_model->getDocSource()); } void ResTable::tableView_entered(const QModelIndex& index) { LOGDEB2("ResTable::on_tableView_entered(" << index.row() << ", " << index.column() << ")\n"); if (!tableView->selectionModel()->hasSelection()) onTableView_currentChanged(index); } void ResTable::takeFocus() { // LOGDEB("resTable: take focus\n"); tableView->setFocus(Qt::ShortcutFocusReason); } void ResTable::setDocSource(std::shared_ptr nsource) { LOGDEB("ResTable::setDocSource\n"); if (m_model) m_model->setDocSource(nsource); if (m_pager) m_pager->setDocSource(nsource, 0); if (m_detail) m_detail->init(); m_detaildocnum = -1; } void ResTable::resetSource() { LOGDEB("ResTable::resetSource\n"); setDocSource(std::shared_ptr()); readDocSource(); } void ResTable::saveAsCSV() { static const QString csvprevdirkey("/Recoll/prefs/restableAsCSVPDir");; LOGDEB("ResTable::saveAsCSV\n"); if (!m_model) return; QSettings settings; QString s = QFileDialog::getSaveFileName(this, tr("Save table to CSV file"), settings.value(csvprevdirkey).toString()); if (s.isEmpty()) return; QDir cdir; settings.setValue(csvprevdirkey, cdir.absoluteFilePath(s)); std::string tofile = qs2path(s); std::fstream fp; if (!path_streamopen(tofile, std::ios::out|std::ios::trunc, fp)) { QMessageBox::warning(0, "Recoll", tr("Can't open/create file: ") + s); return; } m_model->saveAsCSV(fp); fp.close(); } // This is called when the sort order is changed from another widget void ResTable::onSortDataChanged(DocSeqSortSpec spec) { LOGDEB("ResTable::onSortDataChanged: [" << spec.field << "] desc " << spec.desc << "\n"); QHeaderView *header = tableView->horizontalHeader(); if (!header || !m_model) return; // Check if the specified field actually matches one of columns // and set indicator m_model->setIgnoreSort(true); bool matched = false; const vector fields = m_model->getFields(); for (unsigned int i = 0; i < fields.size(); i++) { if (!spec.field.compare(m_model->baseField(fields[i]))) { header->setSortIndicator(i, spec.desc ? Qt::DescendingOrder : Qt::AscendingOrder); matched = true; } } if (!matched) header->setSortIndicator(-1, Qt::AscendingOrder); m_model->setIgnoreSort(false); } void ResTable::resetSort() { LOGDEB("ResTable::resetSort()\n"); QHeaderView *header = tableView->horizontalHeader(); if (header) header->setSortIndicator(-1, Qt::AscendingOrder); // the model's sort slot is not called by qt in this case (qt 4.7) if (m_model) m_model->sort(-1, Qt::AscendingOrder); } void ResTable::readDocSource(bool resetPos) { LOGDEB("ResTable::readDocSource(" << resetPos << ")\n"); if (resetPos) tableView->verticalScrollBar()->setSliderPosition(0); if (m_model->m_source) { m_model->m_source->getTerms(m_model->m_hdata); } else { m_model->m_hdata.clear(); } m_model->readDocSource(); m_detail->init(); m_detaildocnum = -1; } void ResTable::onLinkClicked(const QUrl &qurl) { if (m_detaildocnum < 0) { return; } auto strurl = pc_decode(qs2utf8s(qurl.toString())); LOGDEB("ResTable::onLinkClicked: [" << strurl << "]\n"); auto [what, docseqnum, origorscript, replacement] = internal_link(strurl); if (what == 0) { return; } if (m_detaildocnum != docseqnum) { //? Really we should abort... LOGERR("ResTable::onLinkClicked: m_detaildocnum != docseqnum !\n"); return; } switch (what) { // Open abstract/snippets window case 'A': emit showSnippets(m_detaildoc); break; case 'D': { vector dups; if (m_rclmain && m_model->getDocSource()->docDups(m_detaildoc, dups)) { m_rclmain->newDupsW(m_detaildoc, dups); } } break; // Open parent folder case 'F': { emit editRequested(ResultPopup::getFolder(m_detaildoc)); } break; case 'P': case 'E': { if (what == 'P') { if (m_ismainres) { emit docPreviewClicked(docseqnum, m_detaildoc, 0); } else { emit previewRequested(m_detaildoc); } } else { emit editRequested(m_detaildoc); } } break; // Run script. Link format Rnn|Script Name case 'R': { auto bar = strurl.find('|'); if (bar == std::string::npos) break; auto cmdname = strurl.substr(bar + 1); LOGDEB0("Run script: cmdname: [" << cmdname << "]\n"); DesktopDb ddb(path_cat(theconfig->getConfDir(), "scripts")); DesktopDb::AppDef app; if (ddb.appByName(cmdname, app)) { QAction act(QString::fromUtf8(app.name.c_str()), this); QVariant v(QString::fromUtf8(app.command.c_str())); act.setData(v); menuOpenWith(&act); } } break; default: LOGERR("ResTable::onLinkClicked: bad link [" << strurl << "]\n"); break; } } void ResTable::onClicked(const QModelIndex& index) { // If the current row is the one clicked, currentChanged is not // called so that we would not do the text display if we did not // call it from here m_rowchangefromkbd = false; if (index.row() == m_detaildocnum) { onTableView_currentChanged(index); } } void ResTable::onDoubleClick(const QModelIndex& index) { m_rowchangefromkbd = false; if (!m_model || !m_model->getDocSource()) return; Rcl::Doc doc; if (m_model->getDocSource()->getDoc(index.row(), doc)) { if (m_detaildocnum != index.row()) { m_detail->init(); m_detaildocnum = index.row(); m_pager->displayDoc(theconfig, index.row(), m_detaildoc, m_model->m_hdata); } m_detaildoc = doc; if (m_detaildocnum >= 0) emit editRequested(m_detaildoc); } else { m_detaildocnum = -1; } } void ResTable::createPopupMenu(const QPoint& pos) { LOGDEB("ResTable::createPopupMenu: m_detaildocnum " << m_detaildocnum << "\n"); if (m_detaildocnum >= 0 && m_model) { int opts = m_ismainres? ResultPopup::isMain : 0; int selsz = tableView->selectionModel()->selectedRows().size(); if (selsz == 1) { opts |= ResultPopup::showSaveOne; } else if (selsz > 1 && !m_ismainres) { // We don't show save multiple for the main list because not all // docs are necessary subdocs and multisave only works with those. opts |= ResultPopup::showSaveSel; } QMenu *popup = ResultPopup::create(this, opts, m_model->getDocSource(), m_detaildoc); popup->popup(mapToGlobal(pos)); } } void ResTable::menuPreview() { if (m_detaildocnum >= 0) { if (m_ismainres) { emit docPreviewClicked(m_detaildocnum, m_detaildoc, 0); } else { emit previewRequested(m_detaildoc); } } } void ResTable::menuSaveToFile() { if (m_detaildocnum >= 0) emit docSaveToFileClicked(m_detaildoc); } void ResTable::menuSaveSelection() { if (m_model == 0 || !m_model->getDocSource()) return; QModelIndexList indexl = tableView->selectionModel()->selectedRows(); vector v; for (int i = 0; i < indexl.size(); i++) { Rcl::Doc doc; if (m_model->getDocSource()->getDoc(indexl[i].row(), doc)) v.push_back(doc); } if (v.size() == 0) { return; } else if (v.size() == 1) { emit docSaveToFileClicked(v[0]); } else { multiSave(this, v); } } void ResTable::menuPreviewParent() { if (m_detaildocnum >= 0 && m_model && m_model->getDocSource()) { Rcl::Doc pdoc = ResultPopup::getParent(m_model->getDocSource(), m_detaildoc); if (pdoc.mimetype == "inode/directory") { emit editRequested(pdoc); } else { emit previewRequested(pdoc); } } } void ResTable::menuOpenParent() { if (m_detaildocnum >= 0 && m_model && m_model->getDocSource()) { Rcl::Doc pdoc = ResultPopup::getParent(m_model->getDocSource(), m_detaildoc); if (!pdoc.url.empty()) { emit editRequested(pdoc); } } } void ResTable::menuOpenFolder() { if (m_detaildocnum >= 0) { Rcl::Doc pdoc = ResultPopup::getFolder(m_detaildoc); if (!pdoc.url.empty()) { emit editRequested(pdoc); } } } void ResTable::menuEdit() { if (m_detaildocnum >= 0) emit editRequested(m_detaildoc); } void ResTable::menuEditAndQuit() { if (m_detaildocnum >= 0) { emit editRequested(m_detaildoc); m_rclmain->fileExit(); } } void ResTable::menuOpenWith(QAction *act) { if (act == 0) return; string cmd = qs2utf8s(act->data().toString()); if (m_detaildocnum >= 0) emit openWithRequested(m_detaildoc, cmd); } void ResTable::menuCopyFN() { if (m_detaildocnum >= 0) ResultPopup::copyFN(m_detaildoc); } void ResTable::menuCopyPath() { if (m_detaildocnum >= 0) ResultPopup::copyPath(m_detaildoc); } void ResTable::menuCopyURL() { if (m_detaildocnum >= 0) ResultPopup::copyURL(m_detaildoc); } void ResTable::menuCopyText() { if (m_detaildocnum >= 0 && rcldb) { ResultPopup::copyText(m_detaildoc, m_rclmain); if (m_rclmain) { auto msg = tr("%1 bytes copied to clipboard").arg(m_detaildoc.text.size()); // Feedback was requested: tray messages are too ennoying, not // everybody displays the status bar, and the tool tip only // works when the copy is triggered through a shortcut (else, // it appears that the mouse event cancels it and it's not // shown). So let's do status bar if visible else tooltip. // Menu trigger with no status bar -> no feedback... // rclmain->showTrayMessage(msg); if (m_rclmain->statusBar()->isVisible()) { m_rclmain->statusBar()->showMessage(msg, 1000); } else { int x = tableView->columnViewportPosition(0) + tableView->width() / 2 ; int y = tableView->rowViewportPosition(m_detaildocnum); QPoint pos = tableView->mapToGlobal(QPoint(x,y)); QToolTip::showText(pos, msg); QTimer::singleShot(1500, m_rclmain, SLOT(hideToolTip())); } } } } void ResTable::menuCopyTextAndQuit() { if (m_detaildocnum >= 0 && rcldb) { menuCopyText(); m_rclmain->fileExit(); } } void ResTable::menuExpand() { if (m_detaildocnum >= 0) emit docExpand(m_detaildoc); } void ResTable::menuShowSnippets() { if (m_detaildocnum >= 0) emit showSnippets(m_detaildoc); } void ResTable::menuShowSubDocs() { if (m_detaildocnum >= 0) emit showSubDocs(m_detaildoc); } void ResTable::createHeaderPopupMenu(const QPoint& pos) { LOGDEB("ResTable::createHeaderPopupMenu(" << pos.x() << ", " << pos.y() << ")\n"); QHeaderView *header = tableView->horizontalHeader(); if (!header || !m_model) return; m_popcolumn = header->logicalIndexAt(pos); if (m_popcolumn < 0) return; const map& allfields = m_model->getAllFields(); const vector& fields = m_model->getFields(); QMenu *popup = new QMenu(this); popup->addAction(tr("&Reset sort"), this, SLOT(resetSort())); popup->addSeparator(); popup->addAction(tr("&Save as CSV"), this, SLOT(saveAsCSV())); popup->addSeparator(); popup->addAction(tr("&Delete column"), this, SLOT(deleteColumn())); popup->addSeparator(); QAction *act; for (const auto& field : allfields) { if (std::find(fields.begin(), fields.end(), field.first) != fields.end()) continue; act = new QAction(tr("Add \"%1\" column").arg(field.second), popup); act->setData(u8s2qs(field.first)); connect(act, SIGNAL(triggered(bool)), this , SLOT(addColumn())); popup->addAction(act); } popup->popup(mapToGlobal(pos)); } void ResTable::deleteColumn() { if (m_model) m_model->deleteColumn(m_popcolumn); } void ResTable::addColumn() { QAction *action = (QAction *)sender(); if (nullptr == action || nullptr == m_model) return; std::string field = qs2utf8s(action->data().toString()); LOGDEB("addColumn: text " << qs2utf8s(action->text()) << ", field " << field << "\n"); m_model->addColumn(m_popcolumn, field); } recoll-1.43.12/qtgui/advshist.cpp0000644000175000017500000000520715121730572016135 0ustar dockesdockes/* Copyright (C) 2005-2024 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "advshist.h" #include "guiutils.h" #include "log.h" #include "xmltosd.h" #include "dynconf.h" using namespace std; using namespace Rcl; AdvSearchHist::AdvSearchHist() { read(); } AdvSearchHist::~AdvSearchHist() { for (auto& entry : m_entries) { entry.reset(); } } std::shared_ptr AdvSearchHist::getnewest() { if (m_entries.empty()) return std::shared_ptr(); return m_entries[0]; } std::shared_ptr AdvSearchHist::getolder() { m_current++; if (m_current >= int(m_entries.size())) { m_current--; return std::shared_ptr(); } return m_entries[m_current]; } std::shared_ptr AdvSearchHist::getnewer() { if (m_current == -1 || m_current == 0 || m_entries.empty()) return std::shared_ptr(); return m_entries[--m_current]; } bool AdvSearchHist::push(std::shared_ptr sd) { m_entries.insert(m_entries.begin(), sd); if (m_current != -1) m_current++; string xml = sd->asXML(); // dynconf interprets <= 0 as unlimited size, but we want 0 to // disable saving history if (prefs.historysize != 0) { g_dynconf->enterString(advSearchHistSk, xml, prefs.historysize); } return true; } bool AdvSearchHist::read() { if (!g_dynconf) return false; // getStringEntries() return the entries in order (lower key // first), but we want most recent first, so revert vector lxml = g_dynconf->getStringEntries(advSearchHistSk); for (auto it = lxml.rbegin(); it != lxml.rend(); it++) { std::shared_ptr sd = SearchData::fromXML(*it); if (sd) m_entries.push_back(sd); } return true; } void AdvSearchHist::clear() { g_dynconf->eraseAll(advSearchHistSk); } recoll-1.43.12/qtgui/firstidx.h0000644000175000017500000000211214753313624015606 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _FIRSTIDX_H_INCLUDED_ #define _FIRSTIDX_H_INCLUDED_ #include "ui_firstidx.h" class FirstIdxDialog : public QDialog, public Ui::FirstIdxDialog { Q_OBJECT public: FirstIdxDialog(QWidget * parent = 0) : QDialog(parent) { setupUi(this); } }; #endif /* _FIRSTIDX_H_INCLUDED_ */ recoll-1.43.12/qtgui/xmltosd.h0000644000175000017500000000330315121730573015443 0ustar dockesdockes/* Copyright (C) 2014 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef XMLTOSD_H_INCLUDED #define XMLTOSD_H_INCLUDED #include #include #include /** XML from saved simple searches (see searchdata.h for the advanced search history format). * * * base64-encoded query text * OR|AND|FN|QL * space-separated lang list * * space-separated suffix list * base64-encoded config path>/EX> * */ /* Resulting structure */ struct SSearchDef { SSearchDef() : autophrase(false), mode(0) {} std::vector stemlangs; std::vector autosuffs; std::vector extindexes; std::string text; bool autophrase; int mode; }; /* Parse XML into SSearchDef */ bool xmlToSSearch(const std::string& xml, SSearchDef&); #endif /* XMLTOSD_H_INCLUDED */ recoll-1.43.12/qtgui/snippets_w.h0000644000175000017500000000624615121730573016155 0ustar dockesdockes/* Copyright (C) 2012 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _SNIPPETS_W_H_INCLUDED_ #define _SNIPPETS_W_H_INCLUDED_ #include "autoconfig.h" #include #include #include "rcldoc.h" #include "docseq.h" #include "rclmain_w.h" #include "ui_snippets.h" class SnippetsW : public QWidget, public Ui::Snippets { Q_OBJECT public: SnippetsW(Rcl::Doc doc, std::shared_ptr source, QWidget* parent = 0) : QWidget(parent) { setupUi((QDialog*)this); init(); onSetDoc(doc, source); } /** List shortcuts so that the prefs can be edited before any preview is created */ static void listShortcuts(); public slots: virtual void onLinkClicked(const QUrl &); virtual void onSetDoc(Rcl::Doc doc, std::shared_ptr source); virtual void createPopupMenu(const QPoint& pos); virtual void onNewShortcuts(); protected slots: virtual void slotEditFind(); virtual void slotEditFindNext(); virtual void slotEditFindPrevious(); virtual void slotSearchTextChanged(const QString&); virtual void slotZoomIn(); virtual void slotZoomOut(); virtual void reloadByRelevance(); virtual void reloadByPage(); virtual void onUiPrefsChanged(); signals: void startNativeViewer(Rcl::Doc, int pagenum, QString term, int line); void zoomIn(); void zoomOut(); private: void init(); std::shared_ptr m_source; Rcl::Doc m_doc; bool m_sortingByPage; QShortcut *m_find1sc{nullptr}; QShortcut *m_find2sc{nullptr}; QShortcut *m_findnextsc{nullptr}; QShortcut *m_findprevsc{nullptr}; QShortcut *m_hidesc{nullptr}; QShortcut *m_zisc{nullptr}; QShortcut *m_zosc{nullptr}; }; #ifdef USING_WEBENGINE #include // Subclass the page to hijack the link clicks class SnipWebPage: public QWebEnginePage { Q_OBJECT public: SnipWebPage(SnippetsW *parent) : QWebEnginePage((QWidget *)parent), m_parent(parent) {} protected: virtual bool acceptNavigationRequest(const QUrl& url, NavigationType tp, bool) { if (tp == QWebEnginePage::NavigationTypeLinkClicked) { m_parent->onLinkClicked(url); return false; } else { return true; } } private: SnippetsW *m_parent; }; #endif #endif /* _SNIPPETS_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/actsearch_w.h0000644000175000017500000000331315121730572016234 0ustar dockesdockes/* Copyright (C) 2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _ACTSEARCH_H_INCLUDED_ #define _ACTSEARCH_H_INCLUDED_ // A window for letting the user to search among menu entries (actions) and execute the one found. #include #include #include #include "ui_actsearch.h" class QCompleter; class QAction; class QString; class ActSearchW : public QDialog, public Ui::ActSearchDLG { Q_OBJECT public: ActSearchW(QWidget* parent = 0) : QDialog(parent) { setupUi(this); init(); } void setActList(QList); virtual bool eventFilter(QObject *target, QEvent *event); private slots: void onActivated(int); void onTextChanged(const QString&); private: void init(); std::vector m_actions; QCompleter *m_completer{nullptr}; // Decides if we match the start only or anywhere. Anywhere seems better. May be made a pref one // day. bool m_match_contains{true}; }; #endif /* _ACTSEARCH_H_INCLUDED_ */ recoll-1.43.12/qtgui/winschedtool.ui0000644000175000017500000000431414753313624016650 0ustar dockesdockes WinSchedToolW 0 0 508 292 Recoll Batch indexing 0 1 Qt::RichText true Start Windows Task Scheduler tool Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() WinSchedToolW accept() 248 254 157 274 buttonBox rejected() WinSchedToolW reject() 316 260 286 274 recoll-1.43.12/qtgui/actsearch.ui0000644000175000017500000000153415121730572016077 0ustar dockesdockes ActSearchDLG 0 0 314 43 Menu search true 15 QComboBox::NoInsert false recoll-1.43.12/qtgui/respopup.h0000644000175000017500000000300414753313624015630 0ustar dockesdockes/* Copyright (C) 2006-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _RESPOPUP_H_INCLUDED_ #define _RESPOPUP_H_INCLUDED_ #include "autoconfig.h" class RclMain; namespace ResultPopup { enum Options {showExpand = 0x1, showSubs = 0x2, isMain = 0x3, showSaveOne = 0x4, showSaveSel = 0x8}; extern QMenu *create(QWidget *me, int opts, std::shared_ptr source, Rcl::Doc& doc); extern Rcl::Doc getParent(std::shared_ptr source, Rcl::Doc& doc); extern Rcl::Doc getFolder(Rcl::Doc& doc); extern void copyFN(const Rcl::Doc &doc); extern void copyPath(const Rcl::Doc &doc); extern void copyURL(const Rcl::Doc &doc); extern void copyText(Rcl::Doc &doc, RclMain *rclmain=nullptr); }; #endif /* _RESPOPUP_H_INCLUDED_ */ recoll-1.43.12/qtgui/rtitool.ui0000644000175000017500000000754514753313314015647 0ustar dockesdockes RTIToolW 0 0 423 207 Real time indexing automatic start <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> true Start indexing daemon with my desktop session. Qt::Horizontal 28 20 false 1 0 Also start indexing daemon right now. Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() RTIToolW accept() 204 159 204 90 buttonBox rejected() RTIToolW reject() 204 159 204 90 recoll-1.43.12/qtgui/ssearchb.ui0000644000175000017500000000664714753313624015753 0ustar dockesdockes SSearchBase 0 0 593 48 SSearchBase 2 4 4 4 4 3 false Erase search entry Clear false Start query Search Qt::TabFocus Choose search type. 8 0 155 0 true Show query history :/images/clock.png true Main menu :/images/menu.png recoll-1.43.12/qtgui/rclhelp.cpp0000644000175000017500000000543415121730573015744 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include "recoll.h" #include "rclhelp.h" #include "log.h" using std::string; using std::map; map HelpClient::helpmap; void HelpClient::installMap(string wname, string section) { helpmap[wname] = section; } HelpClient::HelpClient(QObject *parent, const char *) : QObject(parent) { parent->installEventFilter(this); } bool HelpClient::eventFilter(QObject *obj, QEvent *event) { static time_t last_start; if (event->type() != QEvent::KeyPress && event->type() != QEvent::ShortcutOverride) { return false; } QKeyEvent *ke = static_cast(event); if (ke->key() != Qt::Key_F1 && ke->key() != Qt::Key_Help) { return false; } if (!obj->isWidgetType()) { return false; } QWidget *widget = dynamic_cast(obj); if (nullptr == widget) { // ?? return false; } widget = widget->focusWidget(); auto it = helpmap.end(); std::string onm; while (widget) { QTabWidget *tw = dynamic_cast(widget); if (nullptr != tw) { onm = qs2utf8s(tw->currentWidget()->objectName()); LOGDEB1("HelpClient: tab name " << onm << "\n"); it = helpmap.find(onm); if (it != helpmap.end()) break; } onm = qs2utf8s(widget->objectName()); LOGDEB1("HelpClient: object name " << onm << "\n"); it = helpmap.find(onm); if (it != helpmap.end()) break; widget = widget->parentWidget(); } if (time(0) - last_start > 5) { last_start = time(0); if (it != helpmap.end()) { LOGDEB("HelpClient::eventFilter: " << it->first << "->" << it->second << "\n"); startManual(it->second); } else { LOGDEB("HelpClient::eventFilter: no help section\n"); startManual(""); } } return true; } recoll-1.43.12/qtgui/multisave.h0000644000175000017500000000174615121730573015773 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _MULTISAVE_W_H_INCLUDED_ #define _MULTISAVE_W_H_INCLUDED_ #include #include extern void multiSave(QWidget *parent, std::vector& docs); #endif /* _MULTISAVE_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/advsearch.ui0000644000175000017500000005131315121730572016102 0ustar dockesdockes AdvSearchBase 0 0 544 536 Advanced search true 0 Find 2 0 0 All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. QFrame::NoFrame QFrame::Plain Search for <br>documents<br>satisfying: false 4 8 0 All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Qt::Vertical QSizePolicy::Expanding 0 0 0 0 Delete clause false 0 0 Add clause false QFrame::StyledPanel QFrame::Plain 1 0 0 0 0 QFrame::HLine QFrame::Plain Filter 1 0 Check this to enable filtering on dates Filter dates From false To false QFrame::HLine QFrame::Sunken 1 0 Check this to enable filtering on dates Filter birth dates From false To false QFrame::HLine QFrame::Sunken 1 0 Check this to enable filtering on sizes Filter sizes Minimum size. You can use k/K,m/M,g/G as multipliers Min. Size false Maximum size. You can use k/K,m/M,g/G as multipliers Max. Size false QFrame::HLine QFrame::Sunken 1 0 Check this to enable filtering on file types Restrict file types false 1 0 Check this to use file categories instead of raw mime types By categories false Save as default false 0 Searched file types false false 200 20 QAbstractItemView::ExtendedSelection 0 false All ----> false false Sel -----> false false <----- Sel false false <----- All false 0 Ignored file types false false 200 20 QAbstractItemView::ExtendedSelection QFrame::HLine QFrame::Sunken 8 0 300 0 Enter top directory for search true 20 QComboBox::NoInsert false Browse false Restrict results to files in subtree: false Invert Start Search Close false recoll-1.43.12/qtgui/uiprefs_w.cpp0000644000175000017500000007227015121730573016320 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "recoll.h" #include "guiutils.h" #include "rclconfig.h" #include "pathut.h" #include "uiprefs_w.h" #include "viewaction_w.h" #include "log.h" #include "editdialog.h" #include "rclmain_w.h" #include "ptrans_w.h" #include "scbase.h" #include "rclhelp.h" using std::string; using std::vector; using std::map; using std::list; static std::vector> uilanguages{ {"", ""}, {"Czech", "cs"}, {"Danish", "da"}, {"German", "de"}, {"Greek", "el"}, {"Spanish", "es"}, {"French", "fr"}, {"Hungarian", "hu"}, {"Italian", "it"}, {"Japanese", "ja"}, {"Korean", "ko"}, {"Lithuanian", "lt"}, {"Dutch", "nl"}, {"Polish", "pl"}, {"Russian", "ru"}, {"Swedish", "sv"}, {"Turkish", "tr"}, {"Ukrainian", "uk"}, {"Chinese", "zh_CN"}, }; void UIPrefsDialog::init() { // See enum above and keep in order ! ssearchTypCMB->addItem(tr("Any term")); ssearchTypCMB->addItem(tr("All terms")); ssearchTypCMB->addItem(tr("File name")); ssearchTypCMB->addItem(tr("Query language")); ssearchTypCMB->addItem(tr("Value from previous program exit")); colorschemeCMB->addItem(tr("Light")); colorschemeCMB->addItem(tr("Dark")); #if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) // Qt 6.5 brings a way to detect the desktop dark/light mode. colorschemeCMB->addItem(tr("System")); #if defined(__APPLE__) // __APPLE__ with qt6.5+: always use the system mode. We have problems with the others. colorschemeCMB->hide(); #endif #endif connect(viewActionPB, SIGNAL(clicked()), this, SLOT(showViewAction())); connect(reslistFontPB, SIGNAL(clicked()), this, SLOT(showFontDialog())); connect(resetFontPB, SIGNAL(clicked()), this, SLOT(resetReslistFont())); connect(stylesheetPB, SIGNAL(clicked()),this, SLOT(showStylesheetDialog())); connect(resetSSPB, SIGNAL(clicked()), this, SLOT(resetStylesheet())); connect(snipCssPB, SIGNAL(clicked()),this, SLOT(showSnipCssDialog())); connect(synFilePB, SIGNAL(clicked()),this, SLOT(showSynFileDialog())); connect(resetSnipCssPB, SIGNAL(clicked()), this, SLOT(resetSnipCss())); connect(idxLV, SIGNAL(itemSelectionChanged()), this, SLOT(extradDbSelectChanged())); connect(ptransPB, SIGNAL(clicked()), this, SLOT(extraDbEditPtrans())); connect(addExtraDbPB, SIGNAL(clicked()), this, SLOT(addExtraDbPB_clicked())); connect(delExtraDbPB, SIGNAL(clicked()), this, SLOT(delExtraDbPB_clicked())); connect(togExtraDbPB, SIGNAL(clicked()), this, SLOT(togExtraDbPB_clicked())); connect(actAllExtraDbPB, SIGNAL(clicked()), this, SLOT(actAllExtraDbPB_clicked())); connect(unacAllExtraDbPB, SIGNAL(clicked()), this, SLOT(unacAllExtraDbPB_clicked())); connect(CLEditPara, SIGNAL(clicked()), this, SLOT(editParaFormat())); connect(CLEditHeader, SIGNAL(clicked()), this, SLOT(editHeaderText())); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); connect(buildAbsCB, SIGNAL(toggled(bool)), replAbsCB, SLOT(setEnabled(bool))); connect(autoSpellCB, SIGNAL(toggled(bool)), autoSpellMaxDistSB, SLOT(setEnabled(bool))); connect(ssNoCompleteCB, SIGNAL(toggled(bool)), ssSearchOnCompleteCB, SLOT(setDisabled(bool))); connect(ssNoCompleteCB, SIGNAL(toggled(bool)), ssearchCompletePassiveCB, SLOT(setDisabled(bool))); connect(ssNoCompleteCB, SIGNAL(toggled(bool)), showcompleterhitcountsCB, SLOT(setDisabled(bool))); connect(ssNoCompleteCB, SIGNAL(toggled(bool)), ssearchCompleterHistCntSB, SLOT(setDisabled(bool))); connect(resetscPB, SIGNAL(clicked()), this, SLOT(resetShortcuts())); connect(showTrayIconCB, SIGNAL(clicked()), this, SLOT(showTrayIconCB_clicked())); (void)new HelpClient(this); HelpClient::installMap("tab_shortcuts", "RCL.SEARCH.GUI.SHORTCUTS"); setFromPrefs(); } // Update dialog state from stored prefs void UIPrefsDialog::setFromPrefs() { // Most values are stored in the prefs struct. Some rarely used // ones go directly through the settings QSettings settings; // Entries per result page spinbox pageLenSB->setValue(prefs.respagesize); idxTreeDepthSB->setValue(prefs.idxFilterTreeDepth); maxHistSizeSB->setValue(prefs.historysize); collapseDupsCB->setChecked(prefs.collapseDuplicates); maxHLTSB->setValue(prefs.maxhltextkbs); if (prefs.ssearchTypSav) { ssearchTypCMB->setCurrentIndex(4); } else { ssearchTypCMB->setCurrentIndex(prefs.ssearchTyp); } switch (prefs.filterCtlStyle) { case PrefsPack::FCS_MN: filterMN_RB->setChecked(1); break; case PrefsPack::FCS_CMB: filterCMB_RB->setChecked(1); break; case PrefsPack::FCS_BT: default: filterBT_RB->setChecked(1); break; } noBeepsCB->setChecked(prefs.noBeeps); ssNoCompleteCB->setChecked(prefs.ssearchNoComplete); showcompleterhitcountsCB->setChecked(prefs.showcompleterhitcounts); ssSearchOnCompleteCB->setChecked(prefs.ssearchStartOnComplete); ssSearchOnCompleteCB->setEnabled(!prefs.ssearchNoComplete); syntlenSB->setValue(prefs.syntAbsLen); syntctxSB->setValue(prefs.syntAbsCtx); initStartAdvCB->setChecked(prefs.startWithAdvSearchOpen); keepSortCB->setChecked(prefs.keepSort); noToolbarsCB->setChecked(prefs.noToolbars); noClearSearchCB->setChecked(prefs.noClearSearch); noStatusBarCB->setChecked(prefs.noStatusBar); noMenuBarCB->setChecked(prefs.noMenuBar); noSSTypCMBCB->setChecked(prefs.noSSTypCMB); restabShowTxtNoShiftRB->setChecked(prefs.resTableTextNoShift); restabShowTxtShiftRB->setChecked(!prefs.resTableTextNoShift); resTableNoHoverMetaCB->setChecked(prefs.resTableNoHoverMeta); noResTableHeaderCB->setChecked(prefs.noResTableHeader); showResTableVHeaderCB->setChecked(prefs.showResTableVHeader); noRowJumpShortcutsCB->setChecked(prefs.noResTableRowJumpSC); showTrayIconCB->setChecked(prefs.showTrayIcon); if (!prefs.showTrayIcon) { prefs.closeToTray = false; prefs.trayMessages = false; } closeToTrayCB->setEnabled(showTrayIconCB->checkState()); trayMessagesCB->setEnabled(showTrayIconCB->checkState()); closeToTrayCB->setChecked(prefs.closeToTray); trayMessagesCB->setChecked(prefs.trayMessages); wholeuiscaleSB->setValue(prefs.wholeuiscale); autoSpellCB->setChecked(prefs.autoSpell); autoSpellMaxDistSB->setValue(prefs.autoSpellMaxDist); autoSpellMaxDistSB->setEnabled(prefs.autoSpell); showcompleterhitcountsCB->setChecked(prefs.showcompleterhitcounts); ssearchCompleterHistCntSB->setValue(prefs.ssearchCompleterHistCnt); sidefilterdateformatLE->setText(prefs.sidefilterdateformat); ignwildsCB->setChecked(prefs.ignwilds); pvmaxfldlenSB->setValue(prefs.pvmaxfldlen); singleappCB->setChecked(prefs.singleapp); ssearchCompletePassiveCB->setChecked(prefs.ssearchCompletePassive); previewLinesOverAnchorSB->setValue(prefs.previewLinesOverAnchor); uilanguageCMB->clear(); for (const auto& [lang,abbrev]: uilanguages) { uilanguageCMB->addItem(lang, abbrev); } auto idx = uilanguageCMB->findData(prefs.uilanguage); if (idx >= 0) uilanguageCMB->setCurrentIndex(idx); if (prefs.colorscheme < colorschemeCMB->count()) colorschemeCMB->setCurrentIndex(prefs.colorscheme); previewdarkbgCB->setChecked(prefs.previewdarkbg); /*INSERTHERE_LOAD*/ // See qxtconfirmationmessage. Needs to be -1 for the dialog to show. showTempFileWarningCB->setChecked(prefs.showTempFileWarning == -1); anchorTamilHackCB->setChecked(settings.value("anchorSpcHack", 0).toBool()); previewHtmlCB->setChecked(prefs.previewHtml); previewActiveLinksCB->setChecked(prefs.previewActiveLinks); switch (prefs.previewPlainPre) { case PrefsPack::PP_BR: plainBRRB->setChecked(1); break; case PrefsPack::PP_PRE: plainPRERB->setChecked(1); break; case PrefsPack::PP_PREWRAP: default: plainPREWRAPRB->setChecked(1); break; } // Query terms color qtermStyleCMB->setCurrentText(prefs.qtermstyle); if (qtermStyleCMB->count() <=1) { qtermStyleCMB->addItem(prefs.qtermstyle); qtermStyleCMB->addItem("color: blue"); qtermStyleCMB->addItem("color: red;background: yellow"); qtermStyleCMB->addItem( "color: #dddddd; background: black; font-weight: bold"); } // Abstract snippet separator string abssepLE->setText(prefs.abssep); dateformatLE->setText(u8s2qs(prefs.reslistdateformat)); // Result list font family and size reslistFontFamily = prefs.reslistfontfamily; reslistFontSize = prefs.reslistfontsize; setupReslistFontPB(); // Style sheet qssFile = prefs.qssFile; if (qssFile.isEmpty()) { stylesheetPB->setText(tr("Choose")); } else { string nm = path_getsimple(qs2path(qssFile)); stylesheetPB->setText(path2qs(nm)); } darkMode = prefs.darkMode; snipCssFile = prefs.snipCssFile; if (snipCssFile.isEmpty()) { snipCssPB->setText(tr("Choose")); } else { string nm = path_getsimple(qs2path(snipCssFile)); snipCssPB->setText(path2qs(nm)); } snipwMaxLenSB->setValue(prefs.snipwMaxLength); snipwByPageCB->setChecked(prefs.snipwSortByPage); alwaysSnippetsCB->setChecked(prefs.alwaysSnippets); paraFormat = prefs.reslistformat; headerText = prefs.reslistheadertext; // Stemming language combobox stemLangCMB->clear(); stemLangCMB->addItem(g_stringNoStem); stemLangCMB->addItem(g_stringAllStem); vector langs; if (!getStemLangs(langs)) { QMessageBox::warning(0, "Recoll", tr("error retrieving stemming languages")); } int cur = prefs.queryStemLang == "" ? 0 : 1; for (vector::const_iterator it = langs.begin(); it != langs.end(); it++) { stemLangCMB-> addItem(QString::fromUtf8(it->c_str(), it->length())); if (cur == 0 && !strcmp((const char*)prefs.queryStemLang.toUtf8(), it->c_str())) { cur = stemLangCMB->count(); } } stemLangCMB->setCurrentIndex(cur); autoPhraseCB->setChecked(prefs.ssearchAutoPhrase); autoPThreshSB->setValue(prefs.ssearchAutoPhraseThreshPC); buildAbsCB->setChecked(prefs.queryBuildAbstract); replAbsCB->setEnabled(prefs.queryBuildAbstract); replAbsCB->setChecked(prefs.queryReplaceAbstract); autoSuffsCB->setChecked(prefs.autoSuffsEnable); autoSuffsLE->setText(prefs.autoSuffs); synFile = prefs.synFile; if (synFile.isEmpty()) { synFileCB->setChecked(false); synFileCB->setEnabled(false); synFilePB->setText(tr("Choose")); } else { synFileCB->setChecked(prefs.synFileEnable); synFileCB->setEnabled(true); string nm = path_getsimple(qs2path(synFile)); synFilePB->setText(path2qs(nm)); } // Initialize the extra indexes listboxes idxLV->clear(); for (const auto& dbdir : prefs.allExtraDbs) { QListWidgetItem *item = new QListWidgetItem(path2qs(dbdir), idxLV); if (item) item->setCheckState(Qt::Unchecked); } for (const auto& dbdir : prefs.activeExtraDbs) { auto items = idxLV->findItems(path2qs(dbdir), Qt::MatchFixedString|Qt::MatchCaseSensitive); for (auto& entry : items) { entry->setCheckState(Qt::Checked); } } idxLV->sortItems(); readShortcuts(); setSSButState(); } void UIPrefsDialog::readShortcutsInternal(const QStringList& sl) { shortcutsTB->setRowCount(0); shortcutsTB->setColumnCount(4); shortcutsTB->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Context"))); shortcutsTB->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Description"))); shortcutsTB->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("Shortcut"))); shortcutsTB->setHorizontalHeaderItem(3, new QTableWidgetItem(tr("Default"))); int row = 0; m_scids.clear(); for (int i = 0; i < sl.size();) { LOGDEB0("UIPrefsDialog::readShortcuts: inserting row " << qs2utf8s(sl.at(i)) << " " << qs2utf8s(sl.at(i+1)) << " " << qs2utf8s(sl.at(i+2)) << " " << qs2utf8s(sl.at(i+3)) << "\n"); shortcutsTB->insertRow(row); m_scids.push_back(sl.at(i++)); shortcutsTB->setItem(row, 0, new QTableWidgetItem(sl.at(i++))); shortcutsTB->setItem(row, 1, new QTableWidgetItem(sl.at(i++))); auto ed = new QKeySequenceEdit(QKeySequence(sl.at(i++))); shortcutsTB->setCellWidget(row, 2, ed); shortcutsTB->setItem(row, 3, new QTableWidgetItem(sl.at(i++))); row++; } shortcutsTB->resizeColumnsToContents(); shortcutsTB->horizontalHeader()->setStretchLastSection(true); } void UIPrefsDialog::readShortcuts() { readShortcutsInternal(SCBase::scBase().getAll()); } void UIPrefsDialog::resetShortcuts() { readShortcutsInternal(SCBase::scBase().getAllDefaults()); } void UIPrefsDialog::storeShortcuts() { SCBase& scbase = SCBase::scBase(); QStringList slout; for (int row = 0; row < shortcutsTB->rowCount(); row++) { QString dflt = shortcutsTB->item(row, 0)->text(); QString ctxt = shortcutsTB->item(row, 1)->text(); auto qsce = (QKeySequenceEdit*)(shortcutsTB->cellWidget(row, 2)); QString val = qsce->keySequence().toString(); scbase.set(m_scids[row], dflt, ctxt, val); } scbase.store(); } void UIPrefsDialog::setupReslistFontPB() { QString s; if (reslistFontFamily.length() == 0) { reslistFontPB->setText(tr("Default QtWebkit font")); } else { reslistFontPB->setText(reslistFontFamily + "-" + s.setNum(reslistFontSize)); } } void UIPrefsDialog::accept() { emit delPTrans(); // Most values are stored in the prefs struct. Some rarely used // ones go directly through the settings QSettings settings; prefs.noBeeps = noBeepsCB->isChecked(); prefs.ssearchNoComplete = ssNoCompleteCB->isChecked(); prefs.showcompleterhitcounts = showcompleterhitcountsCB->isChecked(); prefs.ssearchStartOnComplete = ssSearchOnCompleteCB->isChecked(); if (ssearchTypCMB->currentIndex() == 4) { prefs.ssearchTypSav = true; // prefs.ssearchTyp will be set from the current value when // exiting the program } else { prefs.ssearchTypSav = false; prefs.ssearchTyp = ssearchTypCMB->currentIndex(); } if (filterMN_RB->isChecked()) { prefs.filterCtlStyle = PrefsPack::FCS_MN; } else if (filterCMB_RB->isChecked()) { prefs.filterCtlStyle = PrefsPack::FCS_CMB; } else { prefs.filterCtlStyle = PrefsPack::FCS_BT; } m_mainWindow->setFilterCtlStyle(prefs.filterCtlStyle); prefs.respagesize = pageLenSB->value(); prefs.idxFilterTreeDepth = idxTreeDepthSB->value(); prefs.historysize = maxHistSizeSB->value(); prefs.collapseDuplicates = collapseDupsCB->isChecked(); prefs.maxhltextkbs = maxHLTSB->value(); prefs.qtermstyle = qtermStyleCMB->currentText(); prefs.abssep = abssepLE->text(); prefs.reslistdateformat = qs2utf8s(dateformatLE->text()); prefs.reslistfontfamily = reslistFontFamily; prefs.reslistfontsize = reslistFontSize; prefs.darkMode = darkMode; prefs.qssFile = qssFile; prefs.snipCssFile = snipCssFile; prefs.reslistformat = paraFormat; prefs.reslistheadertext = headerText; if (prefs.reslistformat.trimmed().isEmpty()) { prefs.reslistformat = prefs.dfltResListFormat; paraFormat = prefs.reslistformat; } prefs.snipwMaxLength = snipwMaxLenSB->value(); prefs.snipwSortByPage = snipwByPageCB->isChecked(); prefs.alwaysSnippets = alwaysSnippetsCB->isChecked(); prefs.creslistformat = (const char*)prefs.reslistformat.toUtf8(); if (stemLangCMB->currentIndex() == 0) { prefs.queryStemLang = ""; } else if (stemLangCMB->currentIndex() == 1) { prefs.queryStemLang = "ALL"; } else { prefs.queryStemLang = stemLangCMB->currentText(); } prefs.ssearchAutoPhrase = autoPhraseCB->isChecked(); prefs.ssearchAutoPhraseThreshPC = autoPThreshSB->value(); prefs.queryBuildAbstract = buildAbsCB->isChecked(); prefs.queryReplaceAbstract = buildAbsCB->isChecked() && replAbsCB->isChecked(); prefs.startWithAdvSearchOpen = initStartAdvCB->isChecked(); prefs.keepSort = keepSortCB->isChecked(); prefs.noToolbars = noToolbarsCB->isChecked(); m_mainWindow->setupToolbars(); prefs.noMenuBar = noMenuBarCB->isChecked(); m_mainWindow->setupMenus(); prefs.noSSTypCMB = noSSTypCMBCB->isChecked(); prefs.resTableTextNoShift = restabShowTxtNoShiftRB->isChecked(); prefs.resTableNoHoverMeta = resTableNoHoverMetaCB->isChecked(); prefs.noResTableHeader = noResTableHeaderCB->isChecked(); prefs.showResTableVHeader = showResTableVHeaderCB->isChecked(); prefs.noResTableRowJumpSC = noRowJumpShortcutsCB->isChecked(); prefs.noStatusBar = noStatusBarCB->isChecked(); m_mainWindow->setupStatusBar(); prefs.noClearSearch = noClearSearchCB->isChecked(); m_mainWindow->sSearch->setupButtons(); prefs.showTrayIcon = showTrayIconCB->isChecked(); m_mainWindow->enableTrayIcon(prefs.showTrayIcon); prefs.closeToTray = closeToTrayCB->isChecked(); prefs.trayMessages = trayMessagesCB->isChecked(); prefs.wholeuiscale = wholeuiscaleSB->value(); prefs.autoSpell = autoSpellCB->isChecked(); prefs.autoSpellMaxDist = autoSpellMaxDistSB->value(); prefs.showcompleterhitcounts = showcompleterhitcountsCB->isChecked(); prefs.ssearchCompleterHistCnt = ssearchCompleterHistCntSB->value(); prefs.sidefilterdateformat = sidefilterdateformatLE->text(); prefs.ignwilds = ignwildsCB->isChecked(); prefs.pvmaxfldlen = pvmaxfldlenSB->value(); prefs.singleapp = singleappCB->isChecked(); prefs.ssearchCompletePassive = ssearchCompletePassiveCB->isChecked(); prefs.previewLinesOverAnchor = previewLinesOverAnchorSB->value(); prefs.uilanguage = uilanguageCMB->currentData().toString(); prefs.colorscheme = colorschemeCMB->currentIndex(); prefs.previewdarkbg = previewdarkbgCB->isChecked(); /*INSERTHERE_ACCEPT*/ // -1 is the qxtconf... predefined value to show the dialog prefs.showTempFileWarning = showTempFileWarningCB->isChecked() ? -1 : 1; settings.setValue("anchorSpcHack", anchorTamilHackCB->isChecked()); prefs.previewHtml = previewHtmlCB->isChecked(); prefs.previewActiveLinks = previewActiveLinksCB->isChecked(); if (plainBRRB->isChecked()) { prefs.previewPlainPre = PrefsPack::PP_BR; } else if (plainPRERB->isChecked()) { prefs.previewPlainPre = PrefsPack::PP_PRE; } else { prefs.previewPlainPre = PrefsPack::PP_PREWRAP; } prefs.syntAbsLen = syntlenSB->value(); prefs.syntAbsCtx = syntctxSB->value(); prefs.autoSuffsEnable = autoSuffsCB->isChecked(); prefs.autoSuffs = autoSuffsLE->text(); prefs.synFileEnable = synFileCB->isChecked(); prefs.synFile = synFile; prefs.allExtraDbs.clear(); prefs.activeExtraDbs.clear(); for (int i = 0; i < idxLV->count(); i++) { QListWidgetItem *item = idxLV->item(i); if (item) { prefs.allExtraDbs.push_back(qs2path(item->text())); if (item->checkState() == Qt::Checked) { prefs.activeExtraDbs.push_back(qs2path(item->text())); } } } rwSettings(true); storeShortcuts(); string reason; maybeOpenDb(reason, true); emit uiprefsDone(); QDialog::accept(); } void UIPrefsDialog::editParaFormat() { EditDialog dialog(this); dialog.setWindowTitle(tr("Result list paragraph format " "(erase all to reset to default)")); dialog.plainTextEdit->setPlainText(paraFormat); int result = dialog.exec(); if (result == QDialog::Accepted) paraFormat = dialog.plainTextEdit->toPlainText(); } void UIPrefsDialog::editHeaderText() { EditDialog dialog(this); dialog.setWindowTitle(tr("Result list header (default is empty)")); dialog.plainTextEdit->setPlainText(headerText); int result = dialog.exec(); if (result == QDialog::Accepted) headerText = dialog.plainTextEdit->toPlainText(); } void UIPrefsDialog::reject() { emit delPTrans(); setFromPrefs(); QDialog::reject(); } void UIPrefsDialog::setStemLang(const QString& lang) { int cur = 0; if (lang == "") { cur = 0; } else if (lang == "ALL") { cur = 1; } else { for (int i = 1; i < stemLangCMB->count(); i++) { if (lang == stemLangCMB->itemText(i)) { cur = i; break; } } } stemLangCMB->setCurrentIndex(cur); } void UIPrefsDialog::showFontDialog() { bool ok; QFont font; if (prefs.reslistfontfamily.length()) { font.setFamily(prefs.reslistfontfamily); } font.setPointSize(prefs.reslistfontsize); font = QFontDialog::getFont(&ok, font, this); if (ok) { // We used to check if the default font was set, in which case // we erased the preference, but this would result in letting // webkit make a choice of default font which it usually seems // to do wrong. So now always set the font. There is still a // way for the user to let webkit choose the default though: // click reset, then the font name and size will be empty. reslistFontFamily = font.family(); reslistFontSize = font.pointSize(); setupReslistFontPB(); } } void UIPrefsDialog::setSSButState() { resetSSPB->setEnabled(!qssFile.isEmpty()); if (qssFile.isEmpty()) { stylesheetPB->setText(tr("Choose QSS File")); } else { stylesheetPB->setText(path2qs(path_getsimple(qs2path(qssFile)))); } } void UIPrefsDialog::showStylesheetDialog() { auto newfn = myGetFileName(false, "Select stylesheet file", true); if (!newfn.isEmpty()) { qssFile = newfn; darkMode = false; } setSSButState(); } void UIPrefsDialog::resetStylesheet() { qssFile.clear(); darkMode = false; setSSButState(); } void UIPrefsDialog::showSnipCssDialog() { snipCssFile = myGetFileName(false, "Select snippets window CSS file", true); string nm = path_getsimple(qs2path(snipCssFile)); snipCssPB->setText(path2qs(nm)); } void UIPrefsDialog::resetSnipCss() { snipCssFile = ""; snipCssPB->setText(tr("Choose")); } void UIPrefsDialog::showSynFileDialog() { synFile = myGetFileName(false, "Select synonyms file", true); if (synFile.isEmpty()) { synFileCB->setChecked(false); synFileCB->setEnabled(false); synFilePB->setText(tr("Choose")); return; } else { synFileCB->setChecked(prefs.synFileEnable); synFileCB->setEnabled(true); string nm = path_getsimple(qs2path(synFile)); synFilePB->setText(path2qs(nm)); } string nm = path_getsimple(qs2path(synFile)); synFilePB->setText(path2qs(nm)); } void UIPrefsDialog::resetReslistFont() { reslistFontFamily = ""; reslistFontSize = QFont().pointSize(); setupReslistFontPB(); } void UIPrefsDialog::showViewAction() { if (m_viewAction == 0) { m_viewAction = new ViewAction(0); } else { // Close and reopen, in hope that makes us visible... m_viewAction->close(); } m_viewAction->show(); } void UIPrefsDialog::showViewAction(const QString& mt) { showViewAction(); m_viewAction->selectMT(mt); } //////////////////////////////////////////// // External / extra search indexes setup void UIPrefsDialog::extradDbSelectChanged() { if (idxLV->selectedItems().size() <= 1) ptransPB->setEnabled(true); else ptransPB->setEnabled(false); } void UIPrefsDialog::extraDbEditPtrans() { std::string dbdir; if (idxLV->selectedItems().size() == 0) { // No extra index selected: work on default index dbdir = theconfig->getDbDir(); } else if (idxLV->selectedItems().size() == 1) { QListWidgetItem *item = idxLV->selectedItems()[0]; QString qd = item->data(Qt::DisplayRole).toString(); dbdir = qs2path(qd); } else { QMessageBox::warning(0, "Recoll", tr("At most one index should be selected")); return; } dbdir = path_canon(dbdir); emit showPTrans(path2qs(dbdir)); } void UIPrefsDialog::togExtraDbPB_clicked() { for (int i = 0; i < idxLV->count(); i++) { QListWidgetItem *item = idxLV->item(i); if (item->isSelected()) { if (item->checkState() == Qt::Checked) { item->setCheckState(Qt::Unchecked); } else { item->setCheckState(Qt::Checked); } } } } void UIPrefsDialog::actAllExtraDbPB_clicked() { for (int i = 0; i < idxLV->count(); i++) { QListWidgetItem *item = idxLV->item(i); item->setCheckState(Qt::Checked); } } void UIPrefsDialog::unacAllExtraDbPB_clicked() { for (int i = 0; i < idxLV->count(); i++) { QListWidgetItem *item = idxLV->item(i); item->setCheckState(Qt::Unchecked); } } void UIPrefsDialog::delExtraDbPB_clicked() { QList items = idxLV->selectedItems(); for (QList::iterator it = items.begin(); it != items.end(); it++) { delete *it; } } void UIPrefsDialog::showTrayIconCB_clicked() { if (!showTrayIconCB->checkState()) { closeToTrayCB->setChecked(false); trayMessagesCB->setChecked(false); } closeToTrayCB->setEnabled(showTrayIconCB->checkState()); trayMessagesCB->setEnabled(showTrayIconCB->checkState()); } /** * Browse to add another index. * We do a textual comparison to check for duplicates, except for * the main db for which we check inode numbers. */ void UIPrefsDialog::addExtraDbPB_clicked() { QString input = myGetFileName(true, tr("Select recoll config directory or " "xapian index directory " "(e.g.: /home/me/.recoll or " "/home/me/.recoll/xapiandb)")); if (input.isEmpty()) return; string dbdir = qs2path(input); if (path_exists(path_cat(dbdir, "recoll.conf"))) { // Chosen dir is config dir. RclConfig conf(&dbdir); dbdir = conf.getDbDir(); if (dbdir.empty()) { QMessageBox::warning( 0, "Recoll", tr("The selected directory looks like a Recoll " "configuration directory but the configuration " "could not be read")); return; } } LOGDEB("ExtraDbDial: got: [" << (dbdir) << "]\n"); bool stripped; if (!Rcl::Db::testDbDir(dbdir, &stripped)) { QMessageBox::warning(0, "Recoll", tr("The selected directory does not " "appear to be a Xapian index")); return; } if (o_index_stripchars != stripped) { QMessageBox::warning(0, "Recoll", tr("Can't add index with different case/diacritics" " stripping option.")); return; } if (path_samefile(dbdir, theconfig->getDbDir())) { QMessageBox::warning(0, "Recoll", tr("This is the main/local index!")); return; } for (int i = 0; i < idxLV->count(); i++) { QListWidgetItem *item = idxLV->item(i); string existingdir = qs2path(item->text()); if (path_samefile(dbdir, existingdir)) { QMessageBox::warning( 0, "Recoll", tr("The selected directory is already in the " "index list")); return; } } QListWidgetItem *item = new QListWidgetItem(path2qs(dbdir), idxLV); item->setCheckState(Qt::Checked); idxLV->sortItems(); } recoll-1.43.12/qtgui/singleapplication/0000755000175000017500000000000015121730573017306 5ustar dockesdockesrecoll-1.43.12/qtgui/singleapplication/README.recoll0000644000175000017500000000012615121730573021444 0ustar dockesdockesSingleApplication https://github.com/itay-grudev/SingleApplication Imported at v3.5.4 recoll-1.43.12/qtgui/singleapplication/singleapplication_p.h0000644000175000017500000000745215121730573023513 0ustar dockesdockes// Copyright (c) Itay Grudev 2015 - 2023 // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // Permission is not granted to use this software or any of the associated files // as sample data for the purposes of building machine learning models. // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // // W A R N I N G !!! // ----------------- // // This file is not part of the SingleApplication API. It is used purely as an // implementation detail. This header file may change from version to // version without notice, or may even be removed. // #ifndef SINGLEAPPLICATION_P_H #define SINGLEAPPLICATION_P_H #include #include #include #include #include "singleapplication.h" struct InstancesInfo { bool primary; quint32 secondary; qint64 primaryPid; char primaryUser[128]; quint16 checksum; // Must be the last field }; struct ConnectionInfo { qint64 msgLen = 0; quint32 instanceId = 0; quint8 stage = 0; }; class SingleApplicationPrivate : public QObject { Q_OBJECT public: enum ConnectionType : quint8 { InvalidConnection = 0, NewInstance = 1, SecondaryInstance = 2, Reconnect = 3 }; enum ConnectionStage : quint8 { StageInitHeader = 0, StageInitBody = 1, StageConnectedHeader = 2, StageConnectedBody = 3, }; Q_DECLARE_PUBLIC(SingleApplication) SingleApplicationPrivate( SingleApplication *q_ptr ); ~SingleApplicationPrivate() override; static QString getUsername(); void genBlockServerName(); void initializeMemoryBlock() const; void startPrimary(); void startSecondary(); bool connectToPrimary( int msecs, ConnectionType connectionType ); quint16 blockChecksum() const; qint64 primaryPid() const; QString primaryUser() const; bool isFrameComplete(QLocalSocket *sock); void readMessageHeader(QLocalSocket *socket, ConnectionStage nextStage); void readInitMessageBody(QLocalSocket *socket); void writeAck(QLocalSocket *sock); bool writeConfirmedFrame(int msecs, const QByteArray &msg); bool writeConfirmedMessage(int msecs, const QByteArray &msg, SingleApplication::SendMode sendMode = SingleApplication::NonBlocking); static void randomSleep(); void addAppData(const QString &data); QStringList appData() const; SingleApplication *q_ptr; QSharedMemory *memory; QLocalSocket *socket; QLocalServer *server; quint32 instanceNumber; QString blockServerName; SingleApplication::Options options; QMap connectionMap; QStringList appDataList; public Q_SLOTS: void slotConnectionEstablished(); void slotDataAvailable( QLocalSocket*, quint32 ); void slotClientConnectionClosed( QLocalSocket*, quint32 ); }; #endif // SINGLEAPPLICATION_P_H recoll-1.43.12/qtgui/singleapplication/singleapplication_p.cpp0000644000175000017500000004122415121730573024041 0ustar dockesdockes// Copyright (c) Itay Grudev 2015 - 2023 // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // Permission is not granted to use this software or any of the associated files // as sample data for the purposes of building machine learning models. // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // // W A R N I N G !!! // ----------------- // // This file is not part of the SingleApplication API. It is used purely as an // implementation detail. This header file may change from version to // version without notice, or may even be removed. // #include #include #include #include #include #include #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) #include #else #include #endif #include "singleapplication.h" #include "singleapplication_p.h" #ifdef Q_OS_UNIX #include #include #include #endif #ifdef Q_OS_WIN #ifndef NOMINMAX #define NOMINMAX 1 #endif #include #include #endif SingleApplicationPrivate::SingleApplicationPrivate( SingleApplication *q_ptr ) : q_ptr( q_ptr ) { server = nullptr; socket = nullptr; memory = nullptr; instanceNumber = 0; } SingleApplicationPrivate::~SingleApplicationPrivate() { if( socket != nullptr ){ socket->close(); delete socket; } if( memory != nullptr ){ memory->lock(); auto *inst = static_cast(memory->data()); if( server != nullptr ){ server->close(); delete server; inst->primary = false; inst->primaryPid = -1; inst->primaryUser[0] = '\0'; inst->checksum = blockChecksum(); } memory->unlock(); delete memory; } } QString SingleApplicationPrivate::getUsername() { #ifdef Q_OS_WIN wchar_t username[UNLEN + 1]; // Specifies size of the buffer on input DWORD usernameLength = UNLEN + 1; if( GetUserNameW( username, &usernameLength ) ) return QString::fromWCharArray( username ); #if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) return QString::fromLocal8Bit( qgetenv( "USERNAME" ) ); #else return qEnvironmentVariable( "USERNAME" ); #endif #endif #ifdef Q_OS_UNIX QString username; uid_t uid = geteuid(); struct passwd *pw = getpwuid( uid ); if( pw ) username = QString::fromLocal8Bit( pw->pw_name ); if ( username.isEmpty() ){ #if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) username = QString::fromLocal8Bit( qgetenv( "USER" ) ); #else username = qEnvironmentVariable( "USER" ); #endif } return username; #endif } void SingleApplicationPrivate::genBlockServerName() { #ifdef Q_OS_MACOS // Maximum key size on macOS is PSHMNAMLEN (31). QCryptographicHash appData( QCryptographicHash::Md5 ); #else QCryptographicHash appData( QCryptographicHash::Sha256 ); #endif #if QT_VERSION < QT_VERSION_CHECK(6, 3, 0) appData.addData( "SingleApplication", 17 ); #else appData.addData( QByteArrayView{"SingleApplication"} ); #endif appData.addData( QCoreApplication::applicationName().toUtf8() ); appData.addData( QCoreApplication::organizationName().toUtf8() ); appData.addData( QCoreApplication::organizationDomain().toUtf8() ); if ( ! appDataList.isEmpty() ) appData.addData( appDataList.join(QString()).toUtf8() ); if( ! (options & SingleApplication::Mode::ExcludeAppVersion) ){ appData.addData( QCoreApplication::applicationVersion().toUtf8() ); } if( ! (options & SingleApplication::Mode::ExcludeAppPath) ){ #if defined(Q_OS_WIN) appData.addData( QCoreApplication::applicationFilePath().toLower().toUtf8() ); #elif defined(Q_OS_LINUX) // If the application is running as an AppImage then the APPIMAGE env var should be used // instead of applicationPath() as each instance is launched with its own executable path const QByteArray appImagePath = qgetenv( "APPIMAGE" ); if( appImagePath.isEmpty() ){ // Not running as AppImage: use path to executable file appData.addData( QCoreApplication::applicationFilePath().toUtf8() ); } else { // Running as AppImage: Use absolute path to AppImage file appData.addData( appImagePath ); }; #else appData.addData( QCoreApplication::applicationFilePath().toUtf8() ); #endif } // User level block requires a user specific data in the hash if( options & SingleApplication::Mode::User ){ appData.addData( getUsername().toUtf8() ); } // Replace the backslash in RFC 2045 Base64 [a-zA-Z0-9+/=] to comply with // server naming requirements. blockServerName = QString::fromUtf8(appData.result().toBase64().replace("/", "_")); } void SingleApplicationPrivate::initializeMemoryBlock() const { auto *inst = static_cast( memory->data() ); inst->primary = false; inst->secondary = 0; inst->primaryPid = -1; inst->primaryUser[0] = '\0'; inst->checksum = blockChecksum(); } void SingleApplicationPrivate::startPrimary() { // Reset the number of connections auto *inst = static_cast ( memory->data() ); inst->primary = true; inst->primaryPid = QCoreApplication::applicationPid(); qstrncpy( inst->primaryUser, getUsername().toUtf8().data(), sizeof(inst->primaryUser) ); inst->checksum = blockChecksum(); instanceNumber = 0; // Successful creation means that no main process exists // So we start a QLocalServer to listen for connections QLocalServer::removeServer( blockServerName ); server = new QLocalServer(); // Restrict access to the socket according to the // SingleApplication::Mode::User flag on User level or no restrictions if( options & SingleApplication::Mode::User ){ server->setSocketOptions( QLocalServer::UserAccessOption ); } else { server->setSocketOptions( QLocalServer::WorldAccessOption ); } server->listen( blockServerName ); QObject::connect( server, &QLocalServer::newConnection, this, &SingleApplicationPrivate::slotConnectionEstablished ); } void SingleApplicationPrivate::startSecondary() { auto *inst = static_cast ( memory->data() ); inst->secondary += 1; inst->checksum = blockChecksum(); instanceNumber = inst->secondary; } bool SingleApplicationPrivate::connectToPrimary( int msecs, ConnectionType connectionType ) { QElapsedTimer time; time.start(); // Connect to the Local Server of the Primary Instance if not already // connected. if( socket == nullptr ){ socket = new QLocalSocket(); } if( socket->state() == QLocalSocket::ConnectedState ) return true; if( socket->state() != QLocalSocket::ConnectedState ){ while( true ){ randomSleep(); if( socket->state() != QLocalSocket::ConnectingState ) socket->connectToServer( blockServerName ); if( socket->state() == QLocalSocket::ConnectingState ){ socket->waitForConnected( static_cast(msecs - time.elapsed()) ); } // If connected break out of the loop if( socket->state() == QLocalSocket::ConnectedState ) break; // If elapsed time since start is longer than the method timeout return if( time.elapsed() >= msecs ) return false; } } // Initialisation message according to the SingleApplication protocol QByteArray initMsg; QDataStream writeStream(&initMsg, QIODevice::WriteOnly); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) writeStream.setVersion(QDataStream::Qt_5_6); #endif writeStream << blockServerName.toLatin1(); writeStream << static_cast(connectionType); writeStream << instanceNumber; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) quint16 checksum = qChecksum(QByteArray(initMsg.constData(), static_cast(initMsg.length()))); #else quint16 checksum = qChecksum(initMsg.constData(), static_cast(initMsg.length())); #endif writeStream << checksum; return writeConfirmedMessage( static_cast(msecs - time.elapsed()), initMsg ); } void SingleApplicationPrivate::writeAck( QLocalSocket *sock ) { sock->putChar('\n'); } bool SingleApplicationPrivate::writeConfirmedMessage (int msecs, const QByteArray &msg, SingleApplication::SendMode sendMode) { QElapsedTimer time; time.start(); // Frame 1: The header indicates the message length that follows QByteArray header; QDataStream headerStream(&header, QIODevice::WriteOnly); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) headerStream.setVersion(QDataStream::Qt_5_6); #endif headerStream << static_cast ( msg.length() ); if( ! writeConfirmedFrame( static_cast(msecs - time.elapsed()), header )) return false; // Frame 2: The message const bool result = writeConfirmedFrame( static_cast(msecs - time.elapsed()), msg ); // Block if needed if (socket && sendMode == SingleApplication::BlockUntilPrimaryExit) socket->waitForDisconnected(-1); return result; } bool SingleApplicationPrivate::writeConfirmedFrame( int msecs, const QByteArray &msg ) { socket->write( msg ); socket->flush(); bool result = socket->waitForReadyRead( msecs ); // await ack byte if (result) { socket->read( 1 ); return true; } return false; } quint16 SingleApplicationPrivate::blockChecksum() const { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) quint16 checksum = qChecksum(QByteArray(static_cast(memory->constData()), offsetof(InstancesInfo, checksum))); #else quint16 checksum = qChecksum(static_cast(memory->constData()), offsetof(InstancesInfo, checksum)); #endif return checksum; } qint64 SingleApplicationPrivate::primaryPid() const { qint64 pid; memory->lock(); auto *inst = static_cast( memory->data() ); pid = inst->primaryPid; memory->unlock(); return pid; } QString SingleApplicationPrivate::primaryUser() const { QByteArray username; memory->lock(); auto *inst = static_cast( memory->data() ); username = inst->primaryUser; memory->unlock(); return QString::fromUtf8( username ); } /** * @brief Executed when a connection has been made to the LocalServer */ void SingleApplicationPrivate::slotConnectionEstablished() { QLocalSocket *nextConnSocket = server->nextPendingConnection(); connectionMap.insert(nextConnSocket, ConnectionInfo()); QObject::connect(nextConnSocket, &QLocalSocket::aboutToClose, this, [nextConnSocket, this](){ auto &info = connectionMap[nextConnSocket]; this->slotClientConnectionClosed( nextConnSocket, info.instanceId ); } ); QObject::connect(nextConnSocket, &QLocalSocket::disconnected, nextConnSocket, &QLocalSocket::deleteLater); QObject::connect(nextConnSocket, &QLocalSocket::destroyed, this, [nextConnSocket, this](){ connectionMap.remove(nextConnSocket); } ); QObject::connect(nextConnSocket, &QLocalSocket::readyRead, this, [nextConnSocket, this](){ auto &info = connectionMap[nextConnSocket]; switch(info.stage){ case StageInitHeader: readMessageHeader( nextConnSocket, StageInitBody ); break; case StageInitBody: readInitMessageBody(nextConnSocket); break; case StageConnectedHeader: readMessageHeader( nextConnSocket, StageConnectedBody ); break; case StageConnectedBody: this->slotDataAvailable( nextConnSocket, info.instanceId ); break; default: break; }; } ); } void SingleApplicationPrivate::readMessageHeader( QLocalSocket *sock, SingleApplicationPrivate::ConnectionStage nextStage ) { if (!connectionMap.contains( sock )){ return; } if( sock->bytesAvailable() < ( qint64 )sizeof( quint64 ) ){ return; } QDataStream headerStream( sock ); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) headerStream.setVersion( QDataStream::Qt_5_6 ); #endif // Read the header to know the message length quint64 msgLen = 0; headerStream >> msgLen; ConnectionInfo &info = connectionMap[sock]; info.stage = nextStage; info.msgLen = msgLen; writeAck( sock ); } bool SingleApplicationPrivate::isFrameComplete( QLocalSocket *sock ) { if (!connectionMap.contains( sock )){ return false; } ConnectionInfo &info = connectionMap[sock]; if( sock->bytesAvailable() < ( qint64 )info.msgLen ){ return false; } return true; } void SingleApplicationPrivate::readInitMessageBody( QLocalSocket *sock ) { Q_Q(SingleApplication); if( !isFrameComplete( sock ) ) return; // Read the message body QByteArray msgBytes = sock->readAll(); QDataStream readStream(msgBytes); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) readStream.setVersion( QDataStream::Qt_5_6 ); #endif // server name QByteArray latin1Name; readStream >> latin1Name; // connection type ConnectionType connectionType = InvalidConnection; quint8 connTypeVal = InvalidConnection; readStream >> connTypeVal; connectionType = static_cast ( connTypeVal ); // instance id quint32 instanceId = 0; readStream >> instanceId; // checksum quint16 msgChecksum = 0; readStream >> msgChecksum; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) const quint16 actualChecksum = qChecksum(QByteArray(msgBytes.constData(), static_cast(msgBytes.length() - sizeof(quint16)))); #else const quint16 actualChecksum = qChecksum(msgBytes.constData(), static_cast(msgBytes.length() - sizeof(quint16))); #endif bool isValid = readStream.status() == QDataStream::Ok && QLatin1String(latin1Name) == blockServerName && msgChecksum == actualChecksum; if( !isValid ){ sock->close(); return; } ConnectionInfo &info = connectionMap[sock]; info.instanceId = instanceId; info.stage = StageConnectedHeader; if( connectionType == NewInstance || ( connectionType == SecondaryInstance && options & SingleApplication::Mode::SecondaryNotification ) ) { Q_EMIT q->instanceStarted(); } writeAck( sock ); } void SingleApplicationPrivate::slotDataAvailable( QLocalSocket *dataSocket, quint32 instanceId ) { Q_Q(SingleApplication); if ( !isFrameComplete( dataSocket ) ) return; const QByteArray message = dataSocket->readAll(); writeAck( dataSocket ); ConnectionInfo &info = connectionMap[dataSocket]; info.stage = StageConnectedHeader; Q_EMIT q->receivedMessage( instanceId, message); } void SingleApplicationPrivate::slotClientConnectionClosed( QLocalSocket *closedSocket, quint32 instanceId ) { if( closedSocket->bytesAvailable() > 0 ) slotDataAvailable( closedSocket, instanceId ); } void SingleApplicationPrivate::randomSleep() { #if QT_VERSION >= QT_VERSION_CHECK( 5, 10, 0 ) QThread::msleep( QRandomGenerator::global()->bounded( 8u, 18u )); #else qsrand( QDateTime::currentMSecsSinceEpoch() % std::numeric_limits::max() ); QThread::msleep( qrand() % 11 + 8); #endif } void SingleApplicationPrivate::addAppData(const QString &data) { appDataList.push_back(data); } QStringList SingleApplicationPrivate::appData() const { return appDataList; } recoll-1.43.12/qtgui/singleapplication/LICENSE0000644000175000017500000000266515121730573020324 0ustar dockesdockesCopyright (c) Itay Grudev 2015 - 2023 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: Permission is not granted to distribute or redistribute this software, the derivative works of this software, or any of its associated files that was generated in any approach (including building machine learning models), for any purpose, without attributing the source material by including its license. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Note: Some of the examples include code not distributed under the terms of the MIT License. recoll-1.43.12/qtgui/singleapplication/singleapplication.cpp0000644000175000017500000002260315121730573023522 0ustar dockesdockes// Copyright (c) Itay Grudev 2015 - 2023 // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // Permission is not granted to use this software or any of the associated files // as sample data for the purposes of building machine learning models. // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. #include #include #include #include #include "singleapplication.h" #include "singleapplication_p.h" /** * @brief Constructor. Checks and fires up LocalServer or closes the program * if another instance already exists * @param argc * @param argv * @param allowSecondary Whether to enable secondary instance support * @param options Optional flags to toggle specific behaviour * @param timeout Maximum time blocking functions are allowed during app load */ SingleApplication::SingleApplication( int &argc, char *argv[], bool allowSecondary, Options options, int timeout, const QString &userData ) : app_t( argc, argv ), d_ptr( new SingleApplicationPrivate( this ) ) { Q_D( SingleApplication ); #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) // On Android and iOS since the library is not supported fallback to // standard QApplication behaviour by simply returning at this point. qWarning() << "SingleApplication is not supported on Android and iOS systems."; return; #endif // Store the current mode of the program d->options = options; // Add any unique user data if ( ! userData.isEmpty() ) d->addAppData( userData ); // Generating an application ID used for identifying the shared memory // block and QLocalServer d->genBlockServerName(); // To mitigate QSharedMemory issues with large amount of processes // attempting to attach at the same time SingleApplicationPrivate::randomSleep(); #ifdef Q_OS_UNIX // By explicitly attaching it and then deleting it we make sure that the // memory is deleted even after the process has crashed on Unix. #if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) d->memory = new QSharedMemory( QNativeIpcKey( d->blockServerName ) ); #else d->memory = new QSharedMemory( d->blockServerName ); #endif d->memory->attach(); delete d->memory; #endif // Guarantee thread safe behaviour with a shared memory block. #if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) d->memory = new QSharedMemory( QNativeIpcKey( d->blockServerName ) ); #else d->memory = new QSharedMemory( d->blockServerName ); #endif // Create a shared memory block if( d->memory->create( sizeof( InstancesInfo ) )){ // Initialize the shared memory block if( ! d->memory->lock() ){ qCritical() << "SingleApplication: Unable to lock memory block after create."; abortSafely(); } d->initializeMemoryBlock(); } else { if( d->memory->error() == QSharedMemory::AlreadyExists ){ // Attempt to attach to the memory segment if( ! d->memory->attach() ){ qCritical() << "SingleApplication: Unable to attach to shared memory block."; abortSafely(); } if( ! d->memory->lock() ){ qCritical() << "SingleApplication: Unable to lock memory block after attach."; abortSafely(); } } else { qCritical() << "SingleApplication: Unable to create block."; abortSafely(); } } auto *inst = static_cast( d->memory->data() ); QElapsedTimer time; time.start(); // Make sure the shared memory block is initialised and in consistent state while( true ){ // If the shared memory block's checksum is valid continue if( d->blockChecksum() == inst->checksum ) break; // If more than 5s have elapsed, assume the primary instance crashed and // assume it's position if( time.elapsed() > 5000 ){ qWarning() << "SingleApplication: Shared memory block has been in an inconsistent state from more than 5s. Assuming primary instance failure."; d->initializeMemoryBlock(); } // Otherwise wait for a random period and try again. The random sleep here // limits the probability of a collision between two racing apps and // allows the app to initialise faster if( ! d->memory->unlock() ){ qDebug() << "SingleApplication: Unable to unlock memory for random wait."; qDebug() << d->memory->errorString(); } SingleApplicationPrivate::randomSleep(); if( ! d->memory->lock() ){ qCritical() << "SingleApplication: Unable to lock memory after random wait."; abortSafely(); } } if( inst->primary == false ){ d->startPrimary(); if( ! d->memory->unlock() ){ qDebug() << "SingleApplication: Unable to unlock memory after primary start."; qDebug() << d->memory->errorString(); } return; } // Check if another instance can be started if( allowSecondary ){ d->startSecondary(); if( d->options & Mode::SecondaryNotification ){ d->connectToPrimary( timeout, SingleApplicationPrivate::SecondaryInstance ); } if( ! d->memory->unlock() ){ qDebug() << "SingleApplication: Unable to unlock memory after secondary start."; qDebug() << d->memory->errorString(); } return; } if( ! d->memory->unlock() ){ qDebug() << "SingleApplication: Unable to unlock memory at end of execution."; qDebug() << d->memory->errorString(); } d->connectToPrimary( timeout, SingleApplicationPrivate::NewInstance ); delete d; ::exit( EXIT_SUCCESS ); } SingleApplication::~SingleApplication() { Q_D( SingleApplication ); delete d; } /** * Checks if the current application instance is primary. * @return Returns true if the instance is primary, false otherwise. */ bool SingleApplication::isPrimary() const { Q_D( const SingleApplication ); return d->server != nullptr; } /** * Checks if the current application instance is secondary. * @return Returns true if the instance is secondary, false otherwise. */ bool SingleApplication::isSecondary() const { Q_D( const SingleApplication ); return d->server == nullptr; } /** * Allows you to identify an instance by returning unique consecutive instance * ids. It is reset when the first (primary) instance of your app starts and * only incremented afterwards. * @return Returns a unique instance id. */ quint32 SingleApplication::instanceId() const { Q_D( const SingleApplication ); return d->instanceNumber; } /** * Returns the OS PID (Process Identifier) of the process running the primary * instance. Especially useful when SingleApplication is coupled with OS. * specific APIs. * @return Returns the primary instance PID. */ qint64 SingleApplication::primaryPid() const { Q_D( const SingleApplication ); return d->primaryPid(); } /** * Returns the username the primary instance is running as. * @return Returns the username the primary instance is running as. */ QString SingleApplication::primaryUser() const { Q_D( const SingleApplication ); return d->primaryUser(); } /** * Returns the username the current instance is running as. * @return Returns the username the current instance is running as. */ QString SingleApplication::currentUser() const { return SingleApplicationPrivate::getUsername(); } /** * Sends message to the Primary Instance. * @param message The message to send. * @param timeout the maximum timeout in milliseconds for blocking functions. * @param sendMode mode of operation * @return true if the message was sent successfuly, false otherwise. */ bool SingleApplication::sendMessage( const QByteArray &message, int timeout, SendMode sendMode ) { Q_D( SingleApplication ); // Nobody to connect to if( isPrimary() ) return false; // Make sure the socket is connected if( ! d->connectToPrimary( timeout, SingleApplicationPrivate::Reconnect ) ) return false; return d->writeConfirmedMessage( timeout, message, sendMode ); } /** * Cleans up the shared memory block and exits with a failure. * This function halts program execution. */ void SingleApplication::abortSafely() { Q_D( SingleApplication ); qCritical() << "SingleApplication: " << d->memory->error() << d->memory->errorString(); delete d; ::exit( EXIT_FAILURE ); } QStringList SingleApplication::userData() const { Q_D( const SingleApplication ); return d->appData(); } recoll-1.43.12/qtgui/singleapplication/singleapplication.h0000644000175000017500000001466315121730573023176 0ustar dockesdockes// Copyright (c) Itay Grudev 2015 - 2023 // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // Permission is not granted to use this software or any of the associated files // as sample data for the purposes of building machine learning models. // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. #ifndef SINGLE_APPLICATION_H #define SINGLE_APPLICATION_H #include #include #ifndef QAPPLICATION_CLASS #define QAPPLICATION_CLASS QCoreApplication #endif #include QT_STRINGIFY(QAPPLICATION_CLASS) class SingleApplicationPrivate; /** * @brief Handles multiple instances of the same * Application * @see QCoreApplication */ class SingleApplication : public QAPPLICATION_CLASS { Q_OBJECT using app_t = QAPPLICATION_CLASS; public: /** * @brief Mode of operation of `SingleApplication`. * Whether the block should be user-wide or system-wide and whether the * primary instance should be notified when a secondary instance had been * started. * @note Operating system can restrict the shared memory blocks to the same * user, in which case the User/System modes will have no effect and the * block will be user wide. */ enum Mode { /** The `SingleApplication` block should apply user wide * (this adds user specific data to the key used for the shared memory and server name) * */ User = 1 << 0, /** * The `SingleApplication` block applies system-wide. */ System = 1 << 1, /** * Whether to trigger `instanceStarted()` even whenever secondary instances are started */ SecondaryNotification = 1 << 2, /** * Excludes the application version from the server name (and memory block) hash */ ExcludeAppVersion = 1 << 3, /** * Excludes the application path from the server name (and memory block) hash */ ExcludeAppPath = 1 << 4 }; Q_DECLARE_FLAGS(Options, Mode) /** * @brief Intitializes a `SingleApplication` instance with argc command line * arguments in argv * @arg argc - Number of arguments in argv * @arg argv - Supplied command line arguments * @arg allowSecondary - Whether to start the instance as secondary * if there is already a primary instance. * @arg mode - Whether for the `SingleApplication` block to be applied * User wide or System wide. * @arg timeout - Timeout to wait in milliseconds. * @note argc and argv may be changed as Qt removes arguments that it * recognizes * @note `Mode::SecondaryNotification` only works if set on both the primary * instance and the secondary instance. * @note The timeout is just a hint for the maximum time of blocking * operations. It does not guarantee that the `SingleApplication` * initialisation will be completed in given time, though is a good hint. * Usually 4*timeout would be the worst case (fail) scenario. * @see See the corresponding `QAPPLICATION_CLASS` constructor for reference */ explicit SingleApplication( int &argc, char *argv[], bool allowSecondary = false, Options options = Mode::User, int timeout = 1000, const QString &userData = {} ); ~SingleApplication() override; /** * @brief Checks if the instance is primary instance * @returns `true` if the instance is primary */ bool isPrimary() const; /** * @brief Checks if the instance is a secondary instance * @returns `true` if the instance is secondary */ bool isSecondary() const; /** * @brief Returns a unique identifier for the current instance * @returns instance id */ quint32 instanceId() const; /** * @brief Returns the process ID (PID) of the primary instance * @returns pid */ qint64 primaryPid() const; /** * @brief Returns the username of the user running the primary instance * @returns user name */ QString primaryUser() const; /** * @brief Returns the username of the current user * @returns user name */ QString currentUser() const; /** * @brief Mode of operation of sendMessage. */ enum SendMode { NonBlocking, /** Do not wait for the primary instance termination and return immediately */ BlockUntilPrimaryExit, /** Wait until the primary instance is terminated */ }; /** * @brief Sends a message to the primary instance * @param message data to send * @param timeout timeout for connecting * @param sendMode - Mode of operation * @returns `true` on success * @note sendMessage() will return false if invoked from the primary instance */ bool sendMessage( const QByteArray &message, int timeout = 100, SendMode sendMode = NonBlocking ); /** * @brief Get the set user data. * @returns user data */ QStringList userData() const; Q_SIGNALS: /** * @brief Triggered whenever a new instance had been started, * except for secondary instances if the `Mode::SecondaryNotification` flag is not specified */ void instanceStarted(); /** * @brief Triggered whenever there is a message received from a secondary instance */ void receivedMessage( quint32 instanceId, QByteArray message ); private: SingleApplicationPrivate *d_ptr; Q_DECLARE_PRIVATE(SingleApplication) void abortSafely(); }; Q_DECLARE_OPERATORS_FOR_FLAGS(SingleApplication::Options) #endif // SINGLE_APPLICATION_H recoll-1.43.12/qtgui/actsearch_w.cpp0000644000175000017500000000746715121730572016605 0ustar dockesdockes/* Copyright (C) 2020-2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include #include "log.h" #include "actsearch_w.h" // A window for letting the user to search among menu entries (actions) and execute the one found. void ActSearchW::init() { new QShortcut(QKeySequence("Esc"), this, SLOT(hide())); connect(actCMB, SIGNAL(activated(int)), this, SLOT(onActivated(int))); } void ActSearchW::setActList(QList actlist) { for (int i = 0; i < actlist.size(); i++) { if (!actlist[i]->text().isEmpty()) { m_actions.push_back(actlist[i]); } } std::sort(m_actions.begin(), m_actions.end(), [] (const QAction *act1, const QAction *act2) { auto txt1 = act1->text().remove('&'); auto txt2 = act2->text().remove('&'); return txt1.compare(txt2, Qt::CaseInsensitive) < 0;}); QStringList sl; for (const auto act : m_actions) { auto txt = act->text().remove('&'); actCMB->addItem(txt); sl.push_back(txt); } actCMB->setCurrentText(""); m_completer = new QCompleter(sl, this); m_completer->setCaseSensitivity(Qt::CaseInsensitive); if (m_match_contains) { m_completer->setFilterMode(Qt::MatchContains); } actCMB->setCompleter(m_completer); m_completer->popup()->installEventFilter(this); actCMB->installEventFilter(this); } // This is to avoid that if the user types Backspace or Del while we // have inserted / selected the current completion, the lineedit text // goes back to what it was, the completion fires, and it looks like // nothing was typed. Disable the completion after Del or Backspace // is typed. bool ActSearchW::eventFilter(QObject *target, QEvent *event) { Q_UNUSED(target); if (event->type() != QEvent::KeyPress) { return false; } QKeyEvent *keyEvent = (QKeyEvent *)event; if (keyEvent->key() == Qt::Key_Backspace || keyEvent->key()==Qt::Key_Delete) { actCMB->setCompleter(nullptr); return false; } else { if (nullptr == actCMB->completer()) { actCMB->setCompleter(m_completer); } } return false; } void ActSearchW::onTextChanged(const QString&) { if (actCMB->completer() && actCMB->completer()->completionCount() == 1) { // We append the completion part to the end of the current input, line, and select it so // that the user has a clear indication of what will happen if they type Enter. auto le = actCMB->lineEdit(); int pos = le->cursorPosition(); auto text = actCMB->completer()->currentCompletion(); int len = text.size() - actCMB->currentText().size(); le->setText(text); if (!m_match_contains) { le->setCursorPosition(pos); le->setSelection(pos, len); } } } void ActSearchW::onActivated(int index) { if (index < 0 || index >= int(m_actions.size())) return; m_actions[index]->trigger(); hide(); } recoll-1.43.12/qtgui/idxsched.ui0000644000175000017500000001045714753313624015746 0ustar dockesdockes IdxSchedW 0 0 504 403 Index scheduling setup 0 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> Qt::AutoText true Cron scheduling false The tool will let you decide at what time indexing should run and will install a crontab entry. Real time indexing start up false Decide if real time indexing will be started when you log in (only for the default index). Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() IdxSchedW accept() 248 254 157 274 buttonBox rejected() IdxSchedW reject() 316 260 286 274 recoll-1.43.12/qtgui/rclzg.h0000644000175000017500000000210114753313624015071 0ustar dockesdockes/* Copyright (C) 2012 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _RCLZG_H_INCLUDED_ #define _RCLZG_H_INCLUDED_ #include "rcldoc.h" enum ZgSendType {ZGSEND_PREVIEW, ZGSEND_OPEN}; #ifndef USE_ZEITGEIST inline void zg_send_event(ZgSendType, const Rcl::Doc&){} #else extern void zg_send_event(ZgSendType tp, const Rcl::Doc& doc); #endif #endif // _RCLZG_H_INCLUDED_ recoll-1.43.12/qtgui/rclm_preview.cpp0000644000175000017500000002263315121730573017011 0ustar dockesdockes/* Copyright (C) 2005-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include "log.h" #include "internfile.h" #include "rclzg.h" #include "rclmain_w.h" #include "preview_w.h" using std::string; using std::vector; using std::map; static const QKeySequence quitKeySeq("Ctrl+q"); // If a preview (toplevel) window gets closed by the user, we need to // clean up because there is no way to reopen it. And check the case // where the current one is closed void RclMain::previewClosed(Preview *w) { LOGDEB("RclMain::previewClosed(" << w << ")\n"); if (w == curPreview) { LOGDEB("Active preview closed\n"); curPreview = 0; } else { LOGDEB("Old preview closed\n"); } } // Document up to date check. The main problem we try to solve is // displaying the wrong message from a compacted mail folder. // // Also we should re-run the query after updating the index because // the ipaths may be wrong in the current result list. For now, the // user does this by clicking search again once the indexing is done // // We only do this for the main index, else jump and prey (cant update // anyway, even the makesig() call might not make sense for our base // config) bool RclMain::containerUpToDate(Rcl::Doc& doc) { static bool ignore_out_of_date_preview = false; // If ipath is empty, we decide we don't care. Also, we need an index, if (ignore_out_of_date_preview || doc.ipath.empty() || rcldb == 0) return true; string udi = rcldb->fetchUdi(doc); if (udi.empty()) { // Whatever... return true; } string sig; if (!FileInterner::makesig(theconfig, doc, sig)) { QMessageBox::warning(0, "Recoll", tr("Can't access file: ") + path2qs(doc.url)); // Let's try the preview anyway... return true; } if (!rcldb->needUpdate(udi, sig)) { // Alles ist in ordnung return true; } // Top level (container) document, for checking for indexing error string ctsig = "+"; Rcl::Doc ctdoc; if (rcldb->getContainerDoc(doc, ctdoc)) { ctdoc.getmeta(Rcl::Doc::keysig, &ctsig); } // We can only run indexing on the main index (dbidx 0) bool ismainidx = rcldb->fromMainIndex(doc); // Indexer already running? bool ixnotact = (m_indexerState == IXST_NOTRUNNING); QString msg = tr("Index not up to date for this file.
"); if (ctsig.back() == '+') { msg += tr("Also, it seems that the last index update for the file " "failed.
"); } if (ixnotact && ismainidx) { msg += tr("Click Ok to try to update the " "index for this file. You will need to " "run the query again when indexing is done.
"); } else if (ismainidx) { msg += tr("The indexer is running so things should " "improve when it's done. "); } else if (ixnotact) { // Not main index msg += tr("The document belongs to an external index " "which I can't update. "); } msg += tr("Click Cancel to return to the list.
" "Click Ignore to show the preview anyway (and remember for " "this session). There is a risk of showing the wrong entry.
"); QMessageBox::StandardButtons bts = QMessageBox::Ignore | QMessageBox::Cancel; if (ixnotact &&ismainidx) bts |= QMessageBox::Ok; int rep = QMessageBox::warning(0, tr("Warning"), msg, bts, (ixnotact && ismainidx) ? QMessageBox::Cancel : QMessageBox::NoButton); if (m_indexerState == IXST_NOTRUNNING && rep == QMessageBox::Ok) { LOGDEB("Requesting index update for " << doc.url << "\n"); vector docs(1, doc); updateIdxForDocs(docs); } if (rep == QMessageBox::Ignore) { ignore_out_of_date_preview = true; return true; } else { return false; } } /** * Open a preview window for a given document, or load it into new tab of * existing window. * * @param docnum db query index * @param mod keyboards modifiers like ControlButton, ShiftButton */ void RclMain::startPreview(int docnum, Rcl::Doc doc, int mod) { LOGDEB("startPreview(" << docnum << ", doc, " << mod << ")\n"); if (!containerUpToDate(doc)) return; // Do the zeitgeist thing zg_send_event(ZGSEND_PREVIEW, doc); if (mod & Qt::ShiftModifier) { // User wants new preview window curPreview = 0; } if (curPreview == 0) { HighlightData hdata; m_source->getTerms(hdata); curPreview = new Preview(this, reslist->listId(), hdata); connect(this, SIGNAL(uiPrefsChanged()), curPreview, SLOT(onUiPrefsChanged())); connect(new QShortcut(quitKeySeq, curPreview), SIGNAL (activated()), this, SLOT (fileExit())); connect(curPreview, SIGNAL(previewClosed(Preview *)), this, SLOT(previewClosed(Preview *))); connect(curPreview, SIGNAL(wordSelect(QString)), sSearch, SLOT(addTerm(QString))); connect(curPreview, SIGNAL(showNext(Preview *, int, int)), this, SLOT(previewNextInTab(Preview *, int, int))); connect(curPreview, SIGNAL(showPrev(Preview *, int, int)), this, SLOT(previewPrevInTab(Preview *, int, int))); connect(curPreview, SIGNAL(previewExposed(Preview *, int, int)), this, SLOT(previewExposed(Preview *, int, int))); connect(curPreview, SIGNAL(saveDocToFile(Rcl::Doc)), this, SLOT(saveDocToFile(Rcl::Doc))); connect(curPreview, SIGNAL(editRequested(Rcl::Doc)), this, SLOT(startNativeViewer(Rcl::Doc))); curPreview->setWindowTitle(getQueryDescription()); } curPreview->show(); curPreview->raise(); QTimer::singleShot(0, this, [=]() mutable { curPreview->makeDocCurrent(doc, docnum); }); } /** * Open a preview window for a given document, no linking to result list * * This is used to show ie parent documents, which have no corresponding * entry in the result list. * */ void RclMain::startPreview(Rcl::Doc doc) { Preview *preview = new Preview(this, 0, HighlightData()); connect(this, SIGNAL(uiPrefsChanged()), preview, SLOT(onUiPrefsChanged())); if (preview == 0) { QMessageBox::warning(0, tr("Warning"), tr("Can't create preview window"), QMessageBox::Ok, QMessageBox::NoButton); return; } connect(new QShortcut(quitKeySeq, preview), SIGNAL (activated()), this, SLOT (fileExit())); connect(preview, SIGNAL(wordSelect(QString)), sSearch, SLOT(addTerm(QString))); // Do the zeitgeist thing zg_send_event(ZGSEND_PREVIEW, doc); preview->show(); preview->makeDocCurrent(doc, 0); } // Show next document from result list in current preview tab void RclMain::previewNextInTab(Preview * w, int sid, int docnum) { previewPrevOrNextInTab(w, sid, docnum, true); } // Show previous document from result list in current preview tab void RclMain::previewPrevInTab(Preview * w, int sid, int docnum) { previewPrevOrNextInTab(w, sid, docnum, false); } // Combined next/prev from result list in current preview tab void RclMain::previewPrevOrNextInTab(Preview * w, int sid, int docnum, bool nxt) { LOGDEB("RclMain::previewNextInTab sid " << sid << " docnum " << docnum << ", listId " << reslist->listId() << "\n"); if (w == 0) // ?? return; if (sid != reslist->listId()) { QMessageBox::warning(0, "Recoll", tr("This search is not active anymore")); return; } if (nxt) docnum++; else docnum--; if (docnum < 0 || !m_source || docnum >= m_source->getResCnt()) { if (!prefs.noBeeps) { LOGDEB("Beeping\n"); QApplication::beep(); } else { LOGDEB("Not beeping because nobeep is set\n"); } return; } Rcl::Doc doc; if (!reslist->getDoc(docnum, doc)) { QMessageBox::warning(0, "Recoll", tr("Cannot retrieve document info from database")); return; } w->makeDocCurrent(doc, docnum, true); } // Preview tab exposed: if the preview comes from the currently // displayed result list, tell reslist (to color the paragraph) void RclMain::previewExposed(Preview *, int sid, int docnum) { LOGDEB2("RclMain::previewExposed: sid " << sid << " docnum " << docnum << ", m_sid " << reslist->listId() << "\n"); if (sid != reslist->listId()) { return; } reslist->previewExposed(docnum); } recoll-1.43.12/qtgui/restable.ui0000644000175000017500000000360714753312746015757 0ustar dockesdockes ResTable 0 0 640 480 0 0 Qt::Vertical 0 2 QAbstractItemView::NoEditTriggers false true true false false false false 0 0 recoll-1.43.12/qtgui/winschedtool.h0000644000175000017500000000242615121730573016460 0ustar dockesdockes/* Copyright (C) 2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _WINSCHEDTOOL_W_H_INCLUDED_ #define _WINSCHEDTOOL_W_H_INCLUDED_ #include "ui_winschedtool.h" class QPushButton; class ExecCmd; class WinSchedToolW : public QDialog, public Ui::WinSchedToolW { Q_OBJECT public: WinSchedToolW(QWidget * parent = 0) : QDialog(parent) { setupUi(this); init(); } QPushButton *startButton{nullptr}; private slots: void startWinScheduler(); private: void init(); ExecCmd *m_cmd{nullptr}; }; #endif /* _WINSCHEDTOOL_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/qmkmk.sh0000755000175000017500000000162715121730573015266 0ustar dockesdockes#!/bin/sh # This is used with meson for the recoll custom_target(). # This just runs qmake then make # I could find no way to do this in 2 steps inside meson set -e pro_file=$1 shift dir=`dirname $pro_file` fn=`basename $pro_file` QMAKE=${QMAKE:-qmake} MAKE=${MAKE:-make} ncpus=2 if which nproc > /dev/null ; then ncpus=`nproc` elif which sysctl > /dev/null ; then ncpus=`sysctl hw.ncpu | awk '{print $2}'` elif test -f /proc/cpuinfo ; then ncpus=`grep -E '^processor[ ]*:' /proc/cpuinfo | wc -l` fi if test -z "$ncpus" ; then ncpus=1 fi cd $dir ${QMAKE} $fn $* ${MAKE} -j $ncpus if test `uname -s` = Darwin ; then # qmake will create a recoll.app and put the bin in there. The alternative to an installation # to $bindir would be to create the full bundle in place but this would make things extremely # different on the mac cp -p recoll.app/Contents/MacOS/recoll recoll fi recoll-1.43.12/qtgui/advsearch_w.cpp0000644000175000017500000005276715121730572016613 0ustar dockesdockes/* Copyright (C) 2005-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "advsearch_w.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "recoll.h" #include "rclconfig.h" #include "log.h" #include "searchdata.h" #include "guiutils.h" #include "rclhelp.h" #include "scbase.h" #include "advshist.h" #include "pathut.h" using namespace std; static const int initclausetypes[] = {1, 3, 0, 2, 5}; static const unsigned int iclausescnt = sizeof(initclausetypes) / sizeof(int); static map cat_translations; static map cat_rtranslations; void AdvSearch::init() { (void)new HelpClient(this); HelpClient::installMap((const char *)objectName().toUtf8(), "RCL.SEARCH.GUI.COMPLEX"); // signals and slots connections connect(delFiltypPB, SIGNAL(clicked()), this, SLOT(delFiltypPB_clicked())); connect(searchPB, SIGNAL(clicked()), this, SLOT(runSearch())); connect(filterDatesCB, SIGNAL(toggled(bool)), this, SLOT(filterDatesCB_toggled(bool))); connect(filterSizesCB, SIGNAL(toggled(bool)), this, SLOT(filterSizesCB_toggled(bool))); connect(restrictFtCB, SIGNAL(toggled(bool)), this, SLOT(restrictFtCB_toggled(bool))); connect(restrictCtCB, SIGNAL(toggled(bool)), this, SLOT(restrictCtCB_toggled(bool))); connect(dismissPB, SIGNAL(clicked()), this, SLOT(close())); connect(browsePB, SIGNAL(clicked()), this, SLOT(browsePB_clicked())); connect(addFiltypPB, SIGNAL(clicked()), this, SLOT(addFiltypPB_clicked())); connect(delAFiltypPB, SIGNAL(clicked()), this, SLOT(delAFiltypPB_clicked())); connect(addAFiltypPB, SIGNAL(clicked()), this, SLOT(addAFiltypPB_clicked())); connect(saveFileTypesPB, SIGNAL(clicked()), this, SLOT(saveFileTypes())); connect(addClausePB, SIGNAL(clicked()), this, SLOT(addClause())); connect(delClausePB, SIGNAL(clicked()), this, SLOT(delClause())); onNewShortcuts(); connect(&SCBase::scBase(), SIGNAL(shortcutsChanged()), this, SLOT(onNewShortcuts())); #ifdef EXT4_BIRTH_TIME filterBirthDatesCB->show(); minBirthDateDTE->show(); maxBirthDateDTE->show(); label_birth_from->show(); label_birth_to->show(); line_birth->show(); connect(filterBirthDatesCB, SIGNAL(toggled(bool)), this, SLOT(filterBirthDatesCB_toggled(bool))); #else filterBirthDatesCB->hide(); minBirthDateDTE->hide(); maxBirthDateDTE->hide(); label_birth_from->hide(); label_birth_to->hide(); line_birth->hide(); #endif conjunctCMB->insertItem(1, tr("All clauses")); conjunctCMB->insertItem(2, tr("Any clause")); // Create preconfigured clauses for (unsigned int i = 0; i < iclausescnt; i++) { addClause(initclausetypes[i], false); } // Tune initial state according to last saved { vector::iterator cit = m_clauseWins.begin(); auto existing = m_clauseWins.size(); for (unsigned int i = 0; i < prefs.advSearchClauses.size(); i++) { if (i < existing) { (*cit)->tpChange(prefs.advSearchClauses[i]); cit++; } else { addClause(prefs.advSearchClauses[i], false); } } } (*m_clauseWins.begin())->wordsLE->setFocus(); // Initialize min/max mtime from extrem values in the index int minyear, maxyear; if (rcldb) { rcldb->maxYearSpan(&minyear, &maxyear); minDateDTE->setDisplayFormat("yyyy-MM-dd"); maxDateDTE->setDisplayFormat("yyyy-MM-dd"); minDateDTE->setDate(QDate(minyear, 1, 1)); maxDateDTE->setDate(QDate(maxyear, 12, 31)); } #ifdef EXT4_BIRTH_TIME int birthminyear, birthmaxyear; if (rcldb) { rcldb->maxYearSpan(&birthminyear, &birthmaxyear); minBirthDateDTE->setDisplayFormat("yyyy-MM-dd"); maxBirthDateDTE->setDisplayFormat("yyyy-MM-dd"); minBirthDateDTE->setDate(QDate(birthminyear, 1, 1)); maxBirthDateDTE->setDate(QDate(birthmaxyear, 12, 31)); } #endif // Initialize lists of accepted and ignored mime types from config // and settings m_ignTypes = prefs.asearchIgnFilTyps; m_ignByCats = prefs.fileTypesByCats; restrictCtCB->setEnabled(false); restrictCtCB->setChecked(m_ignByCats); fillFileTypes(); subtreeCMB->insertItems(0, prefs.asearchSubdirHist); subtreeCMB->setEditText(""); // The clauseline frame is needed to force designer to accept a // vbox to englobe the base clauses grid and 'something else' (the // vbox is so that we can then insert SearchClauseWs), but we // don't want to see it. clauseline->close(); bool calpop = 0; minDateDTE->setCalendarPopup(calpop); maxDateDTE->setCalendarPopup(calpop); #ifdef EXT4_BIRTH_TIME bool birthcalpop = 0; minBirthDateDTE->setCalendarPopup(birthcalpop); maxBirthDateDTE->setCalendarPopup(birthcalpop); #endif // Translations for known categories cat_translations[QString::fromUtf8("texts")] = tr("text"); cat_rtranslations[tr("texts")] = QString::fromUtf8("text"); cat_translations[QString::fromUtf8("spreadsheet")] = tr("spreadsheet"); cat_rtranslations[tr("spreadsheets")] = QString::fromUtf8("spreadsheet"); cat_translations[QString::fromUtf8("presentation")] = tr("presentation"); cat_rtranslations[tr("presentation")] =QString::fromUtf8("presentation"); cat_translations[QString::fromUtf8("media")] = tr("media"); cat_rtranslations[tr("media")] = QString::fromUtf8("media"); cat_translations[QString::fromUtf8("message")] = tr("message"); cat_rtranslations[tr("message")] = QString::fromUtf8("message"); cat_translations[QString::fromUtf8("other")] = tr("other"); cat_rtranslations[tr("other")] = QString::fromUtf8("other"); } void AdvSearch::saveCnf() { // Save my state prefs.advSearchClauses.clear(); for (const auto& clause : m_clauseWins) { prefs.advSearchClauses.push_back(clause->sTpCMB->currentIndex()); } } void AdvSearch::onNewShortcuts() { SETSHORTCUT(this, "advsearch:171", tr("Advanced Search"), tr("Load next stored search"), "Up", m_histnextsc, slotHistoryNext); SETSHORTCUT(this, "advsearch:174", tr("Advanced Search"), tr("Load previous stored search"), "Down", m_histprevsc, slotHistoryPrev); } void AdvSearch::listShortcuts() { LISTSHORTCUT(this, "advsearch:171", tr("Advanced Search"), tr("Load next stored search"), "Up", m_histnextsc, slotHistoryNext); LISTSHORTCUT(this, "advsearch:174", tr("Advanced Search"), tr("Load previous stored search"), "Down", m_histprevsc, slotHistoryPrev); } void AdvSearch::addClause(bool updsaved) { addClause(0, updsaved); } void AdvSearch::addClause(int tp, bool updsaved) { SearchClauseW *w = new SearchClauseW(clauseFRM); m_clauseWins.push_back(w); ((QVBoxLayout *)(clauseFRM->layout()))->addWidget(w); w->show(); w->tpChange(tp); if (m_clauseWins.size() > iclausescnt) { delClausePB->setEnabled(true); } else { delClausePB->setEnabled(false); } if (updsaved) { saveCnf(); } } void AdvSearch::delClause(bool updsaved) { if (m_clauseWins.size() <= iclausescnt) return; delete m_clauseWins.back(); m_clauseWins.pop_back(); if (m_clauseWins.size() > iclausescnt) { delClausePB->setEnabled(true); } else { delClausePB->setEnabled(false); } if (updsaved) { saveCnf(); } } void AdvSearch::delAFiltypPB_clicked() { yesFiltypsLB->selectAll(); delFiltypPB_clicked(); } // Move selected file types from the searched to the ignored box void AdvSearch::delFiltypPB_clicked() { QList items = yesFiltypsLB->selectedItems(); for (QList::iterator it = items.begin(); it != items.end(); it++) { int row = yesFiltypsLB->row(*it); QListWidgetItem *item = yesFiltypsLB->takeItem(row); noFiltypsLB->insertItem(0, item); } guiListsToIgnTypes(); } // Move selected file types from the ignored to the searched box void AdvSearch::addFiltypPB_clicked() { QList items = noFiltypsLB->selectedItems(); for (QList::iterator it = items.begin(); it != items.end(); it++) { int row = noFiltypsLB->row(*it); QListWidgetItem *item = noFiltypsLB->takeItem(row); yesFiltypsLB->insertItem(0, item); } guiListsToIgnTypes(); } // Compute list of ignored mime type from widget lists void AdvSearch::guiListsToIgnTypes() { yesFiltypsLB->sortItems(); noFiltypsLB->sortItems(); m_ignTypes.clear(); for (int i = 0; i < noFiltypsLB->count();i++) { QListWidgetItem *item = noFiltypsLB->item(i); m_ignTypes.append(item->text()); } } void AdvSearch::addAFiltypPB_clicked() { noFiltypsLB->selectAll(); addFiltypPB_clicked(); } // Activate file type selection void AdvSearch::restrictFtCB_toggled(bool on) { restrictCtCB->setEnabled(on); yesFiltypsLB->setEnabled(on); delFiltypPB->setEnabled(on); addFiltypPB->setEnabled(on); delAFiltypPB->setEnabled(on); addAFiltypPB->setEnabled(on); noFiltypsLB->setEnabled(on); saveFileTypesPB->setEnabled(on); } // Activate file type selection void AdvSearch::filterSizesCB_toggled(bool on) { minSizeLE->setEnabled(on); maxSizeLE->setEnabled(on); } // Activate file type selection void AdvSearch::filterDatesCB_toggled(bool on) { minDateDTE->setEnabled(on); maxDateDTE->setEnabled(on); } void AdvSearch::filterBirthDatesCB_toggled(bool on) { minBirthDateDTE->setEnabled(on); maxBirthDateDTE->setEnabled(on); } void AdvSearch::restrictCtCB_toggled(bool on) { m_ignByCats = on; // Only reset the list if we're enabled. Else this is init from prefs if (restrictCtCB->isEnabled()) m_ignTypes.clear(); fillFileTypes(); } void AdvSearch::fillFileTypes() { noFiltypsLB->clear(); yesFiltypsLB->clear(); noFiltypsLB->insertItems(0, m_ignTypes); QStringList ql; if (m_ignByCats == false) { vector types = theconfig->getAllMimeTypes(); rcldb->getAllDbMimeTypes(types); sort(types.begin(), types.end()); types.erase(unique(types.begin(), types.end()), types.end()); for (const auto& tp: types) { QString qs = u8s2qs(tp); if (m_ignTypes.indexOf(qs) < 0) ql.append(qs); } } else { vector cats; theconfig->getMimeCategories(cats); for (const auto& configcat : cats) { QString cat; auto it1 = cat_translations.find(u8s2qs(configcat)); if (it1 != cat_translations.end()) { cat = it1->second; } else { cat = u8s2qs(configcat); } if (m_ignTypes.indexOf(cat) < 0) ql.append(cat); } } yesFiltypsLB->insertItems(0, ql); } // Save current set of ignored file types to prefs void AdvSearch::saveFileTypes() { prefs.asearchIgnFilTyps = m_ignTypes; prefs.fileTypesByCats = m_ignByCats; rwSettings(true); } void AdvSearch::browsePB_clicked() { auto topdirs = theconfig->getTopdirs(); // if dirlocation is not empty, it's the last location set by the user, leave it alone if (m_gfnparams.dirlocation.isEmpty() && !topdirs.empty()) { m_gfnparams.dirlocation = u8s2qs(topdirs[0]); } m_gfnparams.sidedirs = topdirs; m_gfnparams.readonly = true; m_gfnparams.caption = "Select directory"; QString dir = myGetFileName(true, m_gfnparams); #ifdef _WIN32 string s = qs2utf8s(dir); path_slashize(s); dir = u8s2qs(path_slashdrive(s)); #endif subtreeCMB->setEditText(dir); } static QRegularExpression respaces("[\\s]+"); size_t AdvSearch::stringToSize(QString qsize) { size_t size = size_t(-1); qsize.replace(respaces, ""); if (!qsize.isEmpty()) { string csize(qs2utf8s(qsize)); char *cp; size = strtoll(csize.c_str(), &cp, 10); if (*cp != 0) { switch (*cp) { case 'k': case 'K': size *= 1E3;break; case 'm': case 'M': size *= 1E6;break; case 'g': case 'G': size *= 1E9;break; case 't': case 'T': size *= 1E12;break; default: QMessageBox::warning(0, "Recoll", tr("Bad multiplier suffix in size filter")); size = size_t(-1); } } } return size; } using namespace Rcl; void AdvSearch::runSearch() { string stemLang = prefs.stemlang(); auto sdata = std::make_shared(conjunctCMB->currentIndex() == 0 ? SCLT_AND : SCLT_OR, stemLang); if (prefs.ignwilds) { sdata->setNoWildExp(true); } bool hasclause = false; for (const auto& clausew : m_clauseWins) { SearchDataClause *cl; if ((cl = clausew->getClause())) { sdata->addClause(cl); hasclause = true; } } if (!hasclause) return; if (restrictFtCB->isChecked() && noFiltypsLB->count() > 0) { for (int i = 0; i < yesFiltypsLB->count(); i++) { if (restrictCtCB->isChecked()) { QString qcat = yesFiltypsLB->item(i)->text(); map::const_iterator qit; string cat; if ((qit = cat_rtranslations.find(qcat)) != cat_rtranslations.end()) { cat = qs2utf8s(qit->second); } else { cat = qs2utf8s(qcat); } vector types; theconfig->getMimeCatTypes(cat, types); for (const auto& tp : types) { sdata->addFiletype(tp); } } else { sdata->addFiletype(qs2utf8s(yesFiltypsLB->item(i)->text())); } } } if (filterDatesCB->isChecked()) { QDate mindate = minDateDTE->date(); QDate maxdate = maxDateDTE->date(); DateInterval di; di.y1 = mindate.year(); di.m1 = mindate.month(); di.d1 = mindate.day(); di.y2 = maxdate.year(); di.m2 = maxdate.month(); di.d2 = maxdate.day(); sdata->setDateSpan(&di); } #ifdef EXT4_BIRTH_TIME if (filterBirthDatesCB->isChecked()) { QDate mindate = minBirthDateDTE->date(); QDate maxdate = maxBirthDateDTE->date(); DateInterval di; di.y1 = mindate.year(); di.m1 = mindate.month(); di.d1 = mindate.day(); di.y2 = maxdate.year(); di.m2 = maxdate.month(); di.d2 = maxdate.day(); sdata->setBrDateSpan(&di); } #endif if (filterSizesCB->isChecked()) { size_t size = stringToSize(minSizeLE->text()); sdata->setMinSize(size); size = stringToSize(maxSizeLE->text()); sdata->setMaxSize(size); } if (!subtreeCMB->currentText().isEmpty()) { QString current = subtreeCMB->currentText(); Rcl::SearchDataClausePath *pathclause = new Rcl::SearchDataClausePath(qs2path(current), direxclCB->isChecked()); if (sdata->getTp() == SCLT_AND) { sdata->addClause(pathclause); } else { auto nsdata = std::make_shared(SCLT_AND, stemLang); nsdata->addClause(new Rcl::SearchDataClauseSub(sdata)); nsdata->addClause(pathclause); sdata = nsdata; } // Keep history clean and sorted. Maybe there would be a // simpler way to do this list entries; for (int i = 0; i < subtreeCMB->count(); i++) { entries.push_back(subtreeCMB->itemText(i)); } entries.push_back(subtreeCMB->currentText()); entries.sort(); entries.unique(); LOGDEB("Subtree list now has " << (entries.size()) << " entries\n" ); subtreeCMB->clear(); for (list::iterator it = entries.begin(); it != entries.end(); it++) { subtreeCMB->addItem(*it); } subtreeCMB->setCurrentIndex(subtreeCMB->findText(current)); prefs.asearchSubdirHist.clear(); for (int index = 0; index < subtreeCMB->count(); index++) prefs.asearchSubdirHist.push_back(subtreeCMB->itemText(index)); } saveCnf(); g_advshistory && g_advshistory->push(sdata); emit setDescription(""); emit startSearch(sdata, false); } // Set up fields from existing search data, which must be compatible // with what we can do... void AdvSearch::fromSearch(std::shared_ptr sdata) { if (sdata->m_tp == SCLT_OR) conjunctCMB->setCurrentIndex(1); else conjunctCMB->setCurrentIndex(0); while (sdata->m_query.size() > m_clauseWins.size()) { addClause(); } subtreeCMB->setEditText(""); direxclCB->setChecked(0); for (unsigned int i = 0; i < sdata->m_query.size(); i++) { // Set fields from clause if (sdata->m_query[i]->getTp() == SCLT_SUB) { LOGERR("AdvSearch::fromSearch: SUB clause found !\n" ); continue; } if (sdata->m_query[i]->getTp() == SCLT_PATH) { SearchDataClausePath *cs = dynamic_cast(sdata->m_query[i]); // We can only use one such clause. There should be only one too // if this is sfrom aved search data. QString qdir = path2qs(cs->gettext()); subtreeCMB->setEditText(qdir); direxclCB->setChecked(cs->getexclude()); continue; } SearchDataClauseSimple *cs = dynamic_cast(sdata->m_query[i]); m_clauseWins[i]->setFromClause(cs); } for (auto i = sdata->m_query.size(); i < m_clauseWins.size(); i++) { m_clauseWins[i]->clear(); } restrictCtCB->setChecked(0); if (!sdata->m_filetypes.empty()) { delAFiltypPB_clicked(); for (const auto& ft : sdata->m_filetypes) { QString qft = u8s2qs(ft); QList lst = noFiltypsLB->findItems(qft, Qt::MatchExactly); if (!lst.isEmpty()) { int row = noFiltypsLB->row(lst[0]); QListWidgetItem *item = noFiltypsLB->takeItem(row); yesFiltypsLB->insertItem(0, item); } } yesFiltypsLB->sortItems(); restrictFtCB->setChecked(1); restrictFtCB_toggled(1); } else { addAFiltypPB_clicked(); restrictFtCB->setChecked(0); restrictFtCB_toggled(0); } if (sdata->m_haveDates) { filterDatesCB->setChecked(1); DateInterval &di(sdata->m_dates); QDate mindate(di.y1, di.m1, di.d1); QDate maxdate(di.y2, di.m2, di.d2); minDateDTE->setDate(mindate); maxDateDTE->setDate(maxdate); } else { filterDatesCB->setChecked(0); QDate date; minDateDTE->setDate(date); maxDateDTE->setDate(date); } #ifdef EXT4_BIRTH_TIME if (sdata->m_haveBrDates) { filterBirthDatesCB->setChecked(1); DateInterval &di(sdata->m_brdates); QDate mindate(di.y1, di.m1, di.d1); QDate maxdate(di.y2, di.m2, di.d2); minBirthDateDTE->setDate(mindate); maxBirthDateDTE->setDate(maxdate); } else { filterBirthDatesCB->setChecked(0); QDate date; minBirthDateDTE->setDate(date); maxBirthDateDTE->setDate(date); } #endif if (sdata->m_maxSize != -1 || sdata->m_minSize != -1) { filterSizesCB->setChecked(1); QString sz; if (sdata->m_minSize != -1) { sz.setNum(sdata->m_minSize); minSizeLE->setText(sz); } else { minSizeLE->setText(""); } if (sdata->m_maxSize != -1) { sz.setNum(sdata->m_maxSize); maxSizeLE->setText(sz); } else { maxSizeLE->setText(""); } } else { filterSizesCB->setChecked(0); minSizeLE->setText(""); maxSizeLE->setText(""); } } void AdvSearch::slotHistoryNext() { if (g_advshistory == 0) return; std::shared_ptr sd = g_advshistory->getnewer(); if (!sd) return; fromSearch(sd); } void AdvSearch::slotHistoryPrev() { if (g_advshistory == 0) return; std::shared_ptr sd = g_advshistory->getolder(); if (!sd) return; fromSearch(sd); } recoll-1.43.12/qtgui/scbase.cpp0000644000175000017500000001216015121730573015545 0ustar dockesdockes/* Copyright (C) 2021 J.F.Dockes * * License: GPL 2.1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "scbase.h" #include #include #include #include "recoll.h" #include "smallut.h" #include "log.h" struct SCDef { QString id; QString ctxt; QString desc; QKeySequence val; QKeySequence dflt; }; class SCBase::Internal { public: QStringList getAll(const std::map&); std::map scdefs; std::map scvalues; QString scBaseSettingsKey() { return "/Recoll/prefs/sckeys"; } }; SCBase::SCBase() { m = new Internal(); QSettings settings; auto sl = settings.value(m->scBaseSettingsKey()).toStringList(); for (int i = 0; i < sl.size(); ++i) { auto ssc = qs2utf8s(sl.at(i)); std::vector co_des_val; stringToStrings(ssc, co_des_val); if (co_des_val.size() != 4) { LOGERR("Bad shortcut def in prefs: [" << ssc << "]\n"); continue; } QString id = u8s2qs(co_des_val[0]); QString ctxt = u8s2qs(co_des_val[1]); QString desc = u8s2qs(co_des_val[2]); QString val = u8s2qs(co_des_val[3]); auto it = m->scvalues.find(id); if (it == m->scvalues.end()) { m->scvalues[id] = SCDef{id, ctxt, desc, QKeySequence(val), QKeySequence()}; } else { it->second.val = QKeySequence(val); } } } SCBase::~SCBase() { delete m; } QKeySequence SCBase::get(const QString& id, const QString& ctxt, const QString& desc, const QString& defks) { LOGDEB0("SCBase::get: id "<< qs2utf8s(id) << " ["<scdefs[id] = SCDef{id, ctxt, desc, QKeySequence(defks), QKeySequence(defks)}; auto it = m->scvalues.find(id); if (it == m->scvalues.end()) { if (defks.isEmpty()) { return QKeySequence(); } QKeySequence qks(defks); m->scvalues[id] = SCDef{id, ctxt, desc, qks, qks}; LOGDEB0("get(" << qs2utf8s(ctxt) << ", " << qs2utf8s(desc) << ", " << qs2utf8s(defks) << ") -> " << qs2utf8s(qks.toString()) << "\n"); return qks; } LOGDEB0("SCBase::get(" << qs2utf8s(ctxt) << ", " << qs2utf8s(desc) << ", " << qs2utf8s(defks) << ") -> " << qs2utf8s(it->second.val.toString()) << "\n"); it->second.dflt = QKeySequence(defks); return it->second.val; } void SCBase::set(const QString& id, const QString& ctxt, const QString& desc, const QString& newks) { LOGDEB0("SCBase::set: id "<< qs2utf8s(id) << "["<< qs2utf8s(ctxt) << "]/[" << qs2utf8s(desc) << "], [" << qs2utf8s(newks) << "]\n"); auto it = m->scvalues.find(id); if (it == m->scvalues.end()) { QKeySequence qks(newks); m->scvalues[id] = SCDef{id, ctxt, desc, qks, QKeySequence()}; return; } it->second.val = newks; } QStringList SCBase::Internal::getAll(const std::map& mp) { QStringList result; for (const auto& entry : mp) { result.push_back(entry.second.id); result.push_back(entry.second.ctxt); result.push_back(entry.second.desc); result.push_back(entry.second.val.toString()); result.push_back(entry.second.dflt.toString()); } return result; } QStringList SCBase::getAll() { return m->getAll(m->scvalues); } QStringList SCBase::getAllDefaults() { return m->getAll(m->scdefs); } void SCBase::store() { QStringList slout; for (const auto& entry : m->scvalues) { const SCDef& def = entry.second; if (def.val != def.dflt) { std::string e = stringsToString(std::vector{ qs2utf8s(def.id), qs2utf8s(def.ctxt), qs2utf8s(def.desc), qs2utf8s(def.val.toString())}); LOGDEB0("SCBase::store: storing: [" << e << "]\n"); slout.append(u8s2qs(e)); } } // Note: we emit even if the non-default values are not really // changed, just not worth the trouble doing otherwise. emit shortcutsChanged(); QSettings settings; settings.setValue(m->scBaseSettingsKey(), slout); } static SCBase *theBase; SCBase& SCBase::scBase() { if (nullptr == theBase) { theBase = new SCBase(); } return *theBase; } recoll-1.43.12/qtgui/rclm_view.cpp0000644000175000017500000005577215130150303016277 0ustar dockesdockes/* Copyright (C) 2005-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "safeunistd.h" #include #include #include #include #include "qxtconfirmationmessage.h" #include "log.h" #include "firstmatchline.h" #include "fileudi.h" #include "execmd.h" #include "transcode.h" #include "docseqhist.h" #include "docseqdb.h" #include "internfile.h" #include "rclmain_w.h" #include "rclzg.h" #include "pathut.h" #include "unacpp.h" #include "uiprefs_w.h" #include "cstr.h" using namespace std; // Browser list used if xdg-open fails for opening the help doc static const vector browser_list{ "opera", "google-chrome", "chromium-browser", "palemoon", "iceweasel", "firefox", "konqueror", "epiphany"}; // Start native viewer or preview for input Doc. This is used to allow using recoll from another app // (e.g. Unity Scope) to view embedded result docs (docs with an ipath). We act as a proxy to // extract the data and start a viewer. The URLs are encoded as file://path#ipath void RclMain::viewUrl() { if (m_urltoview.isEmpty() || !rcldb) return; QUrl qurl(m_urltoview); LOGDEB("RclMain::viewUrl: Path [" << qs2path(qurl.path()) << "] fragment [" << qs2path(qurl.fragment()) << "]\n"); /* In theory, the url might not be for a file managed by the fs indexer so that the make_udi() call here would be wrong(). When/if this happens we'll have to hide this part inside internfile and have some url magic to indicate the appropriate indexer/identification scheme */ string udi; fileUdi::make_udi(qs2path(qurl.path()), qs2path(qurl.fragment()), udi); Rcl::Doc doc; Rcl::Doc idxdoc; // idxdoc.idxi == 0 -> works with base index only if (!rcldb->getDoc(udi, idxdoc, doc) || doc.pc == -1) return; // StartNativeViewer needs a db source to call getEnclosing() on. Rcl::Query *query = new Rcl::Query(rcldb.get()); DocSequenceDb *src = new DocSequenceDb( rcldb, std::shared_ptr(query), "", std::make_shared()); m_source = std::shared_ptr(src); // Start a native viewer if the mimetype has one defined, else a preview. string apptag; doc.getmeta(Rcl::Doc::keyapptg, &apptag); string viewer = theconfig->getMimeViewerDef(doc.mimetype, apptag, prefs.useDesktopOpen); if (viewer.empty()) { startPreview(doc); } else { hide(); startNativeViewer(doc); // We have a problem here because xdg-open will exit // immediately after starting the command instead of waiting // for it, so we can't wait either and we don't know when we // can exit (deleting the temp file). As a bad workaround we // sleep some time then exit. The alternative would be to just // prevent the temp file deletion completely, leaving it // around forever. Better to let the user save a copy if he // wants I think. millisleep(60*1000); fileExit(); } } /* Look for HTML browser. We make a special effort for html because it's * used for reading help. This is only used if the normal approach * (xdg-open etc.) failed */ static bool lookForHtmlBrowser(string &exefile) { const char *path = getenv("PATH"); if (path == 0) { path = "/usr/local/bin:/usr/bin:/bin"; } // Look for each browser for (const auto& entry : browser_list) { if (ExecCmd::which(entry, exefile, path)) return true; } exefile.clear(); return false; } void RclMain::openWith(Rcl::Doc doc, string cmdspec) { LOGDEB("RclMain::openWith: " << cmdspec << "\n"); // Split the command line vector lcmd; if (!stringToStrings(cmdspec, lcmd)) { QMessageBox::warning(0, "Recoll", tr("Bad desktop app spec for %1: [%2]\n" "Please check the desktop file") .arg(u8s2qs(doc.mimetype), path2qs(cmdspec))); return; } // Look for the command to execute in the exec path and the filters // directory string execname = lcmd.front(); lcmd.erase(lcmd.begin()); string url = doc.url; string fn = fileurltolocalpath(doc.url); // Try to keep the letters used more or less consistent with the reslist paragraph format. map subs; #ifdef _WIN32 path_backslashize(fn); #endif subs["F"] = fn; subs["f"] = fn; // Our file:// URLs are actually raw paths. Others should be proper URLs. Only encode file://.. subs["U"] = beginswith(url, cstr_fileu) ? path_pcencode(url) : url; subs["u"] = url; execViewer(subs, true, execname, lcmd, cmdspec, doc); } static bool pagenumNeeded(const std::string& cmd) { return cmd.find("%p") != std::string::npos; } static bool linenumNeeded(const std::string& cmd) { return cmd.find("%l") != std::string::npos; } static bool termNeeded(const std::string& cmd) { return cmd.find("%s") != std::string::npos || cmd.find("%S") != std::string::npos; } static bool jsonNeeded(const std::string& cmd) { return cmd.find("%j") != std::string::npos; } template static std::string json_strings(const T& values) { std::string jsondata{'['}; for (const auto& s: values) { jsondata += json_string(s) + ','; } if (jsondata.back() == ',') jsondata.pop_back(); jsondata += ']'; return jsondata; } template static std::string json_stringdict(const T& values) { std::string jsondata{'{'}; for (const auto& [k,v]: values) { jsondata += json_string(k) + ": " + json_string(v) + ','; } if (jsondata.back() == ',') jsondata.pop_back(); jsondata += '}'; return jsondata; } static std::string json_stringVV(const vector>& values) { std::string jsondata{'['}; for (const auto& grp : values) { jsondata += json_strings(grp) + ','; } if (jsondata.back() == ',') jsondata.pop_back(); jsondata += "]"; return jsondata; } static std::string jsonData(std::shared_ptr source, Rcl::Doc& doc) { vector> docterms; source->getDocTerms(doc, docterms); HighlightData hldata; source->getTerms(hldata); std::string jsondata{"{"}; jsondata += "\"qterms\": "; jsondata += json_stringVV(docterms); jsondata += ", \"hldata\": {"; jsondata += "\"uterms\": "; jsondata += json_strings(hldata.uterms); jsondata += ", \"terms\": "; jsondata += json_stringdict(hldata.terms); jsondata += ", \"ugroups\": "; jsondata += json_stringVV(hldata.ugroups); jsondata += ", \"termgroups\": ["; for (const auto& tg : hldata.index_term_groups) { jsondata += "{\"kind\": "; switch (tg.kind) { case HighlightData::TermGroup::TGK_TERM: jsondata += "\"term\","; jsondata += "\"group\": "; jsondata += json_string(tg.term); break; case HighlightData::TermGroup::TGK_NEAR: jsondata += "\"near\","; jsondata += "\"group\": "; jsondata += json_stringVV(tg.orgroups); jsondata += ", \"slack\": "; jsondata += std::to_string(tg.slack); break; case HighlightData::TermGroup::TGK_PHRASE: jsondata += "\"phrase\","; jsondata += "\"group\": "; jsondata += json_stringVV(tg.orgroups); jsondata += ", \"slack\": "; jsondata += std::to_string(tg.slack); break; } jsondata += "},"; } if (jsondata.back() == ',') jsondata.pop_back(); jsondata += "]"; jsondata += ", \"spellexpands\": "; jsondata += json_strings(hldata.spellexpands); jsondata += "}"; jsondata += "}"; //std::cerr << "JSONDATA:--" << jsondata << "--\n"; return jsondata; } // Only the Snippets viewer sets the qterm parameter. Else, if needed, we ask for it from the query // through getFirstMatchpage() void RclMain::startNativeViewer(Rcl::Doc doc, int pagenum, QString qterm, int linenum, bool enterHistory) { std::string term = qs2utf8s(qterm); string apptag; doc.getmeta(Rcl::Doc::keyapptg, &apptag); LOGDEB("RclMain::startNativeViewer: mtype [" << doc.mimetype << "] apptag [" << apptag << "] page " << pagenum << " term [" << term << "] url [" << doc.url << "] ipath [" << doc.ipath << "]\n"); // Look for appropriate viewer string cmdplusattr = theconfig->getMimeViewerDef(doc.mimetype, apptag, prefs.useDesktopOpen); if (cmdplusattr.empty()) { QMessageBox::warning(0, "Recoll", tr("No external viewer configured for mime type [") + doc.mimetype.c_str() + "]"); return; } LOGDEB("StartNativeViewer: viewerdef from config: " << cmdplusattr << "\n"); // Separate command string and viewer attributes (if any) ConfSimple viewerattrs; string cmd; theconfig->valueSplitAttributes(cmdplusattr, cmd, viewerattrs); bool ignoreipath = viewerattrs.getBool("ignoreipath", false); int execwflags = viewerattrs.getBool("maximize", false) ? ExecCmd::EXF_MAXIMIZED : 0; // Split the command line vector lcmd; if (!stringToStrings(cmd, lcmd)) { QMessageBox::warning(0, "Recoll", tr("Bad viewer command line for %1: [%2]\n" "Please check the mimeview file") .arg(u8s2qs(doc.mimetype), path2qs(cmd))); return; } // Look for the command to execute in the exec path and the filters // directory string execpath; if (!ExecCmd::which(lcmd.front(), execpath)) { execpath = theconfig->findFilter(lcmd.front()); // findFilter returns its input param if the filter is not in // the normal places. As we already looked in the path, we // have no use for a simple command name here (as opposed to // mimehandler which will just let execvp do its thing). Erase // execpath so that the user dialog will be started further // down. if (!execpath.compare(lcmd.front())) execpath.erase(); // Specialcase text/html because of the help browser need if (execpath.empty() && !doc.mimetype.compare("text/html") && apptag.empty()) { if (lookForHtmlBrowser(execpath)) { lcmd.clear(); lcmd.push_back(execpath); lcmd.push_back("%u"); } } } // Command not found: start the user dialog to help find another one: if (execpath.empty()) { QString mt = QString::fromUtf8(doc.mimetype.c_str()); QString message = tr("The viewer specified in mimeview for %1: %2" " is not found.\nDo you want to start the preferences dialog ?") .arg(mt, path2qs(lcmd.front())); switch(QMessageBox::warning(0, "Recoll", message, QMessageBox::Yes|QMessageBox::No, QMessageBox::No)) { case QMessageBox::Yes: showUIPrefs(); if (uiprefs) uiprefs->showViewAction(mt); break; case QMessageBox::No: default: break; } // The user will have to click on the link again to try the // new command. return; } // Get rid of the command name. lcmd is now argv[1...n] lcmd.erase(lcmd.begin()); // Process the command arguments to determine if we need to create a temporary file. // If the command has a %i parameter it will manage the // un-embedding. Else if ipath is not empty, we need a temp file. // This can be overridden with the "ignoreipath" attribute bool groksipath = (cmd.find("%i") != string::npos) || ignoreipath; // We used to try being clever here, but actually, the only case // where we don't need a local file copy of the document (or // parent document) is the case of ??an HTML page?? with a non-file // URL (http or https). Trying to guess based on %u or %f is // doomed because we pass %u to xdg-open. 2023-01: can't see why the text/html // test any more. The type of URL should be enough ? Can't need a file if it's not file:// ? // If this does not work, we'll need an explicit attribute in the configuration. // Change needed for enabling an external indexer script, with, for example URLs like // joplin://x-callback-url/openNote?id=xxx and a non HTML MIME. bool wantsfile = false; bool wantsparentfile = cmd.find("%F") != string::npos; if (!wantsparentfile && (cmd.find("%f") != string::npos || urlisfileurl(doc.url))) { wantsfile = true; } if (wantsparentfile && !urlisfileurl(doc.url)) { QMessageBox::warning(0, "Recoll", tr("Viewer command line for %1 specifies " "parent file but URL is not file:// : unsupported") .arg(QString::fromUtf8(doc.mimetype.c_str()))); return; } if (wantsfile && wantsparentfile) { QMessageBox::warning(0, "Recoll", tr("Viewer command line for %1 specifies both " "file and parent file value: unsupported") .arg(QString::fromUtf8(doc.mimetype.c_str()))); return; } string url = doc.url; string fn = fileurltolocalpath(doc.url); Rcl::Doc pdoc; if (wantsparentfile) { // We want the path for the parent document. For example to // open the chm file, not the internal page. Note that we just // override the other file name in this case. if (!m_source || !m_source->getEnclosing(doc, pdoc)) { QMessageBox::warning(0, "Recoll", tr("Cannot find parent document")); return; } // Override fn with the parent's : fn = fileurltolocalpath(pdoc.url); // If the parent document has an ipath too, we need to create // a temp file even if the command takes an ipath // parameter. We have no viewer which could handle a double // embedding. Will have to change if such a one appears. if (!pdoc.ipath.empty()) { groksipath = false; } } bool istempfile = false; LOGDEB("StartNativeViewer: groksipath " << groksipath << " wantsf " << wantsfile << " wantsparentf " << wantsparentfile << "\n"); bool wantedfile_doc_has_ipath = (wantsfile && !doc.ipath.empty()) || (wantsparentfile && !pdoc.ipath.empty()); // If the command wants a file but this is not a file url, or // there is an ipath that it won't understand, we need a temp file: theconfig->setKeyDir(fn.empty() ? "" : path_getfather(fn)); if (((wantsfile || wantsparentfile) && fn.empty()) || (!groksipath && wantedfile_doc_has_ipath) ) { TempFile temp; Rcl::Doc& thedoc = wantsparentfile ? pdoc : doc; if (!FileInterner::idocToFile(temp, string(), theconfig, thedoc)) { QMessageBox::warning(0, "Recoll", tr("Cannot extract document or create temporary file")); return; } istempfile = true; rememberTempFile(temp); fn = temp.filename(); url = path_pathtofileurl(fn); } // If using an actual file, check that it exists, and if it is // compressed, we may need an uncompressed version if (!fn.empty() && theconfig->mimeViewerNeedsUncomp(doc.mimetype)) { if (!path_readable(fn)) { QMessageBox::warning(0, "Recoll", tr("Can't access file: ") + u8s2qs(fn)); return; } TempFile temp; if (FileInterner::isCompressed(fn, theconfig)) { if (!FileInterner::maybeUncompressToTemp(temp, fn, theconfig,doc)) { QMessageBox::warning(0, "Recoll", tr("Can't uncompress file: ") + path2qs(fn)); return; } } if (temp.ok()) { istempfile = true; rememberTempFile(temp); fn = temp.filename(); url = path_pathtofileurl(fn); } } if (istempfile) { QxtConfirmationMessage confirm( QMessageBox::Warning, "Recoll", tr("Opening a temporary copy. Edits will be lost if you don't save" "
them to a permanent location."), tr("Do not show this warning next time (use GUI preferences to restore).")); confirm.setOverrideSettingsKey("/Recoll/prefs/showTempFileWarning"); confirm.exec(); QSettings settings; prefs.showTempFileWarning = settings.value("/Recoll/prefs/showTempFileWarning").toInt(); } // If we are not called with a page number and/or term (which would happen for a call from the // snippets window), see if we can compute a page number + term anyway. if (m_source && ((pagenum == -1 && pagenumNeeded(cmd)) || (term.empty() && termNeeded(cmd)))) { pagenum = m_source->getFirstMatchPage(doc, term); } // If a search/find parameter is needed by the command, and if the search was a simple phrase // (expanded to a simple sequence of single terms), possibly generate a multiword // parameter. This works fine with evince, which ignores newlines and capital/diacritics when // searching (but not multiple spaces...). Not sure how this would work with other commands, so // it has its own substitution character. This just handles a very specific but common case of a // simple phrase with no term transformations or expansions finding a match, and where users are // wondering why we don't tell the command to search for it. std::string findparam; if (termNeeded(cmd)) { HighlightData hld; m_source->getTerms(hld); LOGDEB1(hld.toString() << '\n'); const auto& itg(hld.index_term_groups); if (itg.size() == 1 && itg[0].kind == HighlightData::TermGroup::TGK_PHRASE && itg[0].slack == 0) { for (const auto& grp : itg[0].orgroups) { if (grp.size() != 1) { findparam.clear(); break; } findparam += grp[0] + " "; } trimstring(findparam); LOGDEB0("startNativeViewer: findparam [ " << findparam << "]\n"); } if (findparam.empty()) findparam = term; } // Experimental and undocumented at the moment: query match terms (qualityTerms) and // full hldata as json. string jsondata; if (jsonNeeded(cmd)) jsondata = jsonData(m_source, doc); if (pagenum < 0) pagenum = 1; if (linenum < 1 && m_source && !term.empty() && linenumNeeded(cmd)) { if (doc.text.empty()) { rcldb->getDocRawText(doc); } linenum = getFirstMatchLine(doc, term); } if (linenum < 0) linenum = 1; // Substitute %xx inside arguments string efftime; if (!doc.dmtime.empty() || !doc.fmtime.empty()) { efftime = doc.dmtime.empty() ? doc.fmtime : doc.dmtime; } else { efftime = "0"; } map subs; subs["D"] = efftime; #ifdef _WIN32 path_backslashize(fn); #endif subs["f"] = fn; subs["F"] = fn; subs["i"] = FileInterner::getLastIpathElt(doc.ipath); subs["j"] = jsondata; subs["l"] = std::to_string(linenum); subs["M"] = doc.mimetype; subs["p"] = std::to_string(pagenum); subs["S"] = findparam; subs["s"] = term; // Our file:// URLs are actually raw paths. Others should be proper URLs. Only encode file://.. subs["U"] = beginswith(url, cstr_fileu) ? path_pcencode(url) : url; subs["u"] = url; // Let %(xx) access all metadata. for (const auto& ent :doc.meta) { subs[ent.first] = ent.second; } execViewer(subs, enterHistory, execpath, lcmd, cmd, doc, execwflags); } void RclMain::execViewer( const map& subs, bool enterHistory, const string& execpath, const vector& _lcmd, const string& cmd, Rcl::Doc doc, int flags) { vector lcmd; for (const auto& oparm : _lcmd) { string nparm; pcSubst(oparm, nparm, subs); LOGDEB0("" << oparm << "->" << nparm << "\n"); lcmd.push_back(nparm); } // Also substitute inside the unsplit command line for display in status bar string ncmd; pcSubst(cmd, ncmd, subs); #ifndef _WIN32 ncmd += " &"; #endif QStatusBar *stb = statusBar(); if (stb) { string prcmd; #ifdef _WIN32 prcmd = ncmd; #else string fcharset = theconfig->getDefCharset(true); transcode(ncmd, prcmd, fcharset, cstr_utf8); #endif QString msg = tr("Executing: [") + u8s2qs(prcmd) + "]"; stb->showMessage(msg, 10000); } if (enterHistory) historyEnterDoc(rcldb, g_dynconf, doc); // Do the zeitgeist thing zg_send_event(ZGSEND_OPEN, doc); // We keep pushing back and never deleting. This can't be good... ExecCmd *ecmd = new ExecCmd(ExecCmd::EXF_SHOWWINDOW | flags); m_viewers.push_back(ecmd); ecmd->startExec(execpath, lcmd, false, false); } void RclMain::startManual(const string& index) { string docdir = path_cat(theconfig->getDatadir(), "doc"); // The single page user manual is nicer if we have an index. Else // the webhelp one is nicer if it is present string usermanual = path_cat(docdir, "usermanual.html"); string webhelp = path_cat(docdir, "webhelp"); webhelp = path_cat(webhelp, "index.html"); bool has_wh = path_exists(webhelp); LOGDEB("RclMain::startManual: help index is " << (index.empty() ? "(null)" : index) << "\n"); #ifndef _WIN32 // On Windows I could not find any way to pass the fragment through rclstartw (tried to set // text/html as exception with rclstartw %u). if (!index.empty()) { usermanual += "#"; usermanual += index; } #endif Rcl::Doc doc; if (has_wh && index.empty()) { doc.url = path_pathtofileurl(webhelp); } else { doc.url = path_pathtofileurl(usermanual); } doc.mimetype = "text/html"; doc.meta[Rcl::Doc::keyapptg] = "rclman"; startNativeViewer(doc, -1, QString(), -1, false); } void RclMain::startOnlineManual() { Rcl::Doc doc; doc.url = "https://www.recoll.org/usermanual/webhelp/docs/index.html"; doc.mimetype = "text/html"; startNativeViewer(doc, -1, QString(), -1, false); } recoll-1.43.12/qtgui/recoll.rc0000644000175000017500000000010414753313624015406 0ustar dockesdockesIDI_ICON1 ICON DISCARDABLE "../desktop/recoll.ico" recoll-1.43.12/qtgui/fragbuts.h0000644000175000017500000000344215121730572015571 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _FRAGBUTS_H_INCLUDED_ #define _FRAGBUTS_H_INCLUDED_ #include #include #include #include class QAbstractButton; /* * Display a series of user-defined buttons which activate query * language fragments to augment the current search */ class FragButs : public QWidget { Q_OBJECT public: FragButs(QWidget* parent = 0); virtual ~FragButs(); FragButs(const FragButs&) = delete; FragButs& operator=(const FragButs&) = delete; struct ButFrag { QAbstractButton *button; std::string fragment; ButFrag(QAbstractButton *but, const std::string& frag) : button(but), fragment(frag) { } }; void getfrags(std::vector&); bool ok() {return m_ok;} bool isStale(time_t *reftime); private slots: void onButtonClicked(bool); signals: void fragmentsChanged(); private: std::vector m_buttons; std::string m_fn; time_t m_reftime; bool m_ok; }; #endif /* _FRAGBUTS_H_INCLUDED_ */ recoll-1.43.12/qtgui/uiprefs.ui0000644000175000017500000021240315121730573015617 0ustar dockesdockes uiPrefsDialogBase 0 0 937 750 Recoll - User Preferences true 0 User interface true 0 0 886 724 Choose editor applications Qt::Horizontal If set, starting a new instance on the same index will raise an existing one. Single application false Start with simple search mode: false Qt::Horizontal 40 20 1 0 Limit the size of the search history. Use 0 to disable, -1 for unlimited. Maximum size of search history (0: disable, -1: unlimited): false -1 1000 0 Qt::Horizontal 40 20 Start with advanced search dialog open. false Remember sort activation state. false 1 0 Set to 0 to disable and speed up startup by avoiding tree computation. Depth of side filter directory tree false 0 100 2 Qt::Horizontal 40 20 See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Side filter dates format (change needs restart) false 30 0 Qt::Horizontal 40 20 Qt::Horizontal Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Document filter choice style: Buttons Panel buttonGroup_2 Toolbar Combobox buttonGroup_2 Menu buttonGroup_2 Hide some user interface elements. Hide: Toolbars false Status bar false Show button instead. Menu bar false Show choice in menu only. Simple search type false Clear/Search buttons false Show system tray icon. false Close to tray instead of exiting. false Generate desktop notifications. false Suppress all beeps. false Show warning when opening temporary file. true Disable Qt autocompletion in search entry. false The completion only changes the entry when activated. Completion: no automatic line editing. false Start search on completer popup activation. true 1 0 Maximum number of history entries in completer list Number of history entries in completer: false 0 100 10 Qt::Horizontal 40 20 Displays the total number of occurences of the term in the index Show hit counts in completer popup. false Qt::Horizontal Highlight CSS style for query terms false 50 0 Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... true QComboBox::NoInsert 1 0 Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Display scale (default 1.0): false 0.100000000000000 1.000000000000000 Qt::Horizontal 40 20 Color scheme false 10 0 false QComboBox::NoInsert Application Qt style sheet false Resets the style sheet to default None (default) Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Choose QSS File Qt::Horizontal 40 20 Qt::Vertical QSizePolicy::Expanding 20 70 Interface language (needs restart): Note: most translations are incomplete. Leave empty to use the system environment. false 10 0 false QComboBox::NoInsert Result List 1 0 Number of entries in a result page false 1 9999 8 Qt::Horizontal 40 20 Result list font false Opens a dialog to select the result list font Helvetica-10 Resets the result list font to the system default Reset Qt::Horizontal 40 20 Edit result paragraph format string Edit result page html header insert Date format (strftime(3)) false 30 0 Abstract snippet separator false 30 0 Qt::Horizontal 40 20 User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Snippets window CSS file false Opens a dialog to select the Snippets window CSS style sheet file Choose Resets the Snippets window style Reset Qt::Horizontal 40 20 1 0 Maximum number of snippets displayed in the snippets window false 1 10000000 10 1000 Qt::Horizontal 40 20 Sort snippets by page number (default: by weight). false Display a Snippets link even if the document has no pages (needs restart). false Qt::Vertical 20 40 Result Table Hide result table header. false Show result table row headers. false Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. false To display document text instead of metadata in result table detail area, use: left mouse click Shift+click Do not display metadata when hovering over rows. false Qt::Vertical 20 40 Preview 1 0 Texts over this size will not be highlighted in preview (too slow). Maximum text size highlighted for preview (kilobytes) false 0 100000 500 3000 Qt::Horizontal 40 20 Prefer HTML to plain text for preview. false When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Use dark background when displaying HTML in dark mode. false Make links inside the preview window clickable, and start an external browser when they are clicked. Activate links in preview. false 1 0 Set to 0 to disable details/summary feature Fields display: max field length before using summary: false 0 10000 200 Qt::Horizontal 40 20 Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Plain text to HTML line style <BR> buttonGroup <PRE> buttonGroup <PRE> + wrap buttonGroup 1 0 Number of lines to be shown over a search term found by preview search. Search term line offset: false 0 99 4 Qt::Horizontal 40 20 Qt::Vertical 20 40 Shortcuts Use F1 to access the manual Qt::Horizontal 40 20 Reset shortcuts defaults Search parameters If checked, results with the same content under different names will only be shown once. Hide duplicate results. false Stemming language false Qt::Horizontal 40 20 QFrame::HLine QFrame::Sunken A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Automatically add phrase to simple searches 1 0 Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Autophrase term frequency threshold percentage false 0.200000000000000 2.000000000000000 Qt::Horizontal 40 20 QFrame::HLine QFrame::Sunken Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Dynamically build abstracts Do we synthetize an abstract even if the document seemed to have one? Replace abstracts from documents 2 0 Synthetic abstract size (characters) false 1 0 80 100000 10 250 Qt::Horizontal 40 20 1 0 Synthetic abstract context words false 2 20000 4 Qt::Horizontal 40 20 QFrame::HLine QFrame::Sunken 1 0 The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Query language magic file name suffixes. false Enable 30 0 Qt::Horizontal 40 20 Add common spelling approximations for rare terms. Automatic spelling approximation. Max spelling distance 0 100 1 Qt::Horizontal 40 20 1 0 Synonyms file false Enable 30 0 Choose Qt::Horizontal 40 20 Wild card characters *?[] will processed as punctuation instead of being expanded Ignore wild card characters in ALL terms and ANY terms modes false Qt::Vertical QSizePolicy::Expanding 20 70 External Indexes QAbstractItemView::ExtendedSelection Toggle selected Activate All Deactivate All Set path translations for the selected index or for the main one if no selection exists. Paths translations QFrame::HLine QFrame::Sunken Remove from list. This has no effect on the disk index. Remove selected Qt::Horizontal QSizePolicy::Expanding 16 20 true Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Add index Misc The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Work around Tamil QTBUG-78923 by inserting space before anchor text Qt::Vertical 20 40 Qt::Horizontal QSizePolicy::Expanding 210 20 Apply changes &OK true true Discard changes &Cancel true recoll-1.43.12/qtgui/main.cpp0000644000175000017500000004573715133120124015235 0ustar dockesdockes/* Copyright (C) 2005-2023 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #ifdef QAPPLICATION_CLASS // QAPPLICATION_CLASS is defined by singleapplication.pri #include "singleapplication/singleapplication.h" #endif #include #include #include #include #include #include #include #include #include #include #include "rcldb.h" #include "rclutil.h" #include "rclconfig.h" #include "pathut.h" #include "recoll.h" #include "smallut.h" #include "rclinit.h" #include "log.h" #include "rclmain_w.h" #include "ssearch_w.h" #include "guiutils.h" #include "smallut.h" #include "readfile.h" #include "uncomp.h" #include "cstr.h" #include "dynconf.h" #include "recollq.h" using std::string; using std::list; using std::vector; extern RclConfig *theconfig; AdvSearchHist *g_advshistory; std::mutex thetempfileslock; // Use a list not a vector so that contained objects have stable // addresses when extending. static list o_tempfiles; /* Keep an array of temporary files for deletion at exit. It happens that we erase some of them before exiting (ie: when closing a preview tab), we don't reuse the array holes for now */ TempFile *rememberTempFile(TempFile temp) { std::unique_lock locker(thetempfileslock); o_tempfiles.push_back(temp); return &o_tempfiles.back(); } void forgetTempFile(string &fn) { if (fn.empty()) return; std::unique_lock locker(thetempfileslock); for (auto& entry : o_tempfiles) { if (entry.ok() && !fn.compare(entry.filename())) { entry = TempFile(); } } fn.erase(); } void deleteAllTempFiles() { std::unique_lock locker(thetempfileslock); o_tempfiles.clear(); Uncomp::clearcache(); } std::shared_ptr rcldb; int recollNeedsExit; RclMain *mainWindow; void startManual(const string& helpindex) { if (mainWindow) mainWindow->startManual(helpindex); } const vector *getCurrentExtraDbs() { auto edbs = &prefs.activeExtraDbs; if (prefs.useTmpActiveExtraDbs) { edbs = &prefs.tmpActiveExtraDbs; } return edbs; } bool maybeOpenDb(string &reason, bool force, bool *maindberror) { LOGDEB1("maybeOpenDb: force " << force << "\n"); if (force || nullptr == rcldb) { rcldb = std::make_shared(theconfig); } rcldb->rmQueryDb(""); auto edbs = getCurrentExtraDbs(); if (!edbs->empty()) { rcldb->setExtraQueryDbs(*edbs); } Rcl::Db::OpenError error; if (!rcldb->isopen() && !rcldb->open(Rcl::Db::DbRO, &error)) { reason = "Could not open database"; if (maindberror) { reason += " in " + theconfig->getDbDir() + " : " + rcldb->getReason(); *maindberror = (error == Rcl::Db::DbOpenMainDb) ? true : false; } return false; } rcldb->setAbstractParams(-1, prefs.syntAbsLen, prefs.syntAbsCtx); rcldb->setUseSpellFuzz(prefs.autoSpell); rcldb->setMaxSpellDist(prefs.autoSpellMaxDist); return true; } // Retrieve the list currently active stemming languages. We try to // get this from the db, as some may have been added from recollindex // without changing the config. If this fails, use the config. This is // used for setting up choice menus, not updating the configuration. bool getStemLangs(vector& vlangs) { // Try from db string reason; if (maybeOpenDb(reason, false)) { vlangs = rcldb->getStemLangs(); LOGDEB0("getStemLangs: from index: " << stringsToString(vlangs) <<"\n"); return true; } else { // Cant get the langs from the index. Maybe it just does not // exist yet. So get them from the config string slangs; if (theconfig->getConfParam("indexstemminglanguages", slangs)) { stringToStrings(slangs, vlangs); return true; } return false; } } // This is never called because we _Exit() in rclmain_w.cpp static void recollCleanup() { LOGDEB2("recollCleanup: closing database\n" ); rcldb.reset(); deleteZ(theconfig); deleteAllTempFiles(); LOGDEB2("recollCleanup: done\n" ); } #ifdef QAPPLICATION_CLASS #ifdef Q_OS_WINDOWS #define WIN32_LEAN_AND_MEAN #include #endif void raiseWidget(QWidget* widget) { #ifdef Q_OS_WINDOWS HWND hwnd = (HWND)widget->winId(); // check if widget is minimized to Windows task bar if (::IsIconic(hwnd)) { ::ShowWindow(hwnd, SW_RESTORE); } ::SetForegroundWindow(hwnd); #else widget->show(); widget->raise(); widget->activateWindow(); #endif } #endif // QAPPLICATION_CLASS extern void qInitImages_recoll(); static string thisprog; // BEWARE COMPATIBILITY WITH recollq OPTIONS letters static int op_flags; #define OPT_a 0x1 #define OPT_c 0x2 #define OPT_f 0x4 #define OPT_h 0x8 #define OPT_L 0x10 #define OPT_l 0x20 #define OPT_o 0x40 #define OPT_q 0x80 #define OPT_t 0x100 #define OPT_v 0x200 #define OPT_W 0x400 #define OPT_w 0x800 static const char usage [] = "\n" "recoll [-h] [-c ] [-q query]\n" " -h : Print help and exit\n" " -c : specify config directory, overriding $RECOLL_CONFDIR\n" " -L : force language for GUI messages (e.g. -L fr)\n" " [-o|l|f|a] [-t] -q 'query' : search query to be executed as if entered\n" " into simple search. The default is to interpret the argument as a \n" " query language string (but see modifier options)\n" " In most cases, the query string should be quoted with single-quotes to\n" " avoid shell interpretation\n" " -a : the query will be interpreted as an AND query.\n" " -o : the query will be interpreted as an OR query.\n" " -f : the query will be interpreted as a filename search\n" " -l : the query will be interpreted as a query language string (default)\n" " -t : terminal display: no gui. Results go to stdout. MUST be given\n" " explicitly as -t (not ie, -at), and -q MUST\n" " be last on the command line if this is used.\n" " Use -t -h to see the additional non-gui options\n" " -w : open minimized\n" " -W : do not open at all, only create a system tray icon (needs a system tray!)\n" "recoll -v : print version\n" "recoll \n" " This is used to open a recoll url (including an ipath), and called\n" " typically from another search interface like the Unity Dash\n" ; static void Usage(void) { FILE *fp = (op_flags & OPT_h) ? stdout : stderr; fprintf(fp, "%s\n", Rcl::version_string().c_str()); fprintf(fp, "%s: Usage: %s", thisprog.c_str(), usage); exit((op_flags & OPT_h)==0); } // Extract the recoll_confdir from the args or env. Done early to setup the singleapp before the // full args processing, because we need it before creating the qapplication. static std::string get_config(int argc, char **argv) { std::string aconf; for (int i = 0; i < argc; i++) { if (!strcmp(argv[i], "-c")) { if (i < argc-1) { aconf = argv[++i]; break; } } } if (!aconf.empty()) aconf = path_canon(aconf); std::string econf; auto cp = getenv("RECOLL_CONFDIR"); if (cp) { econf = path_canon(cp); } return aconf.empty() ? econf : aconf; } int main(int argc, char **argv) { pathut_setargv0(argv[0]); // if we are named recollq or option "-t" is present at all, we // don't do the GUI thing and pass the whole to recollq for // command line / pipe usage. if (path_getsimple(argv[0]) == "recollq") exit(recollq(&theconfig, argc, argv)); for (int i = 1; i < argc; i++) { if (!strcmp(argv[i], "-t")) { exit(recollq(&theconfig, argc, argv)); } } QCoreApplication::setOrganizationName("Recoll.org"); QCoreApplication::setApplicationName("recoll"); // Do this very early because of the singleapplication choice. We'll have to do it again once we // have a db config rwSettings(false); #ifdef QAPPLICATION_CLASS // If the pref for single app is not set, then allow further instances. bool allowsecund = !prefs.singleapp; #ifdef _WIN32 // On Windows, allow further instances even if prefs.singleapp is set, but then the // secundary will just ping the primary and exit. allowsecund = true; #endif // _WIN32 auto confforsa = get_config(argc, argv); SingleApplication app(argc, argv, allowsecund, SingleApplication::User, 1000, u8s2qs(confforsa)); #ifdef _WIN32 if (prefs.singleapp && app.isSecondary()) { AllowSetForegroundWindow(DWORD(app.primaryPid())); app.sendMessage("RAISE_WIDGET"); return 0; } #endif // _WIN32 #else QApplication app(argc, argv); #endif #if defined(USING_WEBENGINE) || defined(USING_WEBKIT) // Prevent Webkit HTTP connections by setting a bogus proxy. This is for preventing network // accesses from webkit when it is used to implement the preview window. E.g. this is what // blocks fetching images from external sites. // This only partially works for for webengine (ok for image fetches, not JS). We use a request // interceptor for blocking external fetches, see rclwebpage.h. // Note that this may still be less safe than using a QTextBrowser for the Preview. QNetworkProxy proxy; proxy.setType(QNetworkProxy::Socks5Proxy); proxy.setHostName("127.0.0.1"); proxy.setUser("recoll"); proxy.setPassword(""); QNetworkProxy::setApplicationProxy(proxy); #endif // Real browser engines string a_config; string a_lang; string question; string urltoview; QStringList arguments = app.arguments(); thisprog = arguments.takeAt(0).toStdString(); while (arguments.size() > 0 && arguments.at(0).startsWith('-')) { if (arguments.at(0).size() < 2) Usage(); int argidx = 0; int maxidx = arguments.at(0).size(); while (++argidx < maxidx) { switch (arguments.at(0).at(argidx).toLatin1()) { case 'a': op_flags |= OPT_a; break; case 'c': op_flags |= OPT_c; if (arguments.size() < 2) Usage(); a_config = arguments.takeAt(1).toStdString(); maxidx = 0; // end inner loop break; case 'f': op_flags |= OPT_f; break; case 'h': op_flags |= OPT_h; Usage(); break; case 'L': op_flags |= OPT_L; if (arguments.size() < 2) Usage(); a_lang = arguments.takeAt(1).toStdString(); maxidx = 0; // end inner loop break; case 'l': op_flags |= OPT_l; break; case 'o': op_flags |= OPT_o; break; case 'q': op_flags |= OPT_q; if (arguments.size() < 2) Usage(); question = arguments.takeAt(1).toStdString(); maxidx = 0; // end inner loop break; case 't': op_flags |= OPT_t; break; case 'v': op_flags |= OPT_v; fprintf(stdout, "%s\n", Rcl::version_string().c_str()); return 0; case 'W': op_flags |= OPT_W; break; case 'w': op_flags |= OPT_w; break; default: Usage(); } } arguments.removeAt(0); } // If -q was given, all remaining non-option args are concatenated // to the query. This is for the common case recoll -q x y z to // avoid needing quoting "x y z" if (op_flags & OPT_q && arguments.size() > 0) { question += ' ' + arguments.join(' ').toStdString(); arguments.clear(); } // Else the remaining argument should be an URL to be opened if (arguments.size() == 1) { urltoview = arguments.takeAt(0).toStdString(); if (urltoview.compare(0, 7, cstr_fileu)) { Usage(); } } else if (arguments.size() > 0) Usage(); string reason; theconfig = recollinit(0, recollCleanup, 0, reason, &a_config); if (!theconfig || !theconfig->ok()) { QString msg = "Configuration problem: "; msg += QString::fromUtf8(reason.c_str()); QMessageBox::critical(0, "Recoll", msg); exit(1); } // fprintf(stderr, "recollinit done\n"); // Interface language QString slang; if (op_flags & OPT_L) { slang = u8s2qs(a_lang); } else if (!prefs.uilanguage.isEmpty()) { slang = prefs.uilanguage; } else { slang = QLocale::system().name(); } // Translations for Qt standard widgets QTranslator qt_trans(0); if (qt_trans.load(QString("qt_%1").arg(slang), #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) QLibraryInfo::path #else QLibraryInfo::location #endif (QLibraryInfo::TranslationsPath))) { app.installTranslator(&qt_trans); } // Translations for Recoll string translatdir = path_cat(theconfig->getDatadir(), "translations"); QTranslator translator(0); auto loaded = translator.load(QString("recoll_") + slang, translatdir.c_str()); if (loaded) app.installTranslator(&translator); string historyfile = path_cat(theconfig->getConfDir(), "history"); g_dynconf = new RclDynConf(historyfile); if (!g_dynconf || !g_dynconf->ok()) { QString msg = app.translate("Main", "\"history\" file is damaged, please check " "or remove it: ") + path2qs(historyfile); QMessageBox::critical(0, "Recoll", msg); exit(1); } g_advshistory = new AdvSearchHist; // fprintf(stderr, "History done\n"); rwSettings(false); // fprintf(stderr, "Settings done\n"); applyStyle(); QIcon icon; icon.addFile(QString::fromUtf8(":/images/recoll.png")); app.setWindowIcon(icon); // Create main window and set its size to previous session's RclMain w; mainWindow = &w; #ifdef QAPPLICATION_CLASS #ifdef Q_OS_WINDOWS QObject::connect(&app, &SingleApplication::receivedMessage, &w, [&w] () { raiseWidget(&w); } ); #else QObject::connect(&app, &SingleApplication::instanceStarted, &w, [&w] () { raiseWidget(&w); } ); #endif #endif string dbdir = theconfig->getDbDir(); if (dbdir.empty()) { QMessageBox::critical( 0, "Recoll", app.translate("Main", "No db directory in configuration")); exit(1); } maybeOpenDb(reason, false); if (op_flags & OPT_w) { mainWindow->showMinimized(); } else if (op_flags & OPT_W) { // Don't show anything except the systray icon if (!prefs.showTrayIcon) { QMessageBox::critical( 0, "Recoll", app.translate( "Main", "Needs \"Show system tray icon\" to be set in preferences!\n")); mainWindow->show(); } } else { switch (prefs.showmode) { case PrefsPack::SHOW_NORMAL: mainWindow->show(); break; case PrefsPack::SHOW_MAX: mainWindow->showMaximized(); break; case PrefsPack::SHOW_FULL: mainWindow->showFullScreen(); break; } } QTimer::singleShot(0, mainWindow, SLOT(initDbOpen())); if (op_flags & OPT_q) { SSearch::SSearchType stype; if (op_flags & OPT_o) { stype = SSearch::SST_ANY; } else if (op_flags & OPT_f) { stype = SSearch::SST_FNM; } else if (op_flags & OPT_a) { stype = SSearch::SST_ALL; } else { stype = SSearch::SST_LANG; } mainWindow->sSearch->onSearchTypeChanged(stype); mainWindow->sSearch->setSearchString(QString::fromLocal8Bit(question.c_str())); } else if (!urltoview.empty()) { LOGDEB("MAIN: got urltoview [" << urltoview << "]\n"); mainWindow->setUrlToView(QString::fromLocal8Bit(urltoview.c_str())); } return app.exec(); } QString myGetFileName(bool isdir, QString caption, bool filenosave, QString dirloc, QString dfltnm) { MyGFNParams parms; parms.caption = caption; parms.filenosave = filenosave; parms.dirlocation = dirloc; parms.dfltnm = dfltnm; return myGetFileName(isdir, parms); } QString myGetFileName(bool isdir, MyGFNParams &parms) { LOGDEB1("myGetFileName: isdir " << isdir << "\n"); QFileDialog dialog(0, parms.caption); #ifdef _WIN32 // The default initial directory on Windows is the Recoll install, // which is not appropriate. Change it, only for the first call // (next will start with the previous selection). static bool first{true}; if (first && parms.dirlocation.isEmpty()) { first = false; // See https://doc.qt.io/qt-5/qfiledialog.html#setDirectoryUrl // about the clsid magic (this one points to the desktop). dialog.setDirectoryUrl(QUrl("clsid:B4BFCC3A-DB2C-424C-B029-7FE99A87C641")); } #endif if (!parms.dirlocation.isEmpty()) { dialog.setDirectory(parms.dirlocation); } if (!parms.dfltnm.isEmpty()) { dialog.selectFile(parms.dfltnm); } // DontUseNativeDialog is needed for sidebarurls QFileDialog::Options opts = QFileDialog::DontUseNativeDialog; if (parms.readonly) { opts |= QFileDialog::ReadOnly; } if (isdir) { dialog.setFileMode(QFileDialog::Directory); opts |= QFileDialog::ShowDirsOnly; } else { dialog.setFileMode(QFileDialog::AnyFile); if (parms.filenosave) dialog.setAcceptMode(QFileDialog::AcceptOpen); else dialog.setAcceptMode(QFileDialog::AcceptSave); } dialog.setOptions(opts); dialog.setViewMode(QFileDialog::List); QFlags flags = QDir::NoDotAndDotDot | QDir::Hidden; if (isdir) flags |= QDir::Dirs; else flags |= QDir::Dirs | QDir::Files; dialog.setFilter(flags); if (!parms.sidedirs.empty()) { QList sidebarurls; for (const auto& dir : parms.sidedirs) { sidebarurls.push_back(QUrl::fromLocalFile(path2qs(dir))); } dialog.setSidebarUrls(sidebarurls); } if (dialog.exec() == QDialog::Accepted) { parms.dirlocation = dialog.directory().absolutePath(); return dialog.selectedFiles().value(0); } return QString(); } recoll-1.43.12/qtgui/rclhelp.h0000644000175000017500000000235115121730573015404 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef RCLHELP_H #define RCLHELP_H #include #include #include class HelpClient : public QObject { Q_OBJECT public: HelpClient(QObject *parent, const char *name = 0); // Install mapping from widget name to manual section static void installMap(std::string wname, std::string section); protected: bool eventFilter(QObject *obj, QEvent *event); static std::map helpmap; }; #endif // RCLHELP_H recoll-1.43.12/qtgui/xmltosd.cpp0000644000175000017500000001005115125756472016006 0ustar dockesdockes/* Copyright (C) 2005-2024 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "xmltosd.h" #include #include "ssearch_w.h" #include "guiutils.h" #include "log.h" #include "smallut.h" #include "recoll.h" #include "picoxml.h" #include "base64.h" using namespace std; // Handler for parsing saved simple search data class SSHXMLHandler : public PicoXMLParser { public: SSHXMLHandler(const std::string& in) : PicoXMLParser(in) { resetTemps(); } void startElement(const std::string &nm, const std::map& attrs) override { LOGDEB2("SSHXMLHandler::startElement: name [" << nm << "]\n"); if (nm == "SD") { // Simple search saved data has a type='ssearch' attribute. auto attr = attrs.find("type"); if (attr == attrs.end() || attr->second != "ssearch") { if (attr == attrs.end()) { LOGDEB("XMLTOSSS: bad type\n"); } else { LOGDEB("XMLTOSSS: bad type: " << attr->second << endl); } contentsOk = false; } resetTemps(); } } void endElement(const string& nm) override { LOGDEB2("SSHXMLHandler::endElement: name [" << nm << "]\n"); std::string curtxt{currentText}; trimstring(curtxt, " \t\n\r"); if (nm == "SL") { stringToStrings(curtxt, data.stemlangs); } else if (nm == "T") { base64_decode(curtxt, data.text); } else if (nm == "EX") { data.extindexes.push_back(base64_decode(curtxt)); } else if (nm == "SM") { if (curtxt == "QL") { data.mode = SSearch::SST_LANG; } else if (curtxt == "FN") { data.mode = SSearch::SST_FNM; } else if (curtxt == "OR") { data.mode = SSearch::SST_ANY; } else if (curtxt == "AND") { data.mode = SSearch::SST_ALL; #ifdef ENABLE_SEMANTIC } else if (curtxt == "SEM") { data.mode = SSearch::SST_SEM; #endif // SEMANTIC } else { LOGERR("BAD SEARCH MODE: [" << curtxt << "]\n"); contentsOk = false; return; } } else if (nm == "AS") { stringToStrings(curtxt, data.autosuffs); } else if (nm == "AP") { data.autophrase = true; } else if (nm == "SD") { // Closing current search descriptor. Finishing touches... resetTemps(); isvalid = contentsOk; } currentText.clear(); return ; } void characterData(const std::string &str) override { currentText += str; } // The object we set up SSearchDef data; bool isvalid{false}; bool contentsOk{true}; private: void resetTemps() { currentText = whatclause = ""; text.clear(); } // Temporary data while parsing. std::string currentText; std::string whatclause; string text; }; bool xmlToSSearch(const string& xml, SSearchDef& data) { SSHXMLHandler handler(xml); if (!handler.Parse() || !handler.isvalid) { LOGERR("xmlToSSearch: parse failed for [" << xml << "]\n"); return false; } data = handler.data; return true; } recoll-1.43.12/qtgui/i18n/0000755000175000017500000000000015133170400014346 5ustar dockesdockesrecoll-1.43.12/qtgui/i18n/recoll_hu.ts0000644000175000017500000074451515124431112016712 0ustar dockesdockes ActSearchDLG Menu search Menü keresés AdvSearch All clauses Minden feltétel Any clause Bármely feltétel texts texts spreadsheets spreadsheets presentations presentations media Média messages messages other Egyéb Bad multiplier suffix in size filter Hibás sokszorozó utótag a méretszűrőben! text Szöveg spreadsheet Munkafüzet presentation Prezentáció message Üzenet Advanced Search Advanced Search History Next History Next History Prev History Prev Load next stored search Load next stored search Load previous stored search Load previous stored search AdvSearchBase Advanced search Összetett keresés Restrict file types Fájltípus Save as default Mentés alapértelmezettként Searched file types Keresett fájltípusok All ----> Mind -----> Sel -----> Kijelölt -----> <----- Sel <----- Kijelölt <----- All <----- Mind Ignored file types Kizárt fájltípusok Enter top directory for search A keresés kezdő könyvtárának megadása Browse Tallózás Restrict results to files in subtree: Keresés az alábbi könyvtárból indulva: Start Search A keresés indítása Search for <br>documents<br>satisfying: A keresés módja: Delete clause Feltétel törlése Add clause Új feltétel Check this to enable filtering on file types A találatok szűrése a megadott fájltípusokra By categories Kategória Check this to use file categories instead of raw mime types A találatok szűrése MIME típus helyett fájlkategóriára Close Bezárás All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. A jobb oldali nem üres mezők „Minden feltétel” választásakor ÉS, „Bármely feltétel” választásakor VAGY kapcsolatban lesznek.<br>A „Bármely szó”, „Minden szó” és az „Egyik sem” típusú mezőkben szavak és idézőjelbe tett részmondatok kombinációja adható meg.<br>Az üres mezők figyelmen kívül lesznek hagyva. Invert Megfordítás Minimum size. You can use k/K,m/M,g/G as multipliers Minimális méret, sokszorozó utótag lehet a k/K, m/M, g/G Min. Size legalább Maximum size. You can use k/K,m/M,g/G as multipliers Maximális méret, sokszorozó utótag lehet a k/K, m/M, g/G Max. Size legfeljebb Select Select Filter Szűrők From ettől To eddig Check this to enable filtering on dates A találatok szűrése a fájlok dátuma alapján Filter dates Dátum Find Keresés Check this to enable filtering on sizes A találatok szűrése a fájlok mérete alapján Filter sizes Méret Filter birth dates Szűrje a születési dátumokat. ConfIndexW Can't write configuration file A beállítófájl írása sikertelen Global parameters Általános beállítások Local parameters Helyi beállítások Search parameters Keresési beállítások Top directories Kezdő könyvtárak The list of directories where recursive indexing starts. Default: your home. A megadott könyvtárak rekurzív indexelése. Alapértelmezett értéke a saját könyvtár. Skipped paths Kizárt elérési utak These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Stemming languages A szótőképzés nyelve The languages for which stemming expansion<br>dictionaries will be built. Ezen nyelvekhez készüljön szótövező és -toldalékoló szótár Log file name A naplófájl neve The file where the messages will be written.<br>Use 'stderr' for terminal output Az üzenetek kiírásának a helye.<br>A „stderr” a terminálra küldi az üzeneteket. Log verbosity level A naplózás szintje This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Az üzenetek mennyiségének szabályozása,<br>a hibaüzenetekre szorítkozótól a részletes hibakeresésig. Index flush megabytes interval Indexírási intervallum (MB) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Az az adatmennyiség, melyet két lemezre írás között az indexelő feldolgoz.<br>Segíthet kézben tartani a memóriafoglalást. Alapértelmezett: 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. No aspell usage Az aspell mellőzése Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. A szóvizsgálóban az aspell használatának mellőzése a hasonló szavak keresésekor.<br>Hasznos, ha az aspell nincs telepítve vagy nem működik. Aspell language Az aspell nyelve The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Az aspell szótár nyelve. pl. „en” vagy „hu”...<br>Ha nincs megadva, akkor az NLS környezet alapján lesz beállítva, ez általában megfelelő. A rendszerre telepített nyelveket az „aspell config” parancs kiadása után a „data-dir” könyvtárban található .dat fájlokból lehet megtudni. Database directory name Az adatbázis könyvtárneve The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Az indexet tartalmazó könyvtár neve.<br>Relatív elérési út a beállítási könyvtárhoz képest értendő. Alapértelmezett: „xapiandb”. Unac exceptions Unac kivételek <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Az unac alapértelmezetten eltávolít minden ékezetet és szétbontja a ligatúrákat. Az itt megadott kivételekkel lehetőség van adott karakterek esetén tiltani a műveletet, ha a használt nyelv ezt szükségessé teszi. Ezen kívül előírhatók további felbontandó karakterek is. Az egyes elemeket egymástól szóközzel kell elválasztani. Egy elem első karaktere az eredetit, a további karakterek a várt eredményt határozzák meg. Process the WEB history queue A webes előzmények feldolgozása Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) A Firefoxszal látogatott oldalak indexelése<br>(a Firefox Recoll kiegészítőjét is telepíteni kell) Web page store directory name A weblapokat tároló könyvtár neve The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. A látogatott weblapok másolatát tároló könyvtár neve.<br>Relatív elérési út a beállításokat tároló könyvtárhoz képest értendő. Max. size for the web store (MB) A webes tároló max. mérete (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). A méret elérésekor a legkorábbi bejegyzések törlődnek.<br>Csak a növelésnek van haszna, mivel csökkentéskor a már létező fájl nem lesz kisebb (csak egy része állandóan kihasználatlan marad). Automatic diacritics sensitivity Automatikus ékezetérzékenység <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatikusan különbözőnek tekinti az ékezetes betűket az ékezet nélküli párjuktól, ha tartalmaz ékezetes betűt a kifejezés (az unac_except_trans kivételével). Egyébként a keresőnyelv <i>D</i> módosítójával érhető el ugyanez. Automatic character case sensitivity Kis-és nagybetűk automatikus megkülönböztetése <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatikusan különbözőnek tekinti a kis-és nagybetűket, ha az első karakter kivételével bárhol tartalmaz nagybetűt a kifejezés. Egyébként a keresőnyelv <i>C</i> módosítójával érhető el ugyanez. Maximum term expansion count A toldalékok maximális száma <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Egy szó toldalékainak maximális száma (pl. helyettesítő karakterek használatakor). Az alapértelmezett 10 000 elfogadható érték, és elkerülhető vele a felhasználói felület időleges válaszképtelensége is. Maximum Xapian clauses count A Xapian feltételek maximális száma <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. Egy Xapian kereséshez felhasználható elemi feltételek maximális száma. Néha a szavak toldalékolása szorzó hatású, ami túlzott memóriahasználathoz vezethet. Az alapértelmezett 100 000 a legtöbb esetben elegendő, de nem is támaszt különleges igényeket a hardverrel szemben. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Indexer log file name Indexer log file name If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Web history Webes előzmények Process the Web history queue Feldolgozni a webes előzmények sorát. (by default, aspell suggests mispellings when a query has no results). (alapértelmezés szerint az aspell javaslatokat tesz a helyesírási hibákra, amikor egy lekérdezésnek nincsenek eredményei) Page recycle interval Oldal újratöltési időközönként <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Alapértelmezés szerint csak egy példányt tartunk meg egy URL-ből a gyorsítótárban. Ezt megváltoztathatjuk azzal, hogy beállítjuk egy értékre, amely meghatározza, milyen gyakorisággal tartunk meg több példányt ('nap', 'hét', 'hónap', 'év'). Vegye figyelembe, hogy az időköz növelése nem törli az meglévő bejegyzéseket. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Megjegyzés: Az öreg lapok törlődnek az újak helyére, amikor elérjük a maximális méretet. Jelenlegi méret: %1 Start folders Indító mappák The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Az indexelendő mappák/lista könyvtárak. Az almappák rekurzívan feldolgozásra kerülnek. Alapértelmezett: a saját otthonod. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Lemez telítettségi küszöb százaléka, amikor leállítjuk az indexelést (pl. 90 a 90%-os telítettségnél, 0 vagy 100 a korlát nélkül) Browser add-on download folder Böngésző bővítmény letöltési mappa Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Csak akkor állítsa be ezt, ha beállította a "Letöltések almappája" paramétert a Web böngésző kiegészítő beállításaiban. Ebben az esetben ez teljes elérési út legyen a könyvtárhoz (pl. /home/[me]/Letöltések/saját-almappám) Store some GUI parameters locally to the index Lokálisan tárolja néhány GUI paramétert az indexben. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index A GUI beállítások általában egy globális fájlban vannak tárolva, ami minden indexre érvényes. Ennek a paraméternek a beállítása néhány beállítást, például a találati tábla beállításait specifikussá teszi az indexre. Suspend the real time indexer when running on battery Felfüggeszteni a valós idejű indexelőt, amikor az akkumulátoron fut. The indexer will wait for a return on AC and reexec itself when it happens Az indexelő várni fog egy visszatérésre az AC-n, és újra végrehajtja magát, amikor ez megtörténik. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. A könyvtárak/mappák listája, amelyeket rekurzívan indexelni kell az alkönyvtáraikkal együtt.<br>A '~' karakter kiterjesztése a saját otthoni könyvtáradra, ami az alapértelmezett kezdeti érték. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types MIME típusok An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Az indexelendő MIME típusok listája.<br>Csak ezek a típusok kerülnek az indexbe. Rendesen üres és inaktív. Exclude mime types Kizárt MIME típusok Mime types not to be indexed Ezek a MIME típusok kimaradnak az indexelésből Max. compressed file size (KB) A tömörített fájlok max. mérete (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. A tömörített fájlok indexbe kerülésének határértéke. -1 esetén nincs korlát. 0 esetén soha nem történik kicsomagolás. Max. text file size (MB) Szövegfájl max. mérete (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. A szövegfájlok indexbe kerülésének határértéke. -1 esetén nincs korlát. Az óriásira nőtt naplófájlok feldolgozása kerülhető el így. Text file page size (KB) Szövegfájl lapmérete (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Ha be van állítva (nem egyenlő -1), akkor a szövegfájlok indexelése ilyen méretű darabokban történik. Ez segítséget nyújt a nagyon nagy méretű szövegfájlokban (pl. naplófájlok) való kereséshez. Max. filter exec. time (s) Max. filter exec. time (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. A túl hosszú ideig futó külső szűrők leállítása Néha előfordul (pl. postscript esetén), hogy a szűrő végtelen ciklusba kerül. -1 esetén nincs korlát. Global Minden könyvtárra vonatkozik ConfigSwitchDLG Switch to other configuration Váltás más konfigurációra ConfigSwitchW Choose other Válasszon másikat Choose configuration directory Válassza ki a konfigurációs könyvtárat. CronToolW Cron Dialog Cron időzítő <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A <span style=" font-weight:600;">Recoll</span> indexelő időzítése (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Minden mezőben megadható csillag (*), szám, számok listája (1,3,5) vagy számtartomány (1-7). Általánosabban, a mezők jelentése ugyanaz, <span style=" font-style:italic;">mint</span> a crontab fájlban, és a teljes crontab szintaxis használható, lásd a crontab(5) kézikönyvlapot.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Például <span style=" font-family:'Courier New,courier';">*</span>-ot írva a <span style=" font-style:italic;">naphoz, </span><span style=" font-family:'Courier New,courier';">12,19</span>-et az <span style=" font-style:italic;">órához</span> és <span style=" font-family:'Courier New,courier';">15</span>-öt a <span style=" font-style:italic;">perchez</span>, a recollindex minden nap 12:15-kor és du. 7:15-kor fog elindulni.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Túl gyakori ütemezés helyett célszerűbb lehet a valós idejű indexelés engedélyezése.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) A hét napja (* vagy 0-7, 0 vagy 7 a vasárnap) Hours (* or 0-23) Óra (* vagy 0-23) Minutes (0-59) Perc (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A <span style=" font-style:italic;">Kikapcsolás</span> megszünteti, a <span style=" font-style:italic;">Bekapcsolás</span> aktiválja az időzített indexelést, a <span style=" font-style:italic;">Mégsem</span> nem változtat a beállításon.</p></body></html> Enable Bekapcsolás Disable Kikapcsolás It seems that manually edited entries exist for recollindex, cannot edit crontab Úgy tűnik, egy kézi bejegyzése van a recollindexnek, nem sikerült a crontab szerkesztése! Error installing cron entry. Bad syntax in fields ? Hiba a cron bejegyzés hozzáadásakor! Rossz szintaxis a mezőkben? EditDialog Dialog Párbeszédablak EditTrans Source path Eredeti elérési út Local path Helyi elérési út Config error Beállítási hiba Original path Eredeti elérési út Path in index Útvonal az indexben Translated path Fordított elérési útvonal EditTransBase Path Translations Elérési út átalakítása Setting path translations for Elérési út-átalakítás ehhez: Select one or several file types, then use the controls in the frame below to change how they are processed Kijelölhető egy vagy több elérési út is Add Hozzáadás Delete Törlés Cancel Mégsem Save Mentés FirstIdxDialog First indexing setup Az indexelés beállítása első induláskor <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">A jelenlegi beállításokhoz még nem tartozik index.</span><br /><br />A saját mappa indexelése javasolt alapbeállításokkal az <span style=" font-style:italic;">Indexelés indítása most</span> gombbal indítható. A beállítások később módosíthatók.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Az alábbi hivatkozások az indexelés finomhangolására és időzítésére szolgálnak.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ezek a lehetőségek később a <span style=" font-style:italic;">Beállítások</span> menüből is elérhetők.</p></body></html> Indexing configuration Az indexelés beállításai This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Megadható az indexelendő könyvtárak köre és egyéb paraméterek, például kizárt elérési utak vagy fájlnevek, alapértelmezett betűkészlet stb. Indexing schedule Az időzítés beállításai This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Lehetőség van ütemezett indításra és valós idejű indexelésre, az előbbi időzítése is beállítható (a cron segítségével). Start indexing now Indexelés indítása most FragButs %1 not found. A fájl nem található: %1. %1: %2 %1: %2 Fragment Buttons Fragment Buttons Query Fragments Statikus szűrők IdxSchedW Index scheduling setup Az indexelés időzítése <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A <span style=" font-weight:600;">Recoll</span> indexelő futhat folyamatosan, így a fájlok változásakor az index is azonnal frissül, vagy indulhat meghatározott időközönként.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A kézikönyv segítséget nyújt a két eljárás közül a megfelelő kiválasztásához (F1).</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Lehetőség van az időzített indexelés ütemezésére, vagy a valós idejű indexelő automatikus indítására bejelentkezéskor (vagy mindkettőre, bár ez ritkán célszerű).</p></body></html> Cron scheduling Cron időzítő The tool will let you decide at what time indexing should run and will install a crontab entry. Az indexelés kezdő időpontjainak beállítása egy crontab bejegyzés által. Real time indexing start up Valós idejű indexelés indítása Decide if real time indexing will be started when you log in (only for the default index). A valós idejű indexelés indítása bejelentkezéskor (csak az alapértelmezett indexhez). ListDialog Dialog Párbeszédablak GroupBox GroupBox Main No db directory in configuration Nincs adatbáziskönyvtár a beállítófájlban Could not open database in Could not open database in . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. Configuration problem (dynconf Configuration problem (dynconf "history" file is damaged or un(read)writeable, please check or remove it: Az előzmények fájlja sérült vagy nem lehet írni/olvasni, ellenőrizni vagy törölni kell: "history" file is damaged, please check or remove it: "history" file is damaged, please check or remove it: Needs "Show system tray icon" to be set in preferences! Szükséges a "Rendszerikon megjelenítése" beállítása a preferenciákban! PTransEdit Path in index Útvonal az indexben Translated path Fordított elérési útvonal Config error Beállítási hiba Original path Eredeti elérési út Local path Helyi elérési út PTransEditBase Path Translations Elérési út átalakítása Select one or several file types, then use the controls in the frame below to change how they are processed Kijelölhető egy vagy több elérési út is Add Hozzáadás Delete Törlés Cancel Mégsem Save Mentés Preview &Search for: Kere&sés: &Next &Következő &Previous &Előző Match &Case Kis- és &nagybetűk Clear Törlés Creating preview text Előnézet létrehozása Loading preview text into editor Az előnézet betöltése a megjelenítőbe Cannot create temporary directory Cannot create temporary directory Cancel Mégsem Close Tab Lap bezárása Missing helper program: Hiányzó segédprogram: Can't turn doc into internal representation for Nem sikerült értelmezni: Cannot create temporary directory: Cannot create temporary directory: Error while loading file Hiba a fájl betöltése közben! Form Form Tab 1 Tab 1 Open Megnyitás Canceled Canceled Error loading the document: file missing. Error loading the document: file missing. Error loading the document: no permission. Error loading the document: no permission. Error loading: backend not configured. Error loading: backend not configured. Error loading the document: other handler error<br>Maybe the application is locking the file ? Error loading the document: other handler error<br>Maybe the application is locking the file ? Error loading the document: other handler error. Error loading the document: other handler error. <br>Attempting to display from stored text. <br>Attempting to display from stored text. Could not fetch stored text Could not fetch stored text Previous result document Previous result document Next result document Next result document Preview Window Preview Window Close Window Close Window Next doc in tab Next doc in tab Previous doc in tab Previous doc in tab Close tab Close tab Print tab Print tab Close preview window Close preview window Show next result Show next result Show previous result Show previous result Print Nyomtatás PreviewTextEdit Show fields Mezők Show main text Tartalom Print Nyomtatás Print Current Preview A jelenlegi nézet nyomtatása Show image Kép Select All Mindent kijelöl Copy Másolás Save document to file Mentés fájlba Fold lines Sortörés Preserve indentation Eredeti tördelés Open document Open document Reload as Plain Text Újratöltés sima szövegként Reload as HTML Újratöltés HTML-ként QObject Global parameters Általános beállítások Local parameters Helyi beállítások <b>Customised subtrees <b>Egyedi alkönyvtárak The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Az indexelt hierarchián belüli alkönyvtárak listája,<br> melyekre eltérő beállítások vonatkoznak. Alapértelmezetten üres. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Ha a fenti listából semmi vagy egy üres sor van kijelölve, úgy a következő jellemzők<br>az indexelendő legfelső szintű, egyébként a kijelölt mappára vonatkoznak.<br>A +/- gombokkal lehet a listához könyvtárakat adni vagy onnan törölni. Skipped names Kizárt nevek These are patterns for file or directory names which should not be indexed. Mintával megadható fájl- és könyvtárnevek, melyeket nem kell indexelni Default character set Default character set This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Follow symbolic links Szimbolikus linkek követése Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Indexeléskor kövesse a szimbolikus linkeket.<br>Alapértelmezetten ki van kapcsolva, elkerülendő a dupla indexelést. Index all file names Minden fájlnév indexelése Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true A Recoll számára ismeretlen típusú vagy értelmezhetetlen fájlok nevét is indexelje.<br>Alapértelmezetten engedélyezve van. Beagle web history Beagle web history Search parameters Keresési beállítások Web history Webes előzmények Default<br>character set Alapértelmezett<br>karakterkódolás Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. A karakterkódolásról információt nem tároló fájlok (például egyszerű szöveges fájlok) kódolása.<br>Alapértelmezetten nincs megadva, és a nyelvi környezet (NLS) alapján lesz beállítva. Ignored endings Kizárt kiterjesztések These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Az ilyen fájlnévvégződésű fájlok csak a nevük alapján indexelendők (nem történik MIME típusfelismerés, kicsomagolás és tartalomindexelés sem). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. These are patterns for file or directory names which should not be indexed. Ezek a minták fájl- vagy könyvtárnév-minták, amelyeket nem szabad indexelni. QWidget Create or choose save directory Mentési könyvtár megadása Choose exactly one directory Csak pontosan egy könyvtár adható meg! Could not read directory: A könyvtár nem olvasható: Unexpected file name collision, cancelling. A fájl már létezik, ezért ki lesz hagyva. Cannot extract document: Nem sikerült kicsomagolni a fájlt: &Preview &Előnézet &Open &Megnyitás Open With Megnyitás ezzel: Run Script Szkript futtatása Copy &File Name &Fájlnév másolása Copy &URL &URL másolása &Write to File Menté&s fájlba Save selection to files A kijelölés mentése fájlba Preview P&arent document/folder A szülő előné&zete &Open Parent document/folder A szülő megnyi&tása Find &similar documents &Hasonló dokumentum keresése Open &Snippets window Ér&demi részek Show subdocuments / attachments Aldokumentumok / csatolmányok &Open Parent document &Open Parent document &Open Parent Folder &Open Parent Folder Copy Text Szöveg másolása Copy &File Path Másolás &Fájl elérési útja Copy File Name Fájlnév másolása QxtConfirmationMessage Do not show again. Ne jelenjen meg újra. RTIToolW Real time indexing automatic start A valós idejű indexelés automatikus indítása <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A <span style=" font-weight:600;">Recoll</span> indexelője indítható szolgáltatásként, így az index minden fájlváltozáskor azonnal frissül. Előnye a mindig naprakész index, de folyamatosan igénybe veszi az erőforrásokat.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Az indexelő szolgáltatás indítása a munkamenettel Also start indexing daemon right now. Az indexelő szolgáltatás indítása most Replacing: Csere: Replacing file Fájl cseréje Can't create: Nem sikerült létrehozni: Warning Figyelmeztetés Could not execute recollindex A recollindex indítása sikertelen Deleting: Törlés: Deleting file Fájl törlése Removing autostart Az autostart kikapcsolása Autostart file deleted. Kill current process too ? Az autostart fájl törölve lett. A most futó indexelőt is le kell állítani? Configuration name Konfigurációs név Short alphanumeric nickname for this config Rövid alfanumerikus becenév ehhez a konfigurációhoz Could not find Nem található RclCompleterModel Hits Találatok Hits RclMain About Recoll A Recoll névjegye Executing: [ Végrehajtás: [ Cannot retrieve document info from database Nem sikerült az adatbázisban információt találni a dokumentumról. Warning Figyelmeztetés Can't create preview window Nem sikerült létrehozni az előnézetet Query results A keresés eredménye Document history Előzmények History data Előzményadatok Indexing in progress: Az indexelés folyamatban: Files Files Purge törlés Stemdb szótövek adatbázisa Closing lezárás Unknown ismeretlen This search is not active any more Ez a keresés már nem aktív. Can't start query: Can't start query: Bad viewer command line for %1: [%2] Please check the mimeconf file Bad viewer command line for %1: [%2] Please check the mimeconf file Cannot extract document or create temporary file Nem sikerült a kicsomagolás vagy az ideiglenes fájl létrehozása. (no stemming) (nincs szótőképzés) (all languages) (minden nyelv) error retrieving stemming languages hiba a szótőképzés nyelvének felismerésekor Update &Index &Index frissítése Indexing interrupted Az indexelés megszakadt. Stop &Indexing Indexelé&s leállítása All Mind media Média message Üzenet other Egyéb presentation Prezentáció spreadsheet Munkafüzet text Szöveg sorted rendezett filtered szűrt External applications/commands needed and not found for indexing your file types: External applications/commands needed and not found for indexing your file types: No helpers found missing Nincs hiányzó segédprogram. Missing helper programs Hiányzó segédprogramok Save file dialog Save file dialog Choose a file name to save under Choose a file name to save under Document category filter Document category filter No external viewer configured for mime type [ Nincs külső megjelenítő beállítva ehhez a MIME típushoz [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? A mimeview fájlban megadott megjelenítő ehhez: %1: %2 nem található. Megnyissuk a beállítások ablakát? Can't access file: A fájl nem elérhető: Can't uncompress file: Nem sikerült kicsomagolni a fájlt: Save file Fájl mentése Result count (est.) Találatok száma (kb.) Query details A keresés részletei Could not open external index. Db not open. Check external index list. Egy külső index megnyitása nem sikerült. Ellenőrizni kell a külső index listáját. No results found Nincs találat None semmi Updating frissítés Done kész Monitor figyelés Indexing failed Sikertelen indexelés The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone A jelenleg futó indexelő nem erről a felületről lett indítva.<br>Az OK gombbal kilőhető, a Mégsem gombbal meghagyható. Erasing index Index törlése Reset the index and start from scratch ? Indulhat az index törlése és teljes újraépítése? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program A keresés folyamatban van.<br>Az indexelő korlátozásai miatt<br>megszakításkor a program kilép. Error Hiba Index not open Nincs megnyitott index Index query error Indexlekérdezési hiba Indexed Mime Types Indexed Mime Types Content has been indexed for these MIME types: Content has been indexed for these MIME types: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Can't update index: indexer running Nem sikerült frissíteni az indexet: az indexelő már fut. Indexed MIME Types Indexelt MIME típusok Bad viewer command line for %1: [%2] Please check the mimeview file Hibás a megjelenítő parancssor ehhez: %1: [%2] Ellenőrizni kell a mimeview fájlt! Viewer command line for %1 specifies both file and parent file value: unsupported %1 megjelenítő parancssora fájlt és szülőt is megad: ez nem támogatott. Cannot find parent document Nem található a szülődokumentum. Indexing did not run yet Az indexelő jelenleg nem fut. External applications/commands needed for your file types and not found, as stored by the last indexing pass in Az alábbi külső alkalmazások/parancsok hiányoznak a legutóbbi indexelés során keletkezett napló alapján -----> Index not up to date for this file. Refusing to risk showing the wrong entry. A fájl bejegyzése az indexben elavult. Esetlegesen téves adatok megjelenítése helyett kihagyva. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Indexer running so things should improve when it's done Indexer running so things should improve when it's done Sub-documents and attachments Aldokumentumok és csatolmányok Document filter Dokumentumszűrő Index not up to date for this file. Refusing to risk showing the wrong entry. A fájl bejegyzése az indexben elavult. Esetlegesen téves adatok megjelenítése helyett kihagyva. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Az OK-ra kattintva frissíthető a fájl indexbejegyzése, ennek végeztével újra kell futtatni a keresést. The indexer is running so things should improve when it's done. Az indexelő fut, ennek végeztére a dolgok még helyreállhatnak. The document belongs to an external indexwhich I can't update. The document belongs to an external indexwhich I can't update. Click Cancel to return to the list. Click Ignore to show the preview anyway. Click Cancel to return to the list. Click Ignore to show the preview anyway. Duplicate documents Másodpéldányok These Urls ( | ipath) share the same content: Ezek az URL-ek (| ipath) azonos tartalmúak: Bad desktop app spec for %1: [%2] Please check the desktop file Hibás alkalmazásbeállítás ehhez:%1: [%2] Ellenőrizni kell az asztali beállítófájlt! Bad paths Hibás elérési utak Bad paths in configuration file: Hibás elérési utak a beállítófájlban: Selection patterns need topdir A mintához kezdő könyvtár szükséges Selection patterns can only be used with a start directory Minta használatához kezdő könyvtárt is meg kell adni. No search Nincs keresés No preserved previous search Nincs előzőleg mentett keresés Choose file to save Mentés ide Saved Queries (*.rclq) Mentett keresések (*.rclq) Write failed Sikertelen írásművelet Could not write to file A fájl írása sikertelen Read failed Sikertelen olvasás Could not open file: Nem sikerült megnyitni a fájlt: Load error Betöltési hiba Could not load saved query Nem sikerült betölteni a mentett keresést Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Egy ideiglenes másolat lesz megnyitva. A módosítások<br/>megőrzéséhez a fájlt el kell menteni máshová. Do not show this warning next time (use GUI preferences to restore). Ne jelenjen meg többször (a GUI beállításaiban visszaállítható). Disabled because the real time indexer was not compiled in. Nem elérhető, mert a valós idejű indexelés nincs a programba fordítva. This configuration tool only works for the main index. Ez a beállítóeszköz csak az elsődleges indexszel használható. The current indexing process was not started from this interface, can't kill it A jelenleg futó indexelő nem erről a felületről lett indítva, nem állítható le. The document belongs to an external index which I can't update. A dokumentum külső indexhez tartozik, mely innen nem frissíthető. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Visszatérés a listához: Mégsem.<b>Az előnézet megnyitása mindenképp (és megjegyzés erre a munkamenetre): Mellőzés. Index scheduling Az időzítés beállításai Sorry, not available under Windows for now, use the File menu entries to update the index Sajnos Windows rendszeren még nem vehető igénybe, a Fájl menüből lehet frissíteni az indexet. Can't set synonyms file (parse error?) Nem lehet betölteni a szinonímafájlt (értelmezési hiba?) Index locked Az index zárolva van Unknown indexer state. Can't access webcache file. Az indexelő állapota ismeretlen. A webes gyorstár nem hozzáférhető. Indexer is running. Can't access webcache file. Az indexelő fut. A webes gyorstár nem hozzáférhető. with additional message: with additional message: Non-fatal indexing message: Non-fatal indexing message: Types list empty: maybe wait for indexing to progress? Types list empty: maybe wait for indexing to progress? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Tools Eszközök Results Találatok (%d documents/%d files/%d errors/%d total files) (%d documents/%d files/%d errors/%d total files) (%d documents/%d files/%d errors) (%d documents/%d files/%d errors) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Indexing done Indexing done Can't update index: internal error Can't update index: internal error Index not up to date for this file.<br> Index not up to date for this file.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Also, it seems that the last index update for the file failed.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> documents találatok a lapon: document document files files file fájl errors errors error hiba total files) total files) No information: initial indexing not yet performed. No information: initial indexing not yet performed. Batch scheduling Batch scheduling The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Confirm Confirm Erasing simple and advanced search history lists, please click Ok to confirm Erasing simple and advanced search history lists, please click Ok to confirm Could not open/create file Could not open/create file F&ilter F&ilter Could not start recollindex (temp file error) Could not start recollindex (temp file error) Could not read: Could not read: This will replace the current contents of the result list header string and GUI qss file name. Continue ? This will replace the current contents of the result list header string and GUI qss file name. Continue ? You will need to run a query to complete the display change. You will need to run a query to complete the display change. Simple search type Simple search type Any term Bármely szó All terms Minden szó File name Fájlnév Query language Keresőnyelv Stemming language A szótőképzés nyelve Main Window Main Window Focus to Search Focus to Search Focus to Search, alt. Focus to Search, alt. Clear Search Clear Search Focus to Result Table Focus to Result Table Clear search Clear search Move keyboard focus to search entry Move keyboard focus to search entry Move keyboard focus to search, alt. Move keyboard focus to search, alt. Toggle tabular display Toggle tabular display Move keyboard focus to table Move keyboard focus to table Flushing Öblítés Show menu search dialog Menü keresési párbeszédablak megjelenítése Duplicates Ismétlődések Filter directories Szűrje a könyvtárakat. Main index open error: Fő index megnyitási hiba: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Az index lehet, hogy sérült. Talán próbálja meg futtatni a xapian-check parancsot, vagy újraépíteni az indexet? This search is not active anymore Ez a keresés már nem aktív. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Néző parancssor a %1 számára megadja a szülőfájlt, de az URL nem file:// : nem támogatott The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? A megjelenítő, amelyet a mimeview-hez adtak meg %1: %2 esetén, nem található. Szeretné elindítani a beállítások párbeszédpanelt? Show advanced search dialog Mutassa az összetett keresési párbeszédpanelt. with additional message: RclMainBase Previous page Előző oldal Next page Következő oldal &File &Fájl E&xit &Kilépés &Tools &Eszközök &Help &Súgó &Preferences &Beállítások Search tools Search tools Result list Találati lista &About Recoll A Recoll &névjegye Document &History &Előzmények Document History Előzmények &Advanced Search Összetett &keresés Advanced/complex Search Összetett keresés &Sort parameters &Rendezési beállítások Sort parameters Rendezési beállítások Next page of results Következő oldal Previous page of results Előző oldal &Query configuration &Query configuration &User manual &Felhasználói kézikönyv Recoll Recoll Ctrl+Q Ctrl+Q Update &index Az &index frissítése Term &explorer &Szóvizsgáló Term explorer tool Szóvizsgáló External index dialog Külső indexek &Erase document history &Előzmények törlése First page Első oldal Go to first page of results Első oldal &Indexing configuration &Az indexelés beállításai All Mind &Show missing helpers &Show missing helpers PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen &Teljes képernyő F11 F11 Full Screen Teljes képernyő &Erase search history Keresé&si előzmények törlése sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Növekvő rendezés dátum szerint sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Csökkenő rendezés dátum szerint Show Query Details A keresés részletei Show results as table Show results as table &Rebuild index Index új&raépítése &Show indexed types &Show indexed types Shift+PgUp Shift+PgUp &Indexing schedule &Az időzítés beállításai E&xternal index dialog &Külső indexek &Index configuration &Indexelés &GUI configuration &Felhasználói felület &Results &Találatok Sort by date, oldest first Növekvő rendezés dátum szerint Sort by date, newest first Csökkenő rendezés dátum szerint Show as table Táblázatos nézet Show results in a spreadsheet-like table A találatok megjelenítése táblázatban Save as CSV (spreadsheet) file Mentés CSV (strukturált szöveg) fájlba Saves the result into a file which you can load in a spreadsheet A találatok mentése egy táblázatkezelővel megnyitható fájlba Next Page Következő oldal Previous Page Előző oldal First Page Első oldal Query Fragments Statikus szűrők With failed files retrying A sikerteleneket újra Next update will retry previously failed files A következő frissítéskor újra próbálja a sikertelenül indexelt fájlokat Save last query A legutóbbi keresés mentése Load saved query Mentett keresés betöltése Special Indexing Egyedi indexelés Indexing with special options Indexelés egyedi beállításokkal Indexing &schedule Időzí&tés Enable synonyms Szinonímák engedélyezése &View &Nézet Missing &helpers &Hiányzó segédprogramok Indexed &MIME types Indexelt &MIME típusok Index &statistics &Statisztika Webcache Editor Webes gyorstár szerkesztése Trigger incremental pass Trigger incremental pass E&xport simple search history E&xport simple search history Use default dark mode Use default dark mode Dark mode Dark mode &Query &Query Increase results text font size Növelje az eredmények szöveg betűméretét. Increase Font Size Betűméret növelése Decrease results text font size Csökkentsd az eredmények szöveg betűméretét. Decrease Font Size Betűméret csökkentése Start real time indexer Indítsa el a valós idejű indexelőt. Query Language Filters Lekérdezési nyelv szűrők Filter dates Dátum Assisted complex search Segített összetett keresés Filter birth dates Születési dátumok szűrése Switch Configuration... Kapcsoló konfiguráció... Choose another configuration to run on, replacing this process Válasszon egy másik konfigurációt, amelyen futtatni szeretné, és cserélje le ezt a folyamatot. &User manual (local, one HTML page) Felhasználói kézikönyv (helyi, egy HTML oldal) &Online manual (Recoll Web site) Online kézikönyv (Recoll weboldal) Path translations Útvonal fordítások With failed files retrying RclTrayIcon Restore A Recoll megjelenítése Quit Kilépés RecollModel Abstract Tartalmi kivonat Author Szerző Document size A dokumentum mérete Document date A dokumentum dátuma File size A fájl mérete File name Fájlnév File date A fájl dátuma Ipath Belső elérési út Keywords Kulcsszavak Mime type Mime type Original character set Eredeti karakterkódolás Relevancy rating Relevancia Title Cím URL URL Mtime Módosítás ideje Date Dátum Date and time Dátum és idő MIME type MIME típus Can't sort by inverse relevance Can't sort by inverse relevance ResList Result list Találati lista Unavailable document Elérhetetlen dokumentum Previous Előző Next Következő <p><b>No results found</b><br> <p><b>Nincs találat.</b><br> &Preview &Előnézet Copy &URL &URL másolása Find &similar documents &Hasonló dokumentum keresése Query details A keresés részletei (show query) (a&nbsp;keresés&nbsp;részletei) Copy &File Name &Fájlnév másolása filtered szűrt sorted rendezett Document history Előzmények Preview Előnézet Open Megnyitás <p><i>Alternate spellings (accents suppressed): </i> <p><i>Alternatív írásmód (ékezetek nélkül): </i> &Write to File Menté&s fájlba Preview P&arent document/folder A szülő előné&zete &Open Parent document/folder A szülő megnyi&tása &Open &Megnyitás Documents Találatok a lapon: out of at least • Az összes találat: for for <p><i>Alternate spellings: </i> <p><i>Alternatív írásmód: </i> Open &Snippets window Ér&demi részek Duplicate documents Másodpéldányok These Urls ( | ipath) share the same content: Ezek az URL-ek (| ipath) azonos tartalmúak: Result count (est.) Találatok száma (kb.) Snippets Érdemi részek This spelling guess was added to the search: Ez a helyesírási tipp hozzá lett adva a kereséshez: These spelling guesses were added to the search: Ezeket a helyesírási találgatásokat hozzáadták a kereséshez: ResTable &Reset sort &Rendezés alaphelyzetbe &Delete column Oszlop &törlése Add " Add " " column " column Save table to CSV file A táblázat mentése CSV fájlba Can't open/create file: Nem sikerült megnyitni/létrehozni: &Preview &Előnézet &Open &Megnyitás Copy &File Name &Fájlnév másolása Copy &URL &URL másolása &Write to File Menté&s fájlba Find &similar documents &Hasonló dokumentum keresése Preview P&arent document/folder A szülő előné&zete &Open Parent document/folder A szülő megnyi&tása &Save as CSV &Mentés CSV fájlba Add "%1" column „%1” oszlop hozzáadása Result Table Result Table Open Megnyitás Open and Quit Open and Quit Preview Előnézet Show Snippets Show Snippets Open current result document Open current result document Open current result and quit Open current result and quit Show snippets Show snippets Show header Show header Show vertical header Show vertical header Copy current result text to clipboard Copy current result text to clipboard Use Shift+click to display the text instead. Használja a Shift+kattintást a szöveg megjelenítéséhez. %1 bytes copied to clipboard %1 bájt másolva a vágólapra Copy result text and quit "Másold le az eredmény szövegét és lépj ki" ResTableDetailArea &Preview &Előnézet &Open &Megnyitás Copy &File Name &Fájlnév másolása Copy &URL &URL másolása &Write to File Menté&s fájlba Find &similar documents &Hasonló dokumentum keresése Preview P&arent document/folder A szülő előné&zete &Open Parent document/folder A szülő megnyi&tása ResultPopup &Preview &Előnézet &Open &Megnyitás Copy &File Name &Fájlnév másolása Copy &URL &URL másolása &Write to File Menté&s fájlba Save selection to files A kijelölés mentése fájlba Preview P&arent document/folder A szülő előné&zete &Open Parent document/folder A szülő megnyi&tása Find &similar documents &Hasonló dokumentum keresése Open &Snippets window Ér&demi részek Show subdocuments / attachments Aldokumentumok / csatolmányok Open With Megnyitás ezzel: Run Script Szkript futtatása SSearch Any term Bármely szó All terms Minden szó File name Fájlnév Completions Completions Select an item: Select an item: Too many completions Too many completions Query language Keresőnyelv Bad query string Hibás keresőkifejezés Out of memory Elfogyott a memória Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter file name wildcard expression. A fájlnév megadásához helyettesítő karakterek is használhatók Enter search terms here. Type ESC SPC for completions of current term. Ide kell írni a keresőszavakat. ESC SZÓKÖZ billentyűsorozat: a szó lehetséges kiegészítéseit ajánlja fel. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Keresőnyelvi kifejezés megadása. Segítség:<br> <i>szo1 szo2</i> : 'szo1' és 'szo2' bármely mezőben.<br> <i>mezo:szo1</i> : 'szo1' a 'mezo' nevű mezőben.<br> Szabványos mezőnevek/szinonímák:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pszeudómezők: dir, mime/format, type/rclcat, date, size.<br> Péda dátumtartományra: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>szo1 szo2 OR szo3</i> : szo1 AND (szo2 OR szo3).<br> A jobb olvashatóság érdekében használhatók zárójelek.<br> <i>"szo1 szo2"</i> : részmondat (pontosan így kell előfordulnia). Lehetséges módosítók:<br> <i>"szo1 szo2"p</i> : szavak egymáshoz közel, bármilyen sorrendben, alapértelmezett távolsággal.<br> <b>A keresés részletei</b> segíthet feltárni a nem várt találatok okát. Részletesebb leírás a kézikönyvben (&lt;F1>) található. Stemming languages for stored query: A mentett keresés szótőképző nyelve: differ from current preferences (kept) eltér a jelenlegi beállítástól (megtartva). Auto suffixes for stored query: A mentett keresés automatikus toldalékolása: External indexes for stored query: A mentett keresés külső indexe: Autophrase is set but it was unset for stored query Az „automatikus részmondat” be van kapcsolva, de a keresés mentésekor tiltva volt. Autophrase is unset but it was set for stored query Az „automatikus részmondat” ki van kapcsolva, de a keresés mentésekor engedélyezve volt. Enter search terms here. Enter search terms here. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border-collapse: collapse; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; You should really look at the manual (F1)</p> You should really look at the manual (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>What</th><th>Examples</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; where needed</td><td>(one AND two) OR three</td></tr> where needed</td><td>(one AND two) OR three</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Can't open index Could not restore external indexes for stored query:<br> Could not restore external indexes for stored query:<br> ??? ??? Using current preferences. Using current preferences. Simple search Egyszerű keresés History Történelem <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <p>Leírás nyelvi csalás-lap. Kétség esetén: kattintson a <b>Lekérdezés részleteinek megjelenítése</b> gombra. &nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Nagybetűsítés a tőkibővülés elnyomásához</td><td>Floor</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Törlés Ctrl+S Ctrl+S Erase search entry A keresőmező törlése Search Keresés Start query A keresés indítása Enter search terms here. Type ESC SPC for completions of current term. Ide kell írni a keresőszavakat. ESC SZÓKÖZ billentyűsorozat: a szó lehetséges kiegészítéseit ajánlja fel. Choose search type. A keresés módjának kiválasztása Show query history Show query history Enter search terms here. Enter search terms here. Main menu Main menu SearchClauseW SearchClauseW SearchClauseW Any of these Any of these All of these All of these None of these None of these This phrase This phrase Terms in proximity Terms in proximity File name matching File name matching Select the type of query that will be performed with the words A megadott szavakkal végzett keresés típusának kiválasztása Number of additional words that may be interspersed with the chosen ones A keresett szavak között található további szavak megengedett száma In field In field No field Nincs mező Any Bármely szó All Mind None semmi Phrase Részmondat Proximity Távolság File name Fájlnév Snippets Snippets Érdemi részek X X Find: Keresés: Next Következő Prev Előző SnippetsW Search Keresés <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Sajnos a megadott határok között nincs pontos egyezés. Talán túl nagy a dokumentum, és a feldolgozó elakadt...</p> Sort By Relevance Sort By Relevance Sort By Page Sort By Page Snippets Window Snippets Window Find Keresés Find (alt) Find (alt) Find Next Find Next Find Previous Find Previous Hide Hide Find next Find next Find previous Find previous Close window Close window Increase font size Növelje a betűméretet. Decrease font size Betűméret csökkentése SortForm Date Dátum Mime type Mime type SortFormBase Sort Criteria Sort Criteria Sort the Sort the most relevant results by: most relevant results by: Descending Descending Close Bezárás Apply Apply SpecIdxW Special Indexing Egyedi indexelés Do not retry previously failed files. A korábban sikertelenül indexelt fájlok kihagyása Else only modified or failed files will be processed. Egyébként csak a módosult vagy korábban sikertelenül indexelt fájlok lesznek feldolgozva Erase selected files data before indexing. A kijelölt fájlok tárolt adatainak törlése indexelés előtt Directory to recursively index Directory to recursively index Browse Tallózás Start directory (else use regular topdirs): Kezdő könyvtár (üresen a rendes kezdő könyvtár): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Az összes fájl feldolgozásához üresen kell hagyni. Szóközökkel elválasztva több shell típusú minta is megadható.<br>A szóközt tartalmazó mintákat kettős idézőjellel kell védeni.<br>Csak kezdő könyvtár megadásával együtt használható. Selection patterns: Kijelölés mintával: Top indexed entity Az indexelendő kezdő könyvtár Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). A könyvtár, melyet rekurzívan indexelni kell.<br>A beállítófájlban megadott kezdő könyvtáron (topdir) belül kell lennie. Retry previously failed files. Retry previously failed files. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnosztikai kimeneti fájl. Levágva lesz és index diagnosztikát fog kapni (az indexálás elmaradásának okai). Diagnostics file Diagnosztikai fájl SpellBase Term Explorer Szóvizsgáló &Expand &Listázás Alt+E Alt+E &Close &Bezárás Alt+C Alt+C Term Szó No db info. Nincs információ az adatbázisról. Doc. / Tot. Dok. / Össz. Match Egyéb beállítások Case Kis-és nagybetű Accents Ékezetek SpellW Wildcards Helyettesítő karakterek Regexp Reguláris kifejezés Spelling/Phonetic Írásmód/fonetika Aspell init failed. Aspell not installed? Az aspell indítása nem sikerült. Telepítve van? Aspell expansion error. Aspell toldalékolási hiba. Stem expansion Szótő és toldalékok error retrieving stemming languages hiba a szótőképzés nyelvének felismerésekor No expansion found Nincsenek toldalékok. Term Szó Doc. / Tot. Dok. / Össz. Index: %1 documents, average length %2 terms Index: %1 documents, average length %2 terms Index: %1 documents, average length %2 terms.%3 results Index: %1 dokumentum, átlagosan %2 szó. %3 találat. %1 results %1 találat List was truncated alphabetically, some frequent Ez egy rövidített, betűrend szerinti lista, gyakori terms may be missing. Try using a longer root. szavak hiányozhatnak. Javallott hosszabb szógyök megadása. Show index statistics Indexstatisztika Number of documents A dokumentumok száma Average terms per document A szavak átlagos száma dokumentumonként Smallest document length Smallest document length Longest document length Longest document length Database directory size Az adatbázis mérete MIME types: MIME típusok: Item Megnevezés Value Érték Smallest document length (terms) A szavak száma a legrövidebb dokumentumban Longest document length (terms) A szavak száma a leghosszabb dokumentumban Results from last indexing: A legutóbbi indexelés eredménye: Documents created/updated létrehozott/frissített dokumentum Files tested vizsgált fájl Unindexed files nem indexelt fájl List files which could not be indexed (slow) List files which could not be indexed (slow) Spell expansion error. Spell expansion error. Spell expansion error. Helyesírási kiterjesztési hiba. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index A kijelölt könyvtár nem tartalmaz Xapian indexet. This is the main/local index! Ez a fő-/helyi index! The selected directory is already in the index list A kijelölt könyvtár már szerepel az indexben. Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) error retrieving stemming languages hiba a szótőképzés nyelvének felismerésekor Choose Tallózás Result list paragraph format (erase all to reset to default) A találati lista bekezdésformátuma (törléssel visszaáll az alapértelmezettre) Result list header (default is empty) A találati lista fejléce (alapértelmezetten üres) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) A Recoll beállításainak vagy a Xapian indexnek a könyvtára (pl.: /home/felhasznalo/.recoll vagy /home/felhasznalo/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read A kijelölt könyvtárban egy olvashatatlan Recoll beállítás található. At most one index should be selected Csak egy indexet lehet kijelölni. Cant add index with different case/diacritics stripping option Eltérő kis-és nagybetű-, ill. ékezetkezelésű index nem adható hozzá. Default QtWebkit font Alapértelmezett QtWebkit betűkészlet Any term Bármely szó All terms Minden szó File name Fájlnév Query language Keresőnyelv Value from previous program exit A legutóbb használt Context Context Description Description Shortcut Shortcut Default Default Choose QSS File Válasszon QSS fájlt Can't add index with different case/diacritics stripping option. Nem lehet hozzáadni az indexet különböző kis- és nagybetűkkel/diakritikus jelek eltávolítási lehetőséggel. Light Fény Dark Sötét System Rendszer UIPrefsDialogBase User interface Felhasználói felület Number of entries in a result page A találatok száma laponként Result list font A találati lista betűkészlete Helvetica-10 Helvetica-10 Opens a dialog to select the result list font A találati lista betűkészletének kiválasztása Reset Alaphelyzet Resets the result list font to the system default A találati lista betűkészletének rendszerbeli alapértelmezésére állítása Auto-start simple search on whitespace entry. Automatikus keresés szóköz hatására Start with advanced search dialog open. Az összetett keresés ablaka is legyen nyitva induláskor Start with sort dialog open. Start with sort dialog open. Search parameters Keresési beállítások Stemming language A szótőképzés nyelve Dynamically build abstracts Dinamikus kivonatolás Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Próbáljon-e tartalmi kivonatot készíteni a keresőszavak alapján a találati lista elemeihez? Nagy dokumentumok esetén lassú lehet. Replace abstracts from documents A kivonat cseréje Do we synthetize an abstract even if the document seemed to have one? Kivonatoljon akkor is, ha a dokumentum már rendelkezik ezzel? Synthetic abstract size (characters) A kivonat mérete (karakter) Synthetic abstract context words Az kivonat környező szavainak száma External Indexes Külső indexek Add index Index hozzáadása Select the xapiandb directory for the index you want to add, then click Add Index Select the xapiandb directory for the index you want to add, then click Add Index Browse Tallózás &OK &OK Apply changes A változtatások alkalmazása &Cancel &Mégsem Discard changes A változtatások elvetése Result paragraph<br>format string Result paragraph<br>format string Automatically add phrase to simple searches Az egyszerű keresés automatikus bővítése részmondattal A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Ha például a keresőkifejezés a [rolling stones] (két szó), akkor helyettesítődik a [rolling OR stones OR (rolling PHRASE 2 stones)] kifejezéssel. Így előbbre kerülnek azok a találatok, meylek a keresett szavakat pontosan úgy tartalmazzák, ahogyan meg lettek adva. User preferences Beállítások Use desktop preferences to choose document editor. Use desktop preferences to choose document editor. External indexes External indexes Toggle selected A kijelölt váltása Activate All Mindet bekapcsol Deactivate All Mindet kikapcsol Remove selected A kijelölt törlése Remove from list. This has no effect on the disk index. Törlés a listából. Az index a lemezről nem törlődik. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Remember sort activation state. A rendezési állapot mentése Maximum text size highlighted for preview (megabytes) Az előnézeti kiemelés korlátja (megabyte) Texts over this size will not be highlighted in preview (too slow). Ezen méret felett az előnézetben nem alkalmaz kiemelést (túl lassú) Highlight color for query terms A keresőszavak kiemelésének színe Prefer Html to plain text for preview. Az előnézetben HTML egyszerű szöveg helyett If checked, results with the same content under different names will only be shown once. A különböző nevű, de azonos tartalmú találatokból csak egy jelenjen meg Hide duplicate results. Többszörös találatok elrejtése Choose editor applications A társítások beállítása Display category filter as toolbar instead of button panel (needs restart). Display category filter as toolbar instead of button panel (needs restart). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Szavak listája, melyek keresőszóként megadva automatikusan ext:xxx keresőnyelvi kifejezéssé alakíttatnak Query language magic file name suffixes. Keresőnyelvi mágikus fájlnévkiterjesztések Enable Bekapcsolás ViewAction Changing actions with different current values Changing actions with different current values Mime type Mime type Command Parancs MIME type MIME típus Desktop Default Asztali alapértelmezés Changing entries with different current values A cserélendő mezők értéke eltér egymástól. ViewActionBase File type File type Action Action Select one or several file types, then click Change Action to modify the program used to open them Select one or several file types, then click Change Action to modify the program used to open them Change Action Change Action Close Bezárás Native Viewers Dokumentumtípusok megjelenítői Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Egy vagy több MIME típus kijelölése után az alsó keretben állítható be az adott típusokhoz elvárt művelet. Use Desktop preferences by default Az asztali alapértelmezés alkalmazása Select one or several file types, then use the controls in the frame below to change how they are processed Kijelölhető egy vagy több elérési út is Exception to Desktop preferences Eltérés az asztali beállításoktól Action (empty -> recoll default) Művelet (üres -> Recoll alapértelmezés) Apply to current selection Alkalmazás a kijelöltekre Recoll action: Recoll művelet: current value jelenlegi érték Select same Azonosak kijelölése <b>New Values:</b> <b>Új érték:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Az érték egy végrehajtandó parancssor. Helyettesítések: %s: keresőszó; %p: oldalszám; <br>%f: dokumentumfájl neve. F1 további segítségért. Webcache Webcache editor Webes gyorstár szerkesztése Search regexp Keresés reguláris kifejezéssel TextLabel Szöveg címke WebcacheEdit Copy URL URL másolása Unknown indexer state. Can't edit webcache file. Az indexelő állapota ismeretlen. A webes gyorstár nem szerkeszthető. Indexer is running. Can't edit webcache file. Az indexelő fut. A webes gyorstár nem szerkeszthető. Delete selection A kijelöltek törlése Webcache was modified, you will need to run the indexer after closing this window. A webes gyorstár módosult. Ezen ablak bezárása után indítani kell az indexelőt. Save to File Mentés fájlba File creation failed: Fájl létrehozása sikertelen: Maximum size %1 (Index config.). Current size %2. Write position %3. Legnagyobb méret %1 (Index konfig.). Jelenlegi méret %2. Írási pozíció %3. WebcacheModel MIME MIME Url URL Date Dátum Size Méret URL URL WinSchedToolW Error Hiba Configuration not initialized Configuration not initialized <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> Command already started Command already started Recoll Batch indexing Recoll Batch indexing Start Windows Task Scheduler tool Start Windows Task Scheduler tool Could not create batch file Nem sikerült létrehozni a batch fájlt. confgui::ConfBeaglePanelW Steal Beagle indexing queue Steal Beagle indexing queue Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Web cache directory name Web cache directory name The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Max. size for the web cache (MB) Max. size for the web cache (MB) Entries will be recycled once the size is reached Entries will be recycled once the size is reached Web page store directory name A weblapokat tároló könyvtár neve The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. A látogatott weblapok másolatát tároló könyvtár neve.<br>Relatív elérési út a beállításokat tároló könyvtárhoz képest értendő. Max. size for the web store (MB) A webes tároló max. mérete (MB) Process the WEB history queue A webes előzmények feldolgozása Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) A Firefoxszal látogatott oldalak indexelése<br>(a Firefox Recoll kiegészítőjét is telepíteni kell) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). A méret elérésekor a legkorábbi bejegyzések törlődnek.<br>Csak a növelésnek van haszna, mivel csökkentéskor a már létező fájl nem lesz kisebb (csak egy része állandóan kihasználatlan marad). confgui::ConfIndexW Can't write configuration file A beállítófájl írása sikertelen Recoll - Index Settings: Recoll - Index Settings: confgui::ConfParamFNW Browse Tallózás Choose Tallózás confgui::ConfParamSLW + + - - Add entry Add entry Delete selected entries Delete selected entries ~ ~ Edit selected entries Edit selected entries confgui::ConfSearchPanelW Automatic diacritics sensitivity Automatikus ékezetérzékenység <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatikusan különbözőnek tekinti az ékezetes betűket az ékezet nélküli párjuktól, ha tartalmaz ékezetes betűt a kifejezés (az unac_except_trans kivételével). Egyébként a keresőnyelv <i>D</i> módosítójával érhető el ugyanez. Automatic character case sensitivity Kis-és nagybetűk automatikus megkülönböztetése <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatikusan különbözőnek tekinti a kis-és nagybetűket, ha az első karakter kivételével bárhol tartalmaz nagybetűt a kifejezés. Egyébként a keresőnyelv <i>C</i> módosítójával érhető el ugyanez. Maximum term expansion count A toldalékok maximális száma <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Egy szó toldalékainak maximális száma (pl. helyettesítő karakterek használatakor). Az alapértelmezett 10 000 elfogadható érték, és elkerülhető vele a felhasználói felület időleges válaszképtelensége is. Maximum Xapian clauses count A Xapian feltételek maximális száma <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. Egy Xapian kereséshez felhasználható elemi feltételek maximális száma. Néha a szavak toldalékolása szorzó hatású, ami túlzott memóriahasználathoz vezethet. Az alapértelmezett 100 000 a legtöbb esetben elegendő, de nem is támaszt különleges igényeket a hardverrel szemben. confgui::ConfSubPanelW Global Minden könyvtárra vonatkozik Max. compressed file size (KB) A tömörített fájlok max. mérete (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. A tömörített fájlok indexbe kerülésének határértéke. -1 esetén nincs korlát. 0 esetén soha nem történik kicsomagolás. Max. text file size (MB) Szövegfájl max. mérete (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. A szövegfájlok indexbe kerülésének határértéke. -1 esetén nincs korlát. Az óriásira nőtt naplófájlok feldolgozása kerülhető el így. Text file page size (KB) Szövegfájl lapmérete (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Ha be van állítva (nem egyenlő -1), akkor a szövegfájlok indexelése ilyen méretű darabokban történik. Ez segítséget nyújt a nagyon nagy méretű szövegfájlokban (pl. naplófájlok) való kereséshez. Max. filter exec. time (S) A szűrő max. futási ideje (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. A túl hosszú ideig futó külső szűrők leállítása Néha előfordul (pl. postscript esetén), hogy a szűrő végtelen ciklusba kerül. -1 esetén nincs korlát. Only mime types MIME típusok An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Az indexelendő MIME típusok listája.<br>Csak ezek a típusok kerülnek az indexbe. Rendesen üres és inaktív. Exclude mime types Kizárt MIME típusok Mime types not to be indexed Ezek a MIME típusok kimaradnak az indexelésből Max. filter exec. time (s) Max. filter exec. time (s) confgui::ConfTabsW Apply Apply confgui::ConfTopPanelW Top directories Kezdő könyvtárak The list of directories where recursive indexing starts. Default: your home. A megadott könyvtárak rekurzív indexelése. Alapértelmezett értéke a saját könyvtár. Skipped paths Kizárt elérési utak These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Az indexelő által mellőzendő könyvtárak nevei.<br>Használhatók a helyettesítő karakterek. Csak az indexelő hatókörébe eső elérési utakat lehet megadni (pl.: ha a kezdő könyvtár a „/home/felhasznalo” és a „/home” egy link a „/usr/home”-ra, akkor helyes elérési út a „/home/felhasznalo/tmp*”, de nem az a „/usr/home/felhasznalo/tmp*”). Stemming languages A szótőképzés nyelve The languages for which stemming expansion<br>dictionaries will be built. Ezen nyelvekhez készüljön szótövező és -toldalékoló szótár Log file name A naplófájl neve The file where the messages will be written.<br>Use 'stderr' for terminal output Az üzenetek kiírásának a helye.<br>A „stderr” a terminálra küldi az üzeneteket. Log verbosity level A naplózás szintje This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Az üzenetek mennyiségének szabályozása,<br>a hibaüzenetekre szorítkozótól a részletes hibakeresésig. Index flush megabytes interval Indexírási intervallum (MB) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Az az adatmennyiség, melyet két lemezre írás között az indexelő feldolgoz.<br>Segíthet kézben tartani a memóriafoglalást. Alapértelmezett: 10MB Max disk occupation (%) Max. lemezhasználat (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Százalékos lemezfoglalás, melyen túllépve az indexelő nem működik tovább (megelőzendő az összes szabad hely elfoglalását).<br>0 esetén nincs korlát (alapértelmezett). No aspell usage Az aspell mellőzése Aspell language Az aspell nyelve The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Database directory name Az adatbázis könyvtárneve The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Use system's 'file' command Use system's 'file' command Use the system's 'file' command if internal<br>mime type identification fails. Use the system's 'file' command if internal<br>mime type identification fails. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. A szóvizsgálóban az aspell használatának mellőzése a hasonló szavak keresésekor.<br>Hasznos, ha az aspell nincs telepítve vagy nem működik. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Az aspell szótár nyelve. pl. „en” vagy „hu”...<br>Ha nincs megadva, akkor az NLS környezet alapján lesz beállítva, ez általában megfelelő. A rendszerre telepített nyelveket az „aspell config” parancs kiadása után a „data-dir” könyvtárban található .dat fájlokból lehet megtudni. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Az indexet tartalmazó könyvtár neve.<br>Relatív elérési út a beállítási könyvtárhoz képest értendő. Alapértelmezett: „xapiandb”. Unac exceptions Unac kivételek <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Az unac alapértelmezetten eltávolít minden ékezetet és szétbontja a ligatúrákat. Az itt megadott kivételekkel lehetőség van adott karakterek esetén tiltani a műveletet, ha a használt nyelv ezt szükségessé teszi. Ezen kívül előírhatók további felbontandó karakterek is. Az egyes elemeket egymástól szóközzel kell elválasztani. Egy elem első karaktere az eredetit, a további karakterek a várt eredményt határozzák meg. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Max disk occupation (%, 0 means no limit) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. uiPrefsDialogBase User preferences Beállítások User interface Felhasználói felület Number of entries in a result page A találatok száma laponként If checked, results with the same content under different names will only be shown once. A különböző nevű, de azonos tartalmú találatokból csak egy jelenjen meg Hide duplicate results. Többszörös találatok elrejtése Highlight color for query terms A keresőszavak kiemelésének színe Result list font A találati lista betűkészlete Opens a dialog to select the result list font A találati lista betűkészletének kiválasztása Helvetica-10 Helvetica-10 Resets the result list font to the system default A találati lista betűkészletének rendszerbeli alapértelmezésére állítása Reset Alaphelyzet Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Result paragraph<br>format string Result paragraph<br>format string Texts over this size will not be highlighted in preview (too slow). Ezen méret felett az előnézetben nem alkalmaz kiemelést (túl lassú) Maximum text size highlighted for preview (megabytes) Az előnézeti kiemelés korlátja (megabyte) Use desktop preferences to choose document editor. Use desktop preferences to choose document editor. Choose editor applications A társítások beállítása Display category filter as toolbar instead of button panel (needs restart). Display category filter as toolbar instead of button panel (needs restart). Auto-start simple search on whitespace entry. Automatikus keresés szóköz hatására Start with advanced search dialog open. Az összetett keresés ablaka is legyen nyitva induláskor Start with sort dialog open. Start with sort dialog open. Remember sort activation state. A rendezési állapot mentése Prefer Html to plain text for preview. Az előnézetben HTML egyszerű szöveg helyett Search parameters Keresési beállítások Stemming language A szótőképzés nyelve A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Ha például a keresőkifejezés a [rolling stones] (két szó), akkor helyettesítődik a [rolling OR stones OR (rolling PHRASE 2 stones)] kifejezéssel. Így előbbre kerülnek azok a találatok, meylek a keresett szavakat pontosan úgy tartalmazzák, ahogyan meg lettek adva. Automatically add phrase to simple searches Az egyszerű keresés automatikus bővítése részmondattal Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Próbáljon-e tartalmi kivonatot készíteni a keresőszavak alapján a találati lista elemeihez? Nagy dokumentumok esetén lassú lehet. Dynamically build abstracts Dinamikus kivonatolás Do we synthetize an abstract even if the document seemed to have one? Kivonatoljon akkor is, ha a dokumentum már rendelkezik ezzel? Replace abstracts from documents A kivonat cseréje Synthetic abstract size (characters) A kivonat mérete (karakter) Synthetic abstract context words Az kivonat környező szavainak száma The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Szavak listája, melyek keresőszóként megadva automatikusan ext:xxx keresőnyelvi kifejezéssé alakíttatnak Query language magic file name suffixes. Keresőnyelvi mágikus fájlnévkiterjesztések Enable Bekapcsolás External Indexes Külső indexek Toggle selected A kijelölt váltása Activate All Mindet bekapcsol Deactivate All Mindet kikapcsol Remove from list. This has no effect on the disk index. Törlés a listából. Az index a lemezről nem törlődik. Remove selected A kijelölt törlése Click to add another index directory to the list Click to add another index directory to the list Add index Index hozzáadása Apply changes A változtatások alkalmazása &OK &OK Discard changes A változtatások elvetése &Cancel &Mégsem Abstract snippet separator A kivonat elemeinek elválasztója Use <PRE> tags instead of <BR>to display plain text as html. Use <PRE> tags instead of <BR>to display plain text as html. Lines in PRE text are not folded. Using BR loses indentation. Lines in PRE text are not folded. Using BR loses indentation. Style sheet Stíluslap Opens a dialog to select the style sheet file A megjelenés stílusát leíró fájl kiválasztása Choose Tallózás Resets the style sheet to default A stílus visszaállítása az alapértelmezettre Lines in PRE text are not folded. Using BR loses some indentation. Lines in PRE text are not folded. Using BR loses some indentation. Use <PRE> tags instead of <BR>to display plain text as html in preview. Use <PRE> tags instead of <BR>to display plain text as html in preview. Result List Találati lista Edit result paragraph format string A találatok bekezdésformátuma Edit result page html header insert A találatok lapjának fejlécformátuma Date format (strftime(3)) Dátumformátum (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Egy olyan gyakorisági határérték, mely felett az adott szavak kihagyandók a részmondatokból. Részmondatkereséskor a gyakori szavak a teljesítménybeli problémák fő okai. A kihagyott szavak lazítják a részek közti kapcsolatot és gyengítik az automatikus részmondat hatásfokát. Az alapértelmezett érték 2 (százalék). Autophrase term frequency threshold percentage Az automatikus részmondatok százalékos gyakorisági határértéke Plain text to HTML line style Az egyszerű szövegből alkotott HTML sor stílusa Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. A PRE tagok közti sorok nincsenek törve. BR tag estén a behúzások elveszhetnek. A PRE+wrap valószínűleg a legjobb választás. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + wrap Exceptions Exceptions Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Disable Qt autocompletion in search entry. A Qt automatikus kiegészítésének tiltása a keresőmezőben Search as you type. Keresés minden leütéskor Paths translations Elérési út átalakítása Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. További index felvétele a listára. Egy Recoll beállítási könyvtárat vagy egy Xapian indexkönyvtárat kell megadni. Snippets window CSS file CSS az <i>Érdemi részek</i> ablakhoz Opens a dialog to select the Snippets window CSS style sheet file Az <i>Érdemi részek</i> ablak tartalmának stílusát leíró fájl kiválasztása Resets the Snippets window style Az <i>Érdemi részek</i> ablak stílusának alaphelyzetbe állítása Decide if document filters are shown as radio buttons, toolbar combobox, or menu. A szűrők megjeleníthetők rádiógombokkal, legördülő listában az eszköztáron vagy menüben Document filter choice style: A szűrőválasztó stílusa: Buttons Panel Rádiógombok Toolbar Combobox Legördülő lista Menu Menü Show system tray icon. Ikon az értesítési területen Close to tray instead of exiting. Bezárás az értesítési területre kilépés helyett Start with simple search mode Az egyszerű keresés módja induláskor Show warning when opening temporary file. Ideiglenes fájlok megnyitásakor figyelmeztetés User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Az <i>Érdemi részek</i> ablak tartalmára alkalmazandó stílus.<br>A találati lista fejléce az <i>Érdemi részek</i> ablakban is megjelenik. Synonyms file Szinonímafájl Highlight CSS style for query terms Highlight CSS style for query terms Recoll - User Preferences Recoll - User Preferences Set path translations for the selected index or for the main one if no selection exists. Set path translations for the selected index or for the main one if no selection exists. Activate links in preview. Activate links in preview. Make links inside the preview window clickable, and start an external browser when they are clicked. Make links inside the preview window clickable, and start an external browser when they are clicked. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Start search on completer popup activation. Start search on completer popup activation. Maximum number of snippets displayed in the snippets window Maximum number of snippets displayed in the snippets window Sort snippets by page number (default: by weight). Sort snippets by page number (default: by weight). Suppress all beeps. Suppress all beeps. Application Qt style sheet Application Qt style sheet Limit the size of the search history. Use 0 to disable, -1 for unlimited. Limit the size of the search history. Use 0 to disable, -1 for unlimited. Maximum size of search history (0: disable, -1: unlimited): Maximum size of search history (0: disable, -1: unlimited): Generate desktop notifications. Generate desktop notifications. Misc Misc Work around QTBUG-78923 by inserting space before anchor text Work around QTBUG-78923 by inserting space before anchor text Display a Snippets link even if the document has no pages (needs restart). Display a Snippets link even if the document has no pages (needs restart). Maximum text size highlighted for preview (kilobytes) Maximum text size highlighted for preview (kilobytes) Start with simple search mode: Az egyszerű keresés módja induláskor: Hide toolbars. Hide toolbars. Hide status bar. Hide status bar. Hide Clear and Search buttons. Hide Clear and Search buttons. Hide menu bar (show button instead). Hide menu bar (show button instead). Hide simple search type (show in menu only). Hide simple search type (show in menu only). Shortcuts Shortcuts Hide result table header. Hide result table header. Show result table row headers. Show result table row headers. Reset shortcuts defaults Reset shortcuts defaults Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Use F1 to access the manual Use F1 to access the manual Hide some user interface elements. Néhány felhasználói felületi elem elrejtése. Hide: Elrejtés: Toolbars Eszköztárak Status bar Állapot sáv Show button instead. Mutassa a gombot helyette. Menu bar Menüsor Show choice in menu only. Csak mutassa a választékot a menüben. Simple search type Simple search type Clear/Search buttons Törlés/Keresés gombok Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Letiltja a Ctrl+[0-9]/Shift+[a-z] gyorsbillentyűket a táblázatsorokra ugráshoz. None (default) Nincs (alapértelmezett) Uses the default dark mode style sheet Az alapértelmezett sötét mód stíluslapot használja. Dark mode Dark mode Choose QSS File Válasszon QSS fájlt To display document text instead of metadata in result table detail area, use: A dokumentum szövegének megjelenítéséhez a metaadatok helyett az eredménytáblázat részletes területén, használja: left mouse click bal egérkattintás Shift+click Shift+kattintás Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Megnyit egy párbeszédpanelt a stíluslap fájl kiválasztásához.<br>Nézze meg az /usr/share/recoll/examples/recoll[-dark].qss fájlt egy példaért. Result Table Result Table Do not display metadata when hovering over rows. Ne jelenjen meg a metaadatok, amikor az egérrel fölé viszik a sorokat. Work around Tamil QTBUG-78923 by inserting space before anchor text Munka Tamil QTBUG-78923 megkerülése érdekében helyezzen be szóközt az horgony szöveg elé. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. A hiba miatt furcsa kör karakterek jelennek meg a kiemelt tamil szavakban. A kiskapcsoló egy további szóköz karaktert szúr be, ami megoldja a problémát. Depth of side filter directory tree Oldalszűrő könyvtárfa mélysége Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Nagyítási tényező a felhasználói felülethez. Hasznos, ha az alapértelmezett nem megfelelő a képernyőfelbontásához. Display scale (default 1.0): Megjelenítési méretarány (alapértelmezett 1.0): Automatic spelling approximation. Automatikus helyesírás közelítés. Max spelling distance Maximális helyesírási távolság Add common spelling approximations for rare terms. Adjon hozzá gyakori helyesírási közelítéseket ritka kifejezésekhez. Maximum number of history entries in completer list Teljes kiegészítő lista maximális előzménybejegyzéseinek száma Number of history entries in completer: Teljesítőben található előzmények száma: Displays the total number of occurences of the term in the index Megjeleníti a kifejezés összes előfordulásának számát az indexben. Show hit counts in completer popup. Mutassa meg a találatok számát a kiegészítő ablakban. Prefer HTML to plain text for preview. Jobban kedveli az HTML-t, mint a sima szöveget az előnézethez. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Lásd a Qt QDateTimeEdit dokumentációt. Pl. yyyy-MM-dd. Hagyd üresen az alapértelmezett Qt/System formátum használatához. Side filter dates format (change needs restart) Oldalszűrő dátumformátum (a változtatáshoz újraindítás szükséges) If set, starting a new instance on the same index will raise an existing one. Ha be van állítva, egy új példány indítása ugyanazon az indexen meglévőt fog felhívni. Single application Egyetlen alkalmazás Set to 0 to disable and speed up startup by avoiding tree computation. Állítsa 0-ra a letiltáshoz és a gyorsabb indításhoz, hogy elkerülje a fa számítását. The completion only changes the entry when activated. A befejezés csak akkor változtatja meg a bejegyzést, ha aktiválva van. Completion: no automatic line editing. Befejezés: nincs automatikus sor szerkesztés. Interface language (needs restart): Felhasználói felület nyelve (újraindítás szükséges): Note: most translations are incomplete. Leave empty to use the system environment. Megjegyzés: a legtöbb fordítás hiányos. Hagyd üresen, hogy a rendszerkörnyezetet használja. Preview Előnézet Set to 0 to disable details/summary feature Állítsa 0-ra a részletek/összegzés funkció letiltásához. Fields display: max field length before using summary: Mezők megjelenítése: maximális mezőhossz a összefoglaló használata előtt: Number of lines to be shown over a search term found by preview search. A keresési kifejezés által talált előnézeti keresés során megjelenítendő sorok száma. Search term line offset: Keresési kifejezés sor eltolás: Wild card characters *?[] will processed as punctuation instead of being expanded A vadkártya karakterek *?[] írásjeleként lesznek feldolgozva, nem pedig kibővítve. Ignore wild card characters in ALL terms and ANY terms modes Figyelembe semmilyen helyettesítő karaktert az ÖSSZES kifejezés és BÁRMELY kifejezés módokban. Color scheme Színválasztás When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Amikor sötét módban jelenítjük meg az HTML-t, próbáljunk sötét háttérrel (és világos színekkel) dolgozni. Ez ellentétes sok dokumentummal, amelyek felülírják a mi világos beállításunkat saját CSS (sötét) előtérszínükkel, ami olvashatatlan dokumentumhoz vezet, ezért alapértelmezetten kikapcsolva van. Use dark background when displaying HTML in dark mode. Használjon sötét háttérképet, amikor sötét módban jeleníti meg az HTML-t. recoll-1.43.12/qtgui/i18n/recoll_de.ts0000644000175000017500000075757615133170400016701 0ustar dockesdockes ActSearchDLG Menu search Menüsuche AdvSearch All clauses alle Ausdrücke Any clause irgendeinen Ausdruck texts Texte spreadsheets Tabellen presentations Präsentationen media Medien messages Nachrichten other Andere Bad multiplier suffix in size filter Ungültiger Multiplikator-Suffix im Größen-Filter text Text spreadsheet Tabelle presentation Präsentation message Nachricht Advanced Search Erweiterte Suche History Next Historie Nächste History Prev Historie Zurück Load next stored search Nächste gespeicherte Suche laden Load previous stored search Vorherige gespeicherte Suche laden AdvSearchBase Advanced search Erweiterte Suche Restrict file types Dateitypen einschränken Save as default Als Standard speichern Searched file types Durchsuchte Dateitypen All ----> Alle ----> Sel -----> Auswahl ----> <----- Sel <---- Auswahl <----- All <---- Alle Ignored file types Nicht durchsuchte Dateitypen Enter top directory for search Geben Sie das Startverzeichnis für die Suche ein Browse Durchsuchen Restrict results to files in subtree: Ergebnisse auf Dateien in folgendem Verzeichnisbaum einschränken: Start Search Suche starten Search for <br>documents<br>satisfying: Suche nach Dokumenten, <br>die Folgendes erfüllen: Delete clause Ausdruck entfernen Add clause Ausdruck hinzufügen Check this to enable filtering on file types Auswählen, um Filterung nach Dateitypen einzuschalten By categories Nach Kategorien Check this to use file categories instead of raw mime types Auswählen, um Dateikategorien statt Mime-Typen zu verwenden Close Schließen All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Alle nicht-leeren Felder rechts werden mit UND ("alle Ausdrücke") oder ODER ("irgendeinen Ausdruck") verknüpft. <br>Felder des Typs "Irgendeines", "Alle" und "Keines" können eine Mischung aus Wörtern und in Anführungszeichen eingeschlossenen Phrasen enthalten. <br>Nicht gefüllte Felder werden ignoriert. Invert Invertieren Minimum size. You can use k/K,m/M,g/G as multipliers Minimale Größe. Sie können k/K, m/M, g/G als Multiplikatoren verwenden Min. Size Min. Größe Maximum size. You can use k/K,m/M,g/G as multipliers Maximale Größe. Sie können k/K, m/M, g/G als Multiplikatoren verwenden Max. Size Max. Größe Select Auswählen Filter Filtern From Von To Bis Check this to enable filtering on dates Auswählen, um Filterung nach Datum einzuschalten Filter dates Nach Datum filtern Find Finden Check this to enable filtering on sizes Auswählen, um Filterung nach Dateigröße einzuschalten Filter sizes Nach Größe filtern Filter birth dates Geburtsdaten filtern ConfIndexW Can't write configuration file Fehler beim Schreiben der Konfigurationsdatei Global parameters Globale Parameter Local parameters Lokale Parameter Search parameters Suchparameter Top directories Start-Verzeichnisse The list of directories where recursive indexing starts. Default: your home. Die Liste der Verzeichnisse, in denen die rekursive Indizierung startet. Standard: Home-Verzeichnis. Skipped paths Auszulassende Pfade These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Dies sind Pfadnamen von Verzeichnissen, welche die Indizierung nicht betritt.<br>Pfad-Elemente können Wildcards enthalten. Die Einträge müssen den Pfaden des Indexers entsprechen (z.B.: wenn das Startverzeichnis '/home/me' beinhaltet und '/home' tatsächlich ein Link zu '/usr/home' ist, würde ein korrekt ausgelassener Pfadeintrag '/home/me/tmp*' und nicht '/usr/home/me/tmp*' sein) Stemming languages Stemming-Sprachen The languages for which stemming expansion<br>dictionaries will be built. Die Sprachen, für die Worstammerweiterungsverzeichnisse erstellt werden. Log file name Log-Dateiname The file where the messages will be written.<br>Use 'stderr' for terminal output Die Datei, in die Ausgaben geschrieben werden.<br>Für Ausgaben auf dem Terminal 'stderr' benutzen. Log verbosity level Ausführlichkeitsstufe des Logs This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Dieser Wert steuert die Menge der Meldungen<br>(nur Fehler oder viele Debugging Ausgaben). Index flush megabytes interval Interval (MB) für Speicherleerung This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Dieser Wert steuert, wieviel Daten indiziert werden bevor die Indexinformationen auf die Festplatte geschrieben werden.<br>Hierdurch kann der Speicherverbrauch des Indizierers gesteuert werden. Standardwert: 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Dies ist der Prozentsatz der Festplattennutzung - Gesamtfestplattennutzung, nicht Indexgröße - bei dem die Indexierung ausfällt und stoppt.<br> Der Standardwert von 0 entfernt jede Grenze. No aspell usage Aspell nicht benutzen Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Deaktiviert die Verwendung von Aspell für die Erzeugung von Schreibweisen-Näherungen im Ausdruck-Explorer-Werkzeug. <br>Nützlich, wenn Aspell nicht vorhanden ist oder nicht funktioniert. Aspell language Sprache für Aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Die Sprache des Aspell-Wörterbuchs (z.B. 'en' oder 'de' ...)<br>Wenn dieser Wert nicht gesetzt ist, wird die NLS-Umgebung verwendet, um die Sprache festzustellen, was im Allgemeinen funktioniert. Um eine Vorstellung zu bekommen, was auf Ihrem System installiert ist, geben Sie 'aspell config' ein und schauen Sie nach .dat Dateien im Verzeichnis 'data-dir'. Database directory name Verzeichnisname für die Datenbank The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Der Name eines Verzeichnisses, in dem der Index gespeichert werden soll.<br>Ein nicht-absoluter Pfad ist dabei relativ zum Konfigurationsverzeichnis. Der Standard ist 'xapiandb'. Unac exceptions Unac Ausnahmen <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Dies sind Ausnahmen für den unac Mechanismus, der standardmäßig alle diakritischen Zeichen entfernt und sie durch kanonische Entsprechungen ersetzt. Sie können (abhängig von Ihrer Sprache) dieses Entfernen von Akzenten für einige Zeichen übersteuern und zusätzliche Ersetzungen angeben, z.B. für Ligaturen. Bei jedem durch Leerzeichen getrennten Eintrag ist das erste Zeichen das Ausgangszeichen und der Rest die Ersetzung. Process the WEB history queue Verarbeite die Web-Chronik-Warteschlange Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Ermöglicht die Indexierung der von Firefox besuchten Seiten.<br>(Sie müssen auch das Firefox-Recoll-Plugin installieren) Web page store directory name Verzeichnisname zur Ablage von Webseiten The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Der Name eines Verzeichnisses, in dem Kopien der besuchten Webseiten gespeichert werden sollen.<br>Ein nicht-absoluter Pfad ist dabei relativ zum Konfigurationsverzeichnis. Max. size for the web store (MB) Maximale Größe für Ablage von Webseiten (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Die Einträge werden nach dem Erreichen der Größe wiederverwertet.<br>Nur die Größe zu erhöhen macht wirklich Sinn, weil die Verringerung des Wertes nicht eine bestehende Datei verkürzt (nur verschwendeten Platz am Ende). Automatic diacritics sensitivity Automatisch diakritische Zeichen beachten <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p> Automatisch die Beachtung von diakritischen Zeichen einschalten, wenn der Suchbegriff Zeichen mit Akzenten enthält (nicht in unac_except_trans). Ansonsten müssen Sie dafür die Abfrageprache und den <i>D</i> Modifikator verwenden um die Beachtung von diakritischen Zeichen anzugeben. Automatic character case sensitivity Automatisch Groß-/Kleinschreibung beachten <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p> Automatisch die Beachtung von Groß-/Kleinschreibung einschalten, wenn der Eintrag Großbuchstaben enthält (außer an erster Stelle). Ansonsten müssen Sie dafür die Abfragesprache und den <i>C</i> Modifikator verwenden um die Groß- und Kleinschreibung der Zeichen anzugeben. Maximum term expansion count Maximale Anzahl von Ausdruck-Erweiterungen <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximale Anzahl von Erweiterungen für einen einzelnen Ausdruck (z.B. bei der Verwendung von Wildcards). Der Standardwert 10 000 ist vernünftig und verhindert, dass Suchanfragen scheinbar einfrieren, während die Liste der Begriffe durchlaufen wird. Maximum Xapian clauses count Maximale Anzahl von Xapian-Ausdrücken <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maximale Anzahl von elementaren Ausdrücken, die wir zu einer einzelnen Xapian Abfrage hinzufügen. In manchen Fällen können die Ergebnisse von Ausdruck-Erweiterungen sich ausmultiplizieren, und wir wollen übermäßigen Speicherverbrauch vermeiden. Der Standardwert 100 000 sollte in den meisten Fällen hoch genug sein und zugleich zu typischen derzeitigen Hardware-Ausstattungen passen. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... Die Sprachen, für die Erweiterungswörterbücher erstellt werden.<br>Siehe die Xapian stemmer Dokumentation für mögliche Werte. Z.B. Englisch, Französisch, Deutsch... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Die Sprache für das Aspells-Wörterbuch. Die Werte sind 2-Buchstaben-Sprachcodes, z.B. 'en', 'fr' ...<br>Wenn dieser Wert nicht festgelegt ist, wird die NLS-Umgebung verwendet, um sie zu berechnen, was in der Regel funktioniert. Um eine Vorstellung davon zu erhalten, was auf Ihrem System installiert ist, geben Sie 'aspell config' ein und suchen Sie nach .dat-Dateien im 'data-dir'-Verzeichnis. Indexer log file name Name der Indexer-Protokolldatei If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Wenn leer, wird der obige Log-Dateinamen-Wert verwendet. Es kann nützlich sein, ein separates Protokoll für diagnostische Zwecke zu haben, da das gemeinsame Protokoll gelöscht wird, wenn <br>die GUI hochfährt. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Prozentsatz des vollen Schwellenwerts für die Festplatte, bei dem die Indizierung beendet wird<br>z.B. 90% um bei 90% voll zu stoppen, 0 oder 100 bedeutet keine Begrenzung) Web history Web-Chronik Process the Web history queue Verarbeite die Warteschlange des Webverlaufs. (by default, aspell suggests mispellings when a query has no results). Standardmäßig schlägt Aspell falsch geschriebene Wörter vor, wenn eine Abfrage keine Ergebnisse liefert. Page recycle interval Seitenaktualisierungsintervall <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Standardmäßig wird nur eine Instanz einer URL im Cache gespeichert. Dies kann geändert werden, indem dieser Wert auf eine Frequenz gesetzt wird, die bestimmt, wie oft wir mehrere Instanzen behalten ('Tag', 'Woche', 'Monat', 'Jahr'). Beachten Sie, dass das Erhöhen des Intervalls vorhandene Einträge nicht löscht. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Hinweis: Alte Seiten werden gelöscht, um Platz für neue zu schaffen, wenn die maximale Größe erreicht ist. Aktuelle Größe: %1 Start folders Ordner starten The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Die Liste der zu indexierenden Ordner/Verzeichnisse. Unterordner werden rekursiv verarbeitet. Standardmäßig: Ihr Zuhause. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Speichervollstandsgrenzwert in Prozent, bei dem wir mit dem Indexieren aufhören (z.B. 90, um bei 90 % Voll zu stoppen, 0 oder 100 bedeutet keine Begrenzung) Browser add-on download folder Browser-Add-On-Download-Ordner Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Nur festlegen, wenn Sie den Parameter "Downloads-Unterverzeichnis" in den Einstellungen des Webbrowser-Add-Ons festgelegt haben. In diesem Fall sollte es der vollständige Pfad zum Verzeichnis sein (z.B. /home/[ich]/Downloads/mein-unterverzeichnis) Store some GUI parameters locally to the index Speichern Sie einige GUI-Parameter lokal im Index. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index GUI-Einstellungen werden normalerweise in einer globalen Datei gespeichert, die für alle Indizes gültig ist. Das Festlegen dieses Parameters macht einige Einstellungen, wie z.B. die Ergebnistabelleneinrichtung, spezifisch für den Index. Suspend the real time indexer when running on battery Den Echtzeit-Indexer im Batteriebetrieb pausieren. The indexer will wait for a return on AC and reexec itself when it happens Der Indexer wird auf eine Rückkehr auf AC warten und sich selbst neu ausführen, wenn dies geschieht. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Die Liste der zu indizierenden Ordner/Verzeichnisse, rekursiv mit ihren Unterordnern.<br>Das '~'-Zeichen erweitert sich auf Ihr Home-Verzeichnis, das der Standard-Startwert ist. (by default, aspell suggests mispellings when a query has no results). (Standardmäßig schlägt Aspell falsch geschriebene Wörter vor, wenn eine Abfrage keine Ergebnisse liefert). Database directory Verzeichnisname für die Datenbank The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Der Name eines Verzeichnisses, in dem der Index gespeichert werden soll.<br>Ein nicht-absoluter Pfad ist dabei relativ zum Konfigurationsverzeichnis. Der Standard ist 'xapiandb'. ConfSubPanelW Only mime types Nur Mime-Typen An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Eine exklusive Liste der indizierten Mimetypen.<br>Sonst wird nichts indiziert. Normalerweise leer und inaktiv Exclude mime types Auszuschließende Mime-Typen Mime types not to be indexed Mime-Typen, die nicht indiziert werden Max. compressed file size (KB) Max. Größe kompr. Dateien (kB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Dies ist eine Obergrenze; komprimierte Dateien jenseits dieser Größe werden nicht verarbeitet. Auf -1 setzen, um keine Obergrenze zu haben, auf 0, um nie zu dekomprimieren. Max. text file size (MB) Max. Größe Textdateien (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Dies ist eine Obergrenze; Textdateien jenseits dieser Größe werden nicht verarbeitet Auf -1 setzen, um keine Obergrenze zu haben. Dies dient dazu, riesige Log-Dateien vom Index auszuschließen. Text file page size (KB) Seitengröße Textdateien (kB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Wenn dieser Wert gesetzt ist (ungleich -1), werden Textdateien zur Indizierung in Stücke dieser Größe aufgeteilt. Das hilft bei der Suche in sehr großen Textdateien (z.B. Log-Dateien). Max. filter exec. time (s) Max. Ausführungszeit der Filter (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Externe Filter, die länger als diese Zeit laufen, werden abgebrochen. Das ist für den seltenen Fall (Postscript), in dem ein Dokument eine unendliche Schleife auslöst. Auf -1 setzen, um keine Obergrenze zu haben. Global Globale ConfigSwitchDLG Switch to other configuration Wechseln Sie zu einer anderen Konfiguration. ConfigSwitchW Choose other Wählen Sie eine andere. Choose configuration directory Wählen Sie das Konfigurationsverzeichnis aus. CronToolW Cron Dialog Cron-Zeitplan <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> Zeitplan für periodische Indizierung (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Jedes Feld kann eine Wildcard (*), eine einzelne Zahl, eine mit Kommata getrennte Liste (1,3,5) oder einen Bereich (1-7) enthalten. Die Felder werden <span style=" font-style:italic;">so wie sie sind</span> in der crontab-Datei verwendet und die gesamte crontab Syntax kann verwendet werden, siehe crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Beispielsweise startet die Eingabe <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Wochentage, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Stunden</span> und <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minuten</span> recollindex jeden Tag um 12:15 Uhr und 19:15 Uhr.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ein Zeitplan mit sehr häufigen Aktivierungen ist wahrscheinlich weniger effizient als Echtzeit-Indizierung.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Wochentage (* oder 0-7, 0/7 ist Sonntag) Hours (* or 0-23) Stunden (* oder 0-23) Minutes (0-59) Minuten (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wählen Sie <span style=" font-style:italic;">Deaktivieren</span>, um die periodische Indizierung auszuschalten, <span style=" font-style:italic;">Aktivieren</span>, um sie einzuschalten, <span style=" font-style:italic;">Abbruch</span>, um nichts zu verändern.</p></body></html> Enable Aktivieren Disable Deaktivieren It seems that manually edited entries exist for recollindex, cannot edit crontab Offenbar gibt es manuelle Einträge für recollindex, crontab kann nicht angepasst werden. Error installing cron entry. Bad syntax in fields ? Fehler beim Erstellen des cron Eintrags. Falsche Syntax in Feldern? EditDialog Dialog Dialog EditTrans Source path Quellpfad Local path Lokaler Pfad Config error Konfigurationsfehler Original path Originalpfad Path in index Pfad im Index Translated path Übersetzter Pfad EditTransBase Path Translations Pfadumwandlungen Setting path translations for Setze Pfadumwandlungen für Select one or several file types, then use the controls in the frame below to change how they are processed Wählen Sie einen oder mehrere Dateitypen aus. Nutzen Sie dann die Bedienelemente unten, um einzustellen wie sie verarbeitet werden. Add Hinzufügen Delete Entfernen Cancel Abbrechen Save Speichern FirstIdxDialog First indexing setup Einrichten für die erste Indizierung <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Es existiert noch kein Index für diese Konfiguration.</span><br /><br />Wenn Sie nur Ihr Home-Verzeichnis mit sinnvollen Voreinstellungen indizieren wollen, wählen Sie die Schaltfläche <span style=" font-style:italic;">Indizierung jetzt starten</span>. Sie können die Details später anpassen.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wenn Sie das Verhalten genauer festlegen wollen, verwenden Sie die folgenden Verknüpfungen, um Einstellungen und Zeitplan für die Indizierung anzupassen.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Diese Werkzeuge können Sie später im Menü <span style=" font-style:italic;">Einstellungen</span> erreichen.</p></body></html> Indexing configuration Einstellungen für Indizierung This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Hier können Sie die zu indizierenden Verzeichnisse und andere Einstellungen (wie auszuschließende Dateipfade oder -namen, Standard-Zeichensatz usw.) anpassen. Indexing schedule Zeitplan für Indizierung This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Hier können Sie zwischen Batch-Indizierung und Echtzeit-Indizierung wählen und einen automatischen Zeitplan für die Batch-Indizierung einrichten (mit cron). Start indexing now Indizierung jetzt starten FragButs %1 not found. %1 nicht gefunden. %1: %2 %1: %2 Fragment Buttons Fragmenttasten Query Fragments Abfrage Fragmente IdxSchedW Index scheduling setup Einrichtung des Zeitplans für die Indizierung <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> Indizierung kann ständig laufen und Datein indizieren sobald sie verändert werden, oder aber nur zu bestimmten Zeitpunkten ablaufen.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Im Handbuch finden Sie Informationen, anhand derer Sie sich für einen der Ansätze entscheiden können (drücken Sie F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dieses Werkzeug hilft Ihnen, einen Zeitplan für periodische Indizierungs-Läufe einzurichten oder die Echtzeit-Indizierung zu starten, wenn Sie sich anmelden (oder beides, was aber selten sinnvoll sein dürfte). </p></body></html> Cron scheduling Cron-Zeitplan The tool will let you decide at what time indexing should run and will install a crontab entry. Mit diesem Werkzeug können Sie festlegen, zu welchen Zeiten die Indizierung laufen soll, und einen crontab Eintrag anlegen. Real time indexing start up Start der Echtzeit-Indizierung Decide if real time indexing will be started when you log in (only for the default index). Entscheiden Sie, ob die Echtzeit-Indizierung beim Anmelden gestartet wird (nur für den Standard-Index). ListDialog Dialog Dialog GroupBox GruppenBox Main No db directory in configuration Kein Datenbankverzeichnis konfiguriert Could not open database in Fehler beim Öffnen der Datenbank in . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Drücken Sie Abbrechen, um die Konfigurationsdatei vor dem Start der Indizierung anzupassen oder OK um mit der Indizierung zu beginnen. Configuration problem (dynconf Konfigurationsproblem (dynconf) "history" file is damaged or un(read)writeable, please check or remove it: "history" Datei ist beschädigt oder nicht les-/schreibbar, bitte überprüfen oder entfernen Sie sie: "history" file is damaged, please check or remove it: Die "History"-Datei ist beschädigt, bitte überprüfe oder entferne sie: Needs "Show system tray icon" to be set in preferences! Muss "System Tray-Symbol anzeigen" in den Einstellungen aktiviert werden! PTransEdit Path in index Pfad im Index Translated path Übersetzter Pfad Config error Konfigurationsfehler Original path Originalpfad Local path Lokaler Pfad PTransEditBase Path Translations Pfadumwandlungen Select one or several file types, then use the controls in the frame below to change how they are processed Wählen Sie eine oder mehrere Dateitypen aus und verwenden Sie die Steuerelemente im Rahmen unten, um zu ändern, wie sie verarbeitet werden. Add Hinzufügen Delete Entfernen Cancel Abbrechen Save Speichern Preview &Search for: &Suche nach: &Next &Nächstes &Previous &Vorheriges Match &Case Groß-/Kleinschreibung &beachten Clear Leeren Creating preview text Erzeuge Vorschautext Loading preview text into editor Lade Vorschautext in den Editor Cannot create temporary directory Fehler beim Anlegen des temporären Verzeichnisses Cancel Abbrechen Close Tab Tab schließen Missing helper program: Fehlendes Hilfsprogramm: Can't turn doc into internal representation for Überführung in interne Darstellung nicht möglich für Cannot create temporary directory: Fehler beim Anlegen des temporären Verzeichnisses: Error while loading file Fehler beim Lesen der Datei Form Formular Tab 1 Tab 1 Open Öffnen Canceled Abgebrochen Error loading the document: file missing. Fehler beim Laden des Dokumentes: Datei fehlt. Error loading the document: no permission. Fehler beim Laden des Dokumentes: Keine Berechtigung. Error loading: backend not configured. Fehler beim Laden: Backend nicht konfiguriert. Error loading the document: other handler error<br>Maybe the application is locking the file ? Fehler beim Laden des Dokumentes: Anderer Bedienprogrammfehler<br>Vielleicht sperrt die Anwendung die Datei ? Error loading the document: other handler error. Fehler beim Laden des Dokumentes: Anderer Bedienprogrammfehler. <br>Attempting to display from stored text. <br> Versuche aus gespeichertem Text anzuzeigen. Could not fetch stored text Gespeicherter Text konnte nicht abgerufen werden Previous result document Vorheriges Ergebnisdokument Next result document Nächste Ergebnisdokument Preview Window Vorschaufenster Close Window Fenster schließen Next doc in tab Nächstes Dokument im Tab Previous doc in tab Vorheriges Dokument im Tab Close tab Tab schließen Print tab Drucke Tab Close preview window Vorschaufenster schließen Show next result Nächstes Ergebnis anzeigen Show previous result Vorheriges Ergebnis anzeigen Print Drucken PreviewTextEdit Show fields Felder zeigen Show main text Vorschautext zeigen Print Drucken Print Current Preview Aktuelle Vorschau drucken Show image Zeige Bild Select All Alles auswählen Copy Kopieren Save document to file Dokument in Datei sichern Fold lines Zeilen umbrechen Preserve indentation Einrückung erhalten Open document Dokument öffnen Reload as Plain Text Neu laden als Klartext Reload as HTML Neu laden als HTML QObject Global parameters Globale Parameter Local parameters Lokale Parameter <b>Customised subtrees <b>Angepasste<br> Unterverzeichnisse The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Die Liste der Unterverzeichnisse in der indizierten Hierarchie, in denen einige Parameter anders gesetzt werden müssen. Voreinstellung: leer. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Die folgenden Parameter werden entweder global gesetzt (wenn nichts oder eine leere<br> Zeile in der Liste oben ausgewählt ist) oder für das ausgewählte Unterverzeichnis.<br> Sie können Verzeichnisse durch Anklicken von +/- hinzufügen oder entfernen.<br> Skipped names Auszulassende Namen These are patterns for file or directory names which should not be indexed. Dies sind Muster für Dateien oder Verzeichnisse, die nicht indiziert werden sollen. Default character set Standard-Zeichensatz This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. DIes ist der Zeichensatz, der für Dateien benutzt wird, die ihren Zeichensatz nicht intern definieren, z.B. Textdateien. Der Standardwert ist leer und der Wert der NLS-Umgebung wird benutzt. Follow symbolic links Folge symbolischen Links Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Folge symbolischen Links bei der Indizierung. Der Standardwert ist "Nein", um doppelte Indizierung zu vermeiden. Index all file names Indiziere alle Dateinamen Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indiziere die Namen von Dateien, deren Inhalt nicht erkannt oder verarbeitet werden kann (kein oder nicht unterstützter Mime-Typ). Der Standardwert ist "Ja". Beagle web history Beagle Web-Chronik Search parameters Suchparameter Web history Web-Chronik Default<br>character set Standard-<br>Zeichensatz Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Zeichensatz zum Lesen von Dateien, die den Zeichensatz nicht intern identifizieren, zum Beispiel reine Textdateien.<br>Der Standardwert ist leer und der Wert der NLS Umgebung wird verwendet. Ignored endings Ignorierte Endungen These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Dies sind Dateiendungen für Dateien, die nur durch Inhalte indiziert werden (kein MIME-Typ-Identifikationsversuch, keine Dekompression, keine Inhaltsindizierung. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Dies sind Dateinamen-Endungen für Dateien, die nur nach Namen indiziert werden (keine MIME-Typ-Identifikationsversuch, keine Dekompression, keine Inhaltsindizierung). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>Die folgenden Parameter werden entweder global gesetzt (wenn nichts oder eine leere Zeile in der Liste oben ausgewählt ist) oder für das ausgewählte Unterverzeichnis. Sie können Verzeichnisse durch Anklicken von +/- hinzufügen oder entfernen. These are patterns for file or directory names which should not be indexed. Dies sind Muster für Datei- oder Verzeichnisnamen, die nicht indiziert werden sollten. QWidget Create or choose save directory Speicherverzeichnis erstellen oder auswählen Choose exactly one directory Wähle genau ein Verzeichnis aus Could not read directory: Kann das Verzeichnis nicht lesen: Unexpected file name collision, cancelling. Unerwartete Dateinamenkollision, Stornierung, es wird abgebrochen. Cannot extract document: Das Dokument kann nicht extrahiert werden: &Preview &Vorschau &Open &Öffnen Open With Öffnen mit Run Script Skripte ausführen Copy &File Name &Dateinamen kopieren Copy &URL &URL kopieren &Write to File &Schreibe in Datei Save selection to files Auswahl in Dateien sichern Preview P&arent document/folder Vorschau des &übergeordneten Dokuments/Ordners &Open Parent document/folder Ö&ffnen des übergeordneten Dokuments/Ordners Find &similar documents &Ähnliche Dokumente finden Open &Snippets window Öffne &Schnipsel-Fenster Show subdocuments / attachments Untergeordnete Dokumente / Anhänge anzeigen &Open Parent document Ö&ffnen des übergeordneten Dokuments &Open Parent Folder Ö&ffnen des übergeordneten Ordners Copy Text Text kopieren Copy &File Path Kopieren Sie den Dateipfad. Copy File Name Dateiname kopieren QxtConfirmationMessage Do not show again. Nicht erneut zeigen. RTIToolW Real time indexing automatic start Automatischer Start der Echtzeit-Indizierung <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> Indizierung kann im Hintergrund laufen und den Index in Echtzeit aktualisieren sobald sich Dateien ändern. Sie erhalten so einen Index, der stets aktuell ist, aber die System-Resourcen werden ununterbrochen beansprucht.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></htm Start indexing daemon with my desktop session. Indizierungs-Dämon mit Desktop-Sitzung starten Also start indexing daemon right now. Indizierungs-Dämon jetzt sofort starten Replacing: Ersetze: Replacing file Ersetze Datei Can't create: Fehler beim Erzeugen von: Warning Warnung Could not execute recollindex Fehler beim Ausführen von recollindex Deleting: Lösche: Deleting file Lösche Datei Removing autostart Autostart wird entfernt Autostart file deleted. Kill current process too ? Autotstart-Datei wurde entfernt. Soll auch der laufende Prozess beendet werden? Configuration name Konfigurationsname Short alphanumeric nickname for this config Kurzer alphanumerischer Spitzname für diese Konfiguration Could not find Konnte nicht finden RclCompleterModel Hits Treffer Hits Treffer RclMain About Recoll Über Recoll Executing: [ Ausführen: [ Cannot retrieve document info from database Keine Informationen zum Dokument in der Datenbank Warning Warnung Can't create preview window Fehler beim Erzeugen des Vorschaufensters Query results Suchergebnisse Document history Dokumenten-Chronik History data Chronik-Daten Indexing in progress: Indizierung läuft: Files Dateien Purge Säubern Stemdb Wortstämme Closing Schließen Unknown Unbekannt This search is not active any more Diese Suche ist nicht mehr aktiv Can't start query: Kann die Suche nicht starten: Bad viewer command line for %1: [%2] Please check the mimeconf file Fehlerhafter Anzeigebefehl für %1: [%2] Überprüfen Sie die Datei mimeconf. Cannot extract document or create temporary file Fehler beim Extrahieren des Dokuments oder beim Erzeugen der temporären Datei (no stemming) (keine Stammformreduktion/ Stemming) (all languages) (alle Sprachen) error retrieving stemming languages Fehler beim Holen der Stemming-Sprachen Update &Index Index &aktualisieren Indexing interrupted Indizierung unterbrochen Stop &Indexing &Indizierung stoppen All Alle media Medien message Nachricht other Andere presentation Präsentation spreadsheet Tabelle text Text sorted sortiert filtered gefiltert External applications/commands needed and not found for indexing your file types: Externe Anwendungen/Befehle, die zur Indizierung Ihrer Dateitypen gebraucht werden und nicht gefunden wurden: No helpers found missing Keine fehlenden Hilfsprogramme Missing helper programs Fehlende Hilfsprogramme Save file dialog Dateidialog speichern Choose a file name to save under Wählen Sie einen Dateinamen zum Speichern unter Document category filter Filter für Dokumenten-Kategorie No external viewer configured for mime type [ Kein externes Anzeigeprogramm konfiguriert für Mime-Typ [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Das in mimeview angegebene Anzeigeprogramm für %1: %2 wurde nicht gefunden. Wollen Sie den Einstellungs-Dialog starten? Can't access file: Fehler beim Zugriff auf Datei: Can't uncompress file: Fehler beim Entpacken von Datei: Save file Datei sichern Result count (est.) Anzahl Ergebnisse (ca.) Query details Details zur Suchanfrage Could not open external index. Db not open. Check external index list. Externer Index konnte nicht geöffnet werden. Datenbank nicht offen. Überprüfen Sie die Liste der externen Indizes. No results found Keine Ergebnisse gefunden None Keine Updating Aktualisiere Done Fertig Monitor Überwachen Indexing failed Indizierung gescheitert The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Der laufende Indizierungs-Prozess wurde nicht aus diesem Programm gestartet. Drücken SIe OK, um ihn dennoch zu stoppen oder Abbrechen, um ihn unverändert zu lassen. Erasing index Lösche Index Reset the index and start from scratch ? Index zurücksetzen und ganz neu aufbauen? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Suche läuft.<br>Aufgrund von Einschränkungen der Indizierungs-Bibliothek<br>führt ein Abbruch zur Beendigung des Programms. Error Fehler Index not open Index nicht geöffnet Index query error Fehler beim Abfragen des Index Indexed Mime Types Indexierte Mime Typen Content has been indexed for these MIME types: Für diese MIME-Typen wurde der Inhalte indiziert: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Der Index ist für diese Datei nicht auf dem neuesten Stand. Es soll nicht das Risiko eingegangen werden, den falschen Eintrag anzuzeigen. Drücken SIe OK, um den Index für diese Datei zu aktualisieren und starten Sie die Suchanfrage erneut, wenn die Indizierung abgeschlossen ist. Drücken Sie ansonsten Abbrechen. Can't update index: indexer running Fehler beim Aktualisieren des Index: Indizierung läuft Indexed MIME Types Indizierte Mime-Typen Bad viewer command line for %1: [%2] Please check the mimeview file Fehlerhafter Anzeigebefehl für %1: [%2] Überprüfen Sie die Datei mimeview. Viewer command line for %1 specifies both file and parent file value: unsupported Anzeigebefehl für %1 legt Datei und übergeordnete Datei fest: nicht unterstützt Cannot find parent document Übergeordnetes Dokument nicht gefunden Indexing did not run yet Indizierung ist noch nicht durchgeführt worden External applications/commands needed for your file types and not found, as stored by the last indexing pass in Externe Anwendungen/Befehle, die zur Indizierung Ihrer Dateitypen gebraucht werden und nicht gefunden wurden - vom letzten Indizierungslauf hinterlegt unter Index not up to date for this file. Refusing to risk showing the wrong entry. Der Index ist für diese Datei nicht mehr aktuell. Einträge könnten fehlerhaft sein und werden nicht angezeigt. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Drücken Sie Ok, um den Index für diese Datei zu aktualisieren und die Suche daraufhin zu wiederholen. Ansonsten drücken Sie auf Abbrechen. Indexer running so things should improve when it's done Indizierung ist im Gange. Die Resultate sollten sich nach der Fertigstelltung verbessert haben Sub-documents and attachments Untergeordnete Dokumente und Anhänge Document filter Dokumentenfilter Index not up to date for this file. Refusing to risk showing the wrong entry. Der Index ist für diese Datei nicht mehr aktuell. Einträge könnten fehlerhaft sein und werden nicht angezeigt. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Klicken Sie auf Ok, um den Index für diese Datei zu aktualisieren, dann müssen Sie die Abfrage erneut ausführen, wenn die Indizierung abgeschlossen ist. The indexer is running so things should improve when it's done. Der Indexer läuft, daher sollten sich die Dinge verbessern, wenn er fertig ist. The document belongs to an external indexwhich I can't update. Das Dokument gehört zu einem externen Index, den ich't aktualisieren kann. Click Cancel to return to the list. Click Ignore to show the preview anyway. Klicken Sie auf Abbrechen, um zur Liste zurückzukehren. Klicken Sie auf Ignorieren, um die Vorschau trotzdem anzuzeigen. Duplicate documents Doppelte Dokumente These Urls ( | ipath) share the same content: Diese URLs ( | ipath) sind inhaltsgleich: Bad desktop app spec for %1: [%2] Please check the desktop file Falsche Desktop-App-Spezifikation für %1: [%2] Bitte überprüfen Sie die Desktop-Datei Bad paths Falsche Pfade Bad paths in configuration file: Falsche Pfade in der Konfigurationsdatei: Selection patterns need topdir Auswahlmuster benötigen Topdir Selection patterns can only be used with a start directory Auswahlmuster können nur mit einem Startverzeichnis verwendet werden No search Keine Suche No preserved previous search Keine erhaltene vorherige Suche Choose file to save Wählen Sie eine Dateie zum Speichern Saved Queries (*.rclq) Gespeicherte Abfragen (*.rclq) Write failed Schreiben gescheitert Could not write to file Kann nicht in Datei schreiben Read failed Lesen fehlgeschlagen Could not open file: Kann Datei nicht Öffnen: Load error Ladefehler Could not load saved query Die gespeicherte Abfrage kann nicht geladen werden Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Öffnen einer temporären Kopie. Änderungen werden verloren gehen, wenn du sie nicht <<br/> an einen dauerhaften Ort speicherst. Do not show this warning next time (use GUI preferences to restore). Diese Warnung beim nächsten Mal nicht mehr anzeigen (Die GUI-Einstellungen zum Wiederherzustellen verwenden). Disabled because the real time indexer was not compiled in. Deaktiviert, weil der Echtzeit-Indexer nicht einkompiliert wurde. This configuration tool only works for the main index. Dieses Konfigurationstool funktioniert nur für den Hauptindex. The current indexing process was not started from this interface, can't kill it Der aktuelle Indizierungsprozess wurde nicht von dieser Schnittstelle aus gestartet, kann ihn't beenden The document belongs to an external index which I can't update. Das Dokument gehört zu einem externen Index, den ich nicht aktualisieren kann. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Klicken Sie auf Abbrechen, um zur Liste zurückzukehren. <br>Klicken Sie auf Ignorieren, um die Vorschau trotzdem anzuzeigen (und sich für diese Sitzung merken). Index scheduling Indexplanung Sorry, not available under Windows for now, use the File menu entries to update the index Entschuldigung, momentan unter Windows nicht verfügbar, verwenden Sie die Datei-Menü-Einträge um den Index zu aktualisieren Can't set synonyms file (parse error?) Kann't Synonyms-Datei setzen (Parse-Fehler?) Index locked Index gesperrt Unknown indexer state. Can't access webcache file. Unbekannter Indexer Zustand. Kann nicht auf die Webcache-Datei zugreifen. Indexer is running. Can't access webcache file. Indexer läuft. Kann nicht auf Webcache-Datei zugreifen. with additional message: mit zusätzlicher Nachricht: Non-fatal indexing message: Nicht schwerwiegende Indexierungsnachricht: Types list empty: maybe wait for indexing to progress? Liste der Typen leer: Warten Sie vielleicht auf den Fortschritt der Indexierung? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Viewer Kommandozeile für %1 gibt die übergeordnete Datei an, aber URL ist http[s]: nicht unterstützt Tools Werkzeuge Results Ergebnisse (%d documents/%d files/%d errors/%d total files) (%d Dokumente/%d Dateien/%d Fehler/%d Gesamtdateien) (%d documents/%d files/%d errors) (%d Dokumente/%d Dateien/%d Fehler) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Leere oder nicht vorhandene Pfade in der Konfigurationsdatei. Klicken Sie auf Ok, um die Indexierung trotzdem zu starten (abwesende Daten werden nicht aus dem Index gelöscht): Indexing done Indizierung erledigt Can't update index: internal error Der Index kann nicht aktualisiert werden: interner Fehler Index not up to date for this file.<br> Der Index ist für diese Datei nicht aktuell.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Ebenso scheint es, dass das letzte Index-Update für die Datei fehlgeschlagen ist.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Klicken Sie auf Ok, um den Index für diese Datei zu aktualisieren. Sie müssen die Abfrage erneut ausführen, wenn die Indexierung erfolgt ist.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Klicken Sie auf Abbrechen, um zur Liste zurückzukehren.<br>Klick Ignorieren, um die Vorschau trotzdem anzuzeigen (und sich für diese Sitzung einzuprägen). Es besteht die Gefahr, den falschen Eintrag anzuzeigen.<br/> documents Dokumente document Dokument files Dateien file Datei errors Fehler error Fehler total files) Gesamte Dateien) No information: initial indexing not yet performed. Keine Informationen: Die Erstindizierung wurde noch nicht durchgeführt. Batch scheduling Stapelplanung The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Mit dem Tool können Sie entscheiden, wann die Indexierung laufen soll. Es verwendet den Windows-Taskplaner. Confirm Bestätigen Erasing simple and advanced search history lists, please click Ok to confirm Einfache und erweiterte Suchhistorielisten löschen, zum Bestätigen bitte auf Ok klicken Could not open/create file Kann Datei nicht Öffnen/Erzeugen F&ilter F&ilter Could not start recollindex (temp file error) Konnte den Recollindex nicht starten (temporäre Datei Fehler) Could not read: Kann nicht gelesen werden: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Dies ersetzt den aktuellen Inhalt der Ergebnislisten-Header-Zeichenkette und GUI qss Dateinamen. Fortfahren ? You will need to run a query to complete the display change. Sie müssen eine Abfrage ausführen, um die Anzeigeänderung abzuschließen. Simple search type Einfache Suchart Any term Irgendein Ausdruck All terms Alle Ausdrücke File name Dateiname Query language Abfragesprache Stemming language Stemming-Sprache Main Window Hauptfenster Focus to Search Fokus auf Suche Focus to Search, alt. Fokus auf Suche, alternativ Clear Search Suche säubern Focus to Result Table Fokus auf Ergebnistabelle Clear search Suche löschen Move keyboard focus to search entry Tastaturfokus in den Sucheintrag verschieben Move keyboard focus to search, alt. Tastaturfokus auf Suche verschieben, alt. Toggle tabular display Tabellenanzeige umschalten Move keyboard focus to table Tastaturfokus in Tabelle verschieben Flushing Leeren Show menu search dialog Zeige das Menü Suchdialog an. Duplicates Duplikate Filter directories Verzeichnisse filtern. Main index open error: Hauptindex-Öffnungsfehler: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Der Index könnte beschädigt sein. Vielleicht versuchen Sie, xapian-check auszuführen oder den Index neu aufzubauen? This search is not active anymore Diese Suche ist nicht mehr aktiv. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Betrachter-Befehlszeile für %1 gibt übergeordnete Datei an, aber URL ist nicht file:// : nicht unterstützt. The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Der im Mimeview für %1 spezifizierte Viewer: %2 wurde nicht gefunden. Möchten Sie den Einstellungsdialog starten? Show advanced search dialog Erweiterte Suchdialog anzeigen with additional message: mit zusätzlicher Nachricht: RclMainBase Previous page Vorherige Seite Next page Nächste Seite &File &Datei E&xit &Beenden &Tools &Werkzeuge &Help &Hilfe &Preferences Ein&stellungen Search tools Suchwerkzeuge Result list Ergebnisliste &About Recoll &Über Recoll Document &History &Dokumenten-Chronik Document History Dokumenten-Chronik &Advanced Search &Erweiterte Suche Advanced/complex Search Erweiterte/komplexe Suche &Sort parameters &Sortierparameter Sort parameters Sortierparameter Next page of results Nächste Ergebnisseite Previous page of results Vorherige Ergebnisseite &Query configuration Einstellungen für &Suche &User manual &Benutzerhandbuch Recoll Rekoll Ctrl+Q Strg+Q Update &index &Index aktualisieren Term &explorer &Ausdruck-Explorer Term explorer tool Ausdruck-Explorer-Werkzeug External index dialog Dialog für externe Indizes &Erase document history Lösche &Dokumenten-Chronik First page Erste Seite Go to first page of results Gehe zur ersten Ergebnisseite &Indexing configuration &Einstellungen für Indizierung All Alle &Show missing helpers Zeige fehlende &Hilfsprogramme PgDown PgRunter Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Umschalt+Home, Strg+S, Strg+Q, Strg+S PgUp PgUp &Full Screen &Vollbild F11 F11 Full Screen Vollbild &Erase search history Lösche &Such-Chronik sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Nach Datum sortieren (von alt nach neu) sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Nach Datum sortieren (von neu nach alt) Show Query Details Zeige Details zur Suchanfrage Show results as table Zeige Ergebnisse als Tabelle &Rebuild index Index &neu aufbauen &Show indexed types Zeige indizierte &Typen Shift+PgUp Umschalt+PgUp &Indexing schedule &Zeitplan für Indizierung E&xternal index dialog Dialog für externe &Indizes &Index configuration &Index-Einstellungen &GUI configuration &GUI-Einstellungen &Results &Ergebnisse Sort by date, oldest first Nach Datum sortieren (von alt nach neu) Sort by date, newest first Nach Datum sortieren (von neu nach alt) Show as table Als Tabelle anzeigen Show results in a spreadsheet-like table Zeigt Ergebnisse als Tabelle an Save as CSV (spreadsheet) file Tabelle als CSV Datei speichern Saves the result into a file which you can load in a spreadsheet Speichert Resultate als Tabellenkalkulations-kompatible CSV-Datei ab Next Page Nächste Seite Previous Page Vorherige Seite First Page Erste Seite Query Fragments Abfrage-Fragmente With failed files retrying Bei fehlgeschlagenen Dateien erneut versuchen Next update will retry previously failed files Beim nächsten Update werden zuvor fehlgeschlagene Dateien erneut versucht Save last query Letzte Abfrage speichern Load saved query Gespeicherte Abfrage laden Special Indexing Spezielle Indizierung Indexing with special options Indizierung mit speziellen Optionen Indexing &schedule Indizierungs&plan Enable synonyms Synonyme aktivieren &View &Ansicht Missing &helpers Fehlende &Hilfsprogramme Indexed &MIME types Indizierte &MIME-Typen Index &statistics Index-&Statistiken Webcache Editor Webcache Editor Trigger incremental pass Inkrementeller Auslöser E&xport simple search history E&xportiere einfache Suchhistorie Use default dark mode Verwende den Standard-Dunkelmodus Dark mode Dunkler Modus &Query Ab&fragen Increase results text font size Erhöhen Sie die Schriftgröße der Suchergebnisse. Increase Font Size Schriftgröße erhöhen Decrease results text font size Verringern Sie die Schriftgröße der Suchergebnisse. Decrease Font Size Schriftgröße verkleinern Start real time indexer Starten Sie den Echtzeit-Indexer. Query Language Filters Abfrage-Sprachfilter Filter dates Nach Datum filtern Assisted complex search Unterstützte komplexe Suche Filter birth dates Geburtsdaten filtern. Switch Configuration... Konfiguration wechseln... Choose another configuration to run on, replacing this process Wählen Sie eine andere Konfiguration aus, um auf dieser zu laufen, und ersetzen Sie diesen Prozess. &User manual (local, one HTML page) Benutzerhandbuch (lokal, eine HTML-Seite) &Online manual (Recoll Web site) Online-Handbuch (Recoll-Website) Path translations Pfadübersetzungen With failed files retrying Bei fehlgeschlagenen Dateien erneut versuchen RclTrayIcon Restore Wiederherstellen Quit Beenden RecollModel Abstract Auszug Author Autor Document size Größe des Dokuments Document date Datum des Dokuments File size Größe der Datei File name Dateiname File date Datum der Datei Ipath Interner Pfad Keywords Schlagworte Mime type Mime Type Original character set Ursprünglicher Zeichensatz Relevancy rating Relevanz-Bewertung Title Titel URL URL Mtime Änderungszeitpunkt Date Datum Date and time Datum und Uhrzeit MIME type MIME-Typ Can't sort by inverse relevance Kann nicht nach inverser Relevanz sortieren ResList Result list Ergebnisliste Unavailable document Dokument nicht verfügbar Previous Zurück Next Weiter <p><b>No results found</b><br> <p><b>Keine Ergebnisse gefunden</b><br> &Preview &Vorschau Copy &URL &URL kopieren Find &similar documents &Ähnliche Dokumente finden Query details Suchdetails (show query) (Suchanfrage zeigen) Copy &File Name &Dateinamen kopieren filtered gefiltert sorted sortiert Document history Dokumenten-Chronik Preview Vorschau Open Öffnen <p><i>Alternate spellings (accents suppressed): </i> <p><i>Alternative Schreibweisen (Akzente unterdrückt): </i> &Write to File &Schreibe in Datei Preview P&arent document/folder Vorschau des &übergeordneten Dokuments/Ordners &Open Parent document/folder Ö&ffnen des übergeordneten Dokuments/Ordners &Open &Öffnen Documents Dokumente out of at least von mindestens for für <p><i>Alternate spellings: </i> <p><i>Alternative Schreibweisen: </i> Open &Snippets window Öffne &Schnipsel-Fenster Duplicate documents Doppelte Dokumente These Urls ( | ipath) share the same content: Diese URLs ( | ipath) sind inhaltsgleich: Result count (est.) Anzahl Ergebnisse (ca.) Snippets Schnipsel This spelling guess was added to the search: Dieser Rechtschreibvorschlag wurde zur Suche hinzugefügt: These spelling guesses were added to the search: Diese Rechtschreibvorschläge wurden der Suche hinzugefügt: ResTable &Reset sort Sortierung &zurücksetzen &Delete column Spalte &löschen Add " " hinzufügen " column " Spalte Save table to CSV file Tabelle als CSV Datei speichern Can't open/create file: Fehler beim Öffnen/Erzeugen von Datei: &Preview &Vorschau &Open &Öffnen Copy &File Name &Dateinamen kopieren Copy &URL &URL kopieren &Write to File &Schreibe in Datei Find &similar documents &Ähnliche Dokumente finden Preview P&arent document/folder Vorschau des &übergeordneten Dokuments/Ordners &Open Parent document/folder Ö&ffnen des übergeordneten Dokuments/Ordners &Save as CSV Als CSV &speichern Add "%1" column Spalte "%1" hinzufügen Result Table Ergebnistabelle Open Öffnen Open and Quit Öffnen und Verlassen Preview Vorschau Show Snippets Schnipsel anzeigen Open current result document Aktuelles Ergebnisdokument öffnen Open current result and quit Aktuelles Ergebnis öffnen und beenden Show snippets Snippets anzeigen Show header Header anzeigen Show vertical header Zeige vertikale Kopfzeile Copy current result text to clipboard Aktuellen Ergebnistext in Zwischenablage kopieren Use Shift+click to display the text instead. Verwenden Sie Shift+Klick, um den Text anzuzeigen. %1 bytes copied to clipboard %1 Bytes in die Zwischenablage kopiert. Copy result text and quit Kopiere den Ergebnistext und beende. ResTableDetailArea &Preview &Vorschau &Open &Öffnen Copy &File Name &Dateinamen kopieren Copy &URL &URL kopieren &Write to File &Schreibe in Datei Find &similar documents &Ähnliche Dokumente finden Preview P&arent document/folder Vorschau des &übergeordneten Dokuments/Ordners &Open Parent document/folder Ö&ffnen des übergeordneten Dokuments/Ordners ResultPopup &Preview &Vorschau &Open &Öffnen Copy &File Name &Dateinamen kopieren Copy &URL &URL kopieren &Write to File &Schreibe in Datei Save selection to files Auswahl in Dateien sichern Preview P&arent document/folder Vorschau des &übergeordneten Dokuments/Ordners &Open Parent document/folder Ö&ffnen des übergeordneten Dokuments/Ordners Find &similar documents &Ähnliche Dokumente finden Open &Snippets window Öffne &Schnipsel-Fenster Show subdocuments / attachments Untergeordnete Dokumente / Anhänge anzeigen Open With Öffnen mit Run Script Skripte ausführen SSearch Any term Irgendein Ausdruck All terms Alle Ausdrücke File name Dateiname Completions Vervollständigungen Select an item: Wählen Sie ein Element: Too many completions Zu viele Vervollständigungen Query language Abfragesprache Bad query string Fehlerhafte Suchanfrage Out of memory Kein Speicher mehr verfügbar Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Geben Sie einen Abfragesprachen-Ausdruck ein. Spickzettel:<br> <i>Begriff1 Begriff2</i> : 'Begriff1' und 'Begriff2' in irgendeinem Feld.<br> <i>field:Begriff1</i> : 'Begriff1' im Feld 'field'.<br> Standard-Feldnamen/Synonyme:<br> title/subject/caption, author/from, recipient/to, filename, ext<br> Pseudo-Felder: dir, mime/format, type/rclcat, date<br> Zwei Beispiele für Datumsintervalle: 2009-03-01/2009-05-20 2009-03-01/P2M<br> <i>Begriff1 Begriff2 OR Begriff3</i> : Begriff1 AND (Begriff2 OR Begriff3)<br> Klammern sind nicht erlaubt.<br> <i>"Begriff1 Begriff2"</i> : Phrase (muss genaus so vorkommen). Mögliche Modifikatoren:<br> <i>"Begriff1 Begriff2"p</i> : ungeordnete Nähen-Suche mit voreingestelltem Abstand.<br> Im Zweifelsfalle verwenden Sie den Link <b>Suchanfrage zeigen</b> und finden im Handbuch (&lt;F1>) weitere Details. Enter file name wildcard expression. Geben Sie einen Wildcard-Ausdruck für Dateinamen ein. Enter search terms here. Type ESC SPC for completions of current term. Suchbegriffe hier eingeben. Drücken Sie ESC+Leerzeichen für Vervollständigungen des aktuellen Begriffs. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Geben Sie den Sprachausdruck ein. Cheat Sheet:<br> <i>term1 term2</i> : 'term1' und 'term2' in jedem Feld.<br> <i>Feld:term1</i> : 'term1' im Feld 'Feld'.<br> Standardfeldnamen/Synonyme:<br> title/subject/caption, author/von, recipient/to, filename, ext.<br> Pseudo-Felder: dir, mime/Format, type/rclcat, Datum, Größe.<br> Zwei Datumsintervallbeispiele: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 ODER term3</i> : term1 UND (term2 ODER term3).<br> Sie können Klammern verwenden, um die Dinge klarer zu machen.<br> <i>"term1 term2"</i> : phrase (muss genau auftreten). Mögliche Modifikatoren:<br> <i>"term1 term2"p</i> : ungeordnete Näherungssuche mit Standardabstand.<br> Benutze <b>Abfrage anzeigen</b> Link bei Zweifeln am Ergebnis und siehe Handbuch (&lt; 1>) für mehr Details. Stemming languages for stored query: Stemming Sprachen für gespeicherte Abfrage: differ from current preferences (kept) von den aktuellen Einstellungen unterscheiden (beibehalten) Auto suffixes for stored query: Automatische Suffixe für gespeicherte Abfrage: External indexes for stored query: Externe Indizes für gespeicherte Abfrage: Autophrase is set but it was unset for stored query Autophrase ist gesetzt, aber für gespeicherte Abfrage nicht gesetzt Autophrase is unset but it was set for stored query Autophrase ist nicht gesetzt, aber für gespeicherte Abfrage gesetzt Enter search terms here. Hier den Suchbegriffe eingeben. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px fest schwarz; border-collapse: collapse; border-collapse: zusammenbruch; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Anfrage Sprache Cheat-Sheet. Im Zweifel: Klicken Sie <b>Abfrage anzeigen</b>.&nbsp; You should really look at the manual (F1)</p> Sie sollten sich wirklich das Handbuch ansehen (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Was</th><th>Beispiele</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Und</td><td>ein zwei&nbsp;&nbsp;&nbsp;ein UND zwei&nbsp;&nbsp;&nbsp;ein && zwei</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Komplexe Boolean. ODER hat Priorität, verwende Klammern&nbsp; where needed</td><td>(one AND two) OR three</td></tr> wenn benötigt</td><td>(ein UND zwei) ODER drei</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Nicht</td><td>-Begriff</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Phrase</td><td>"Stolz und Vorurteile"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Unsortierter Prox. (default slack=10)</td><td>"Vorurteil&nbsp;Stolz"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Keine Stammexpansion: Kapital</td><td>Stockwerk</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Feldspezifisch</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>UND innen Feld (keine Bestellung)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>ODER im Feld</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Feldnamen</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Verzeichnispfadfilter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME Typ Filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Datumsintervalle</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Kann den Index nicht öffnen Could not restore external indexes for stored query:<br> Konnte die externen Indizes für die gespeicherte Abfrage nicht wiederherstellen:<br> ??? ??? Using current preferences. Benutze die aktuellen Einstellungen. Simple search Einfache Suche History Verlauf <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Abfrage-Sprache Spickzettel. Im Zweifelsfall: Klicken Sie auf <b>Abfrage-Details anzeigen</b>.&nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> Großschreibung zur Unterdrückung der Stammausdehnung. differ from current preferences (kept) von den aktuellen Einstellungen unterscheiden (beibehalten) SSearchBase SSearchBase SSearchBase Clear Löschen Ctrl+S Strg+S Erase search entry Sucheintrag löschen Search Suchen Start query Suche starten Enter search terms here. Type ESC SPC for completions of current term. Suchbegriffe hier eingeben. Drücken Sie ESC+Leerzeichen für Vervollständigungen des aktuellen Begriffs. Choose search type. Wählen Sie die Art der Suche Show query history Zeige Suchanfragen-Chronik Enter search terms here. Hier den Suchbegriffe eingeben. Main menu Hauptmenü SearchClauseW SearchClauseW Suche ClauseW Any of these Irgendeins dieser All of these Alle diese None of these Keins dieser This phrase diese Wörter Terms in proximity ähnliche Ausdrücke File name matching passende Dateinamen Select the type of query that will be performed with the words Wählen Sie die Art der Suche aus, die mit den Wörtern gestartet wird. Number of additional words that may be interspersed with the chosen ones Anzahl der Wörter, die sich zwischen den angegebenen befinden dürfen In field Im Feld No field Kein Feld Any Irgendeines All Alle None Keines Phrase Ausdrücke Proximity Nähe (proximity) File name Dateiname Snippets Snippets Schnipsel X X Find: Finden: Next Weiter Prev Zurück SnippetsW Search Suchen <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Entschuldigung,es wurde keine genaue Übereinstimmung innerhalb der Grenzen gefunden. Wahrscheinlich ist das Dokument sehr groß und der Schnipsel-Generator hat sich in einem Labyrinth verirrt...</p> Sort By Relevance Sortieren nach Relevanz Sort By Page Sortieren nach Seite Snippets Window Schnipselfenster Find Finden Find (alt) Finden (alternativ) Find Next Finde Nächste Find Previous Finde Vorherige Hide Verstecken Find next Nächstes suchen Find previous Vorherige suchen Close window Fenster schließen Increase font size Schriftgröße erhöhen Decrease font size Schriftgröße verkleinern SortForm Date Datum Mime type Mime Type SortFormBase Sort Criteria Sortierkriterium Sort the Zeige die most relevant results by: relevantesten Ergebnisse sortiert nach: Descending Absteigend Close Schließen Apply Übernehmen SpecIdxW Special Indexing Spezielle Indexierung Do not retry previously failed files. Vorher fehlgeschlagene Dateien nicht wiederholen. Else only modified or failed files will be processed. Andernfalls werden nur modifizierte oder fehlgeschlagene Dateien verarbeitet. Erase selected files data before indexing. Löschen der Daten der ausgewählte Dateien vor der Indexierung. Directory to recursively index Verzeichnis zu rekursiv indizieren Browse Durchblättern Start directory (else use regular topdirs): Startverzeichnis (sonst normale Topdirs): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Leer lassen, um alle Dateien auszuwählen. Sie können mehrere Leerzeichen getrennte Shell-Typ Muster verwenden.<br>Muster mit eingebetteten Leerzeichen sollten mit doppelten Zitaten zitiert werden.<br> Kann nur verwendet werden, wenn das Startziel eingestellt ist. Selection patterns: Auswahlmuster: Top indexed entity Top indizierte Entität Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Verzeichnis zur rekursiven Indexierung. Dies muss sich im regulären indizierten Bereich<br> befinden, wie in der Konfigurationsdatei (topdirs) definiert. Retry previously failed files. Zuvor gescheitert Dateien nochmal versuchen. Start directory. Must be part of the indexed tree. We use topdirs if empty. Startverzeichnis. Muss Teil des indizierten Baumes sein. Wir verwenden Topdirs, wenn leer. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Startverzeichnis. Muss Teil des indizierten Baumes sein. Benutzen Sie den vollen Indexbereich, wenn es leer ist. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnoseausgabedatei. Wird abgeschnitten und erhält Indexdiagnose (Gründe für nicht indizierte Dateien). Diagnostics file Diagnosedatei SpellBase Term Explorer Ausdruck-Explorer &Expand &Vervollständigen Alt+E Alt+V &Close &Schließen Alt+C Alt+S Term Ausdruck No db info. Keine Datenbank-Information Doc. / Tot. Dok. / Ges. Match Beachte Case Groß-/Kleinschreibung Accents Betonungszeichen SpellW Wildcards Platzhalter Regexp Regulärer Ausdruck Spelling/Phonetic Phonetisch Aspell init failed. Aspell not installed? Fehler bei der Initialisierung von Aspell. Ist Aspell nicht installiert? Aspell expansion error. Aspell Vervollständigungsfehler Stem expansion Wortstamm-Erweiterung error retrieving stemming languages Fehler beim Holen der Stemming-Sprachen No expansion found Keine Erweiterung gefunden Term Begriff Doc. / Tot. Dok. / Ges. Index: %1 documents, average length %2 terms Index: %1 Dokumente mit durchschnittlicher Länge von %2 Begriffen Index: %1 documents, average length %2 terms.%3 results Index: %1 Dokumente mit durchschnittlicher Länge von %2 Begriffen. %3 Ergebnisse %1 results %1 Ergebnisse List was truncated alphabetically, some frequent Liste wurde alphabetisch abgeschnitten, einige häufige Begriffe terms may be missing. Try using a longer root. können fehlen. Versuchen Sie es mit einer längeren Wurzel. Show index statistics Indexstatistiken anzeigen Number of documents Dokumentenzahl Average terms per document Durchschnittliche Zahl von Ausdrücken pro Dokument Smallest document length Minimale Zahl von Ausdrücken Longest document length Maximale Zahl von Ausdrücken Database directory size Größe des Datenbankordners MIME types: MIME-Typen: Item Eintrag Value Wert Smallest document length (terms) Kleinste Dokumentlänge (Begriffe) Longest document length (terms) Längste Dokumentlänge (Begriffe) Results from last indexing: Ergebnisse der letzten Indexierung: Documents created/updated Dokumente wurden erstellt/aktualisiert Files tested Dateien getestet Unindexed files Unindizierte Dateien List files which could not be indexed (slow) Liste Dateien auf, die nicht indiziert werden konnten (langsam) Spell expansion error. Zaubererweiterungsfehler. Spell expansion error. Rechtschreibfehler. Documents created/updated Dokumente wurden erstellt/aktualisiert Files tested Dateien getestet Unindexed files Unindizierte Dateien UIPrefsDialog The selected directory does not appear to be a Xapian index Das ausgewählte Verzeichnis scheint kein Xapian-Index zu sein. This is the main/local index! Das ist der Hauptindex! The selected directory is already in the index list Das ausgewählte Verzeichnis ist bereits in der Indexliste. Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Wählen Sie das Xapian-Indexverzeichnis (z.B. /home/benutzer/.recoll/xapiandb) error retrieving stemming languages Fehler beim Holen der Stemming-Sprachen Choose Auswählen Result list paragraph format (erase all to reset to default) Format für Ergebnis-Absatz (alles löschen, um auf Standard zurück zu setzen) Result list header (default is empty) Header der Ergebnisliste (Standard ist leer) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Wählen Sie den Recoll-Konfigurationsordner oder das Xapian-Indexverzeichnis aus (z.B. /home/ich/.recoll oder /home/ich/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Der ausgewählten Ordner handelt scheint Recoll-Konfigurationsordner zu sein, aber die Konfiguration konnte nicht ausgelesen werden At most one index should be selected Bitte wählen Sie maximal einen Index aus Cant add index with different case/diacritics stripping option Indices mit unterschiedlichen Einstellungen zum Umgang mit Groß/-Kleinschreibung und diakritischen Zeichen können nicht hinzugefügt werden Default QtWebkit font Standard QtWebkit Schriftart Any term Irgendein Ausdruck All terms Alle Ausdrücke File name Dateiname Query language Abfragesprache Value from previous program exit Wert vom vorherigem Programmausgang Context Kontext Description Beschreibung Shortcut Verknüpfung Default Standard Choose QSS File Wählen Sie die QSS-Datei aus. Can't add index with different case/diacritics stripping option. Kann Index nicht hinzufügen, da unterschiedliche Optionen für Groß-/Kleinschreibung und Diakritika-Entfernung verwendet werden. Light Licht Dark Dunkel System System System UIPrefsDialogBase User interface Benutzeroberfläche Number of entries in a result page Anzahl der Ergebnisse pro Seite Result list font Schriftart für Ergebnisliste Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Öffnet einen Dialog zur Auswahl der Schriftart für die Ergebnisliste Reset Zurücksetzen Resets the result list font to the system default Setzt die Schriftart für die Ergebnisliste zurück auf den Standardwert Auto-start simple search on whitespace entry. Automatisch eine einfache Suche starten, wenn ein Worttrenner im Sucheingabefeld eingegeben wird. Start with advanced search dialog open. Nach dem Start automatisch den Dialog für die erweiterte Suche öffnen. Start with sort dialog open. Nach dem Start automatisch den Sortierdialog öffnen. Search parameters Suchparameter Stemming language Stemming Sprache Dynamically build abstracts Zusammenfassungen dynamisch erzeugen Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Festlegung ob Zusammenfassungen für Ergebnisse im Kontext der Suchparameter erzeugt werden (kann bei großen Dokumenten langsam sein). Replace abstracts from documents Ersetzen der Zusammenfassungen in den Dokumenten Do we synthetize an abstract even if the document seemed to have one? Festlegung ob eine Zusammenfassung auch dann erzeugt wird, wenn das Dokument schon eine Zusammenfassung enthält Synthetic abstract size (characters) Länge der erzeugten Zusammenfassung (Zeichen) Synthetic abstract context words Anzahl der Kontextworte in der Zusammenfassung External Indexes externe Indizes Add index Index hinzufügen Select the xapiandb directory for the index you want to add, then click Add Index Wählen Sie das xapiandb-Verzeichnis des zuzufügenden Indizes und klicken Sie auf Index hinzufügen Browse Auswahl &OK &Ok Apply changes Änderungen übernehmen &Cancel &Abbrechen Discard changes Änderungen verwerfen Result paragraph<br>format string Formatstring für Ergebnisse Automatically add phrase to simple searches Automatisches Zufügen von Sätzen zu einfachen Suchen A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Eine Suche nach [Jürgen Klinsmann] wird geändert nach [Jürgen OR Klinsmann OR (Jürgen PHRASE 2 Klinsmann)]. Dadurch sollten Ergebnisse, die exakte Übereinstimmungen der Suchworte enthalten, stärker gewichtet werden. User preferences Benutzereinstellungen Use desktop preferences to choose document editor. Die Einstellung des Dokumenteneditors erfolgt in den Desktopvoreinstellungen. External indexes Externe Indizes Toggle selected Auswahl umkehren Activate All Alle Auswählen Deactivate All Alle Abwählen Remove selected Ausgewählte entfernen Remove from list. This has no effect on the disk index. Aus der Liste entfernen. Dies hat keinen Einfluss auf den gespeicherten Index. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definiert das Format für jeden Absatz der Ergebnisliste. Verwenden Sie qt HTML-Format und druckähnliche Ersetzungen:<br>%A Abstrakt<br> %D Datum<br> %I Icon Bildname<br> %K Keywords (falls vorhanden)<br> %L Vorschau und Bearbeiten von Links<br> %M Mime Typ<br> %N Ergebnisnummer<br> %R Relevanz Prozentsatz<br> %S Größen Informationen<br> %T Titel<br> %U Url<br> Remember sort activation state. Speichern, ob Sortieren aktiviert ist Maximum text size highlighted for preview (megabytes) Maximale Textgröße für Vorschau-Hervorhebung Texts over this size will not be highlighted in preview (too slow). Texte über dieser Größe werden in der Vorschau nicht mit Hervorhebungen versehen (zu langsam). Highlight color for query terms Farbe zur Hervorhebung von Suchbegriffen Prefer Html to plain text for preview. Bei Vorschau HTML gegenüber reinem Text bevorzugen If checked, results with the same content under different names will only be shown once. Bei Auswahl werden Ergebnisse mit dem gleichen Inhalt unter verschiedenen Namen nur einmal gezeigt. Hide duplicate results. Verstecke doppelte Ergebnisse Choose editor applications Standardanwendungen auswählen Display category filter as toolbar instead of button panel (needs restart). Kategorie-Filter in Werkzeugleiste statt als Radio-Buttons (Neustart erforderlich) The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Die Worte in dieser Liste werden automatisch zu ext:xxx Ausdrücken im Abfragesprachen-Eintrag umgewandelt. Query language magic file name suffixes. Magische Dateinamen-Erweiterungen für Abfragesprache Enable Aktivieren ViewAction Changing actions with different current values Aktionen mit anderen Werten ändern Mime type Mime Type Command Befehl MIME type MIME-Typ Desktop Default Desktopvoreinstellung Changing entries with different current values Einträge mit anderen Werten ändern ViewActionBase File type Dateityp Action Aktion Select one or several file types, then click Change Action to modify the program used to open them Wählen Sie einen oder mehrere Dateitypen und klicken Sie auf "Ändere Aktion", um das Programm zum Öffnen anzupassen. Change Action Ändere Aktion Close Schließen Native Viewers Anzeigeprogramme Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Wählen Sie einen oder mehrere Mime-Typen und klicken Sie auf "Ändere Aktion".<br>Sie können diesen Dialog auch schließen und stattdessen "Die Einstellung des<br> Dokumenteneditors erfolgt in den Desktopeinstellungen" auswählen.<br> Die Liste wird dann igoriert und es werden die Desktopeinstellungen verwendet. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Wählen Sie einen oder mehrere MIME-Typen aus und nutzen Sie dann die Bedienelemente unten, um das Programm zum Öffnen anzupassen. Use Desktop preferences by default Standardmäßig Desktopvoreinstellungen nutzen Select one or several file types, then use the controls in the frame below to change how they are processed Wählen Sie einen oder mehrere Dateitypen aus. Nutzen Sie dann die Bedienelemente unten, um das Programm zum Öffnen anzupassen Exception to Desktop preferences Von Desktopvoreinstellungen abweichende Ausnahme Action (empty -> recoll default) Aktion (leer → Recoll-Voreinstellung) Apply to current selection Auf aktuelle Auswahl anwenden Recoll action: Recoll-Aktion: current value aktueller Wert Select same Das Selbe wählen <b>New Values:</b> <b>Neuer Wert</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Der Wert ist eine Befehlszeile, die ausgeführt werden soll. Ersetzungen: %s: Suchbegriff; %p: Seitennummer; <br>%f: Dateiname des Dokuments. Drücken Sie F1 für weitere Hilfe. Webcache Webcache editor Webcache Editor Search regexp Suche Regexp TextLabel Textbeschriftung WebcacheEdit Copy URL URL kopieren Unknown indexer state. Can't edit webcache file. Unbekannter Indexer Zustand. Kann die Webcache-Datei nicht bearbeiten. Indexer is running. Can't edit webcache file. Indexer läuft. Kann die Webcache-Datei nicht bearbeiten. Delete selection Auswahl löschen Webcache was modified, you will need to run the indexer after closing this window. Der Webcache wurde geändert, Sie müssen den Indexer nach dem Schließen dieses Fensters ausführen. Save to File In Datei speichern File creation failed: Dateierstellung fehlgeschlagen: Maximum size %1 (Index config.). Current size %2. Write position %3. Maximale Größe %1 (Index-Konfig.). Aktuelle Größe %2. Schreibposition %3. WebcacheModel MIME MIME Url Url Date Datum Size Größe URL URL WinSchedToolW Error Fehler Configuration not initialized Konfiguration nicht initialisiert <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Batch-Planung für Recoll-Indexierung</h3><p>Wir verwenden dafür den Standard-Windows Task-Planer. Das Programm wird gestartet, wenn Sie auf den Button unten klicken.</p><p>Sie können entweder die vollständige Schnittstelle verwenden (<i>Aufgabe erstellen</i> im Menü rechts), oder der vereinfachte <i>Basic Task</i> Assistent erstellen. In beiden Fällen Kopieren/Einfügen des Batch-Datei-Pfades, der unten als <i>Aktion</i> aufgelistet ist.</p> Command already started Befehl bereits gestartet Recoll Batch indexing Recoll Batch Indizierung Start Windows Task Scheduler tool Starte Windows Task Scheduler Could not create batch file Konnte die Stapeldatei nicht erstellen. confgui::ConfBeaglePanelW Steal Beagle indexing queue Indizierungs-Warteschlange von Beagle übernehmen Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle darf NICHT laufen. Ermöglicht die Abarbeitung der Beagle-Warteschlange, um die Firefox Web-Chronik zu indizieren.<br>(Sie sollten auch das Beagle-Plugin für Firefox installieren.) Web cache directory name Web-Cache-Verzeichnisname The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Der Name für ein Verzeichnis, in dem der Cache für besuchte Webseiten gespeichert werden soll.<br>Ein unabsoluter Pfad wird relativ zum Konfigurationsverzeichnis verwendet. Max. size for the web cache (MB) Max. Größe für den Webcache (MB) Entries will be recycled once the size is reached Einträge werden wiederverwendet sobald die Größe erreicht ist. Web page store directory name Verzeichnis zur Ablage von Webseiten The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Der Name eines Verzeichnisses, in dem Kopien der besuchten Webseiten gespeichert werden sollen.<br>Ein nicht-absoluter Pfad ist dabei relativ zum Konfigurationsverzeichnis. Max. size for the web store (MB) Maximale Größe für Ablage von Webseiten (MB) Process the WEB history queue Web-Chronik Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Ermöglicht die Indexierung der von Firefox besuchten Seiten.<br>(Sie müssen auch das Firefox-Recoll-Plugin installieren) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Die Einträge werden nach dem Erreichen der Größe wiederverwertet.<br>Nur die Größe zu erhöhen macht wirklich Sinn, weil die Verringerung des Wertes nicht eine bestehende Datei verkürzt (nur verschwendeten Platz am Ende). confgui::ConfIndexW Can't write configuration file Fehler beim Schreiben der Konfigurationsdatei Recoll - Index Settings: Recoll - Index-Einstellungen: confgui::ConfParamFNW Browse Durchblättern Choose Auswählen confgui::ConfParamSLW + + - - Add entry Eintrag hinzufügen Delete selected entries Ausgewählte Einträge löschen ~ ~ Edit selected entries Ausgewählte Einträge bearbeiten confgui::ConfSearchPanelW Automatic diacritics sensitivity Automatisch diakritische Zeichen beachten <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p> Automatisch die Beachtung von diakritischen Zeichen einschalten, wenn der Suchbegriff Zeichen mit Akzenten enthält (nicht in unac_except_trans). Ansonsten müssen Sie dafür die Abfrageprache und den <i>D</i> Modifikator verwenden. Automatic character case sensitivity Automatisch Groß-/Kleinschreibung beachten <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p> Automatisch die Beachtung von Groß-/Kleinschreibung einschalten, wenn der Eintrag Großbuchstaben enthält (außer an erster Stelle). Ansonsten müssen Sie dafür die Abfragesprache und den <i>C</i> Modifikator verwenden. Maximum term expansion count Maximale Anzahl von Ausdruck-Erweiterungen <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximale Anzahl von Erweiterungen für einen einzelnen Ausdruck (z.B. bei der Verwendung von Wildcards). Der Standardwert 10 000 ist vernünftig und verhindert, dass Suchanfragen scheinbar einfrieren, während die Liste der Begriffe durchlaufen wird. Maximum Xapian clauses count Maximale Anzahl von Xapian-Ausdrücken <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maximale Anzahl von elementaren Ausdrücken, die wir zu einer einzelnen Xapian Abfrage hinzufügen. In manchen Fällen können die Ergebnisse von Ausdruck-Erweiterungen sich ausmultiplizieren, und wir wollen übermäßigen Speicherverbrauch vermeiden. Der Standardwert 100 000 sollte in den meisten Fällen hoch genug sein und zugleich zu typischen derzeitigen Hardware-Ausstattungen passen. confgui::ConfSubPanelW Global Globale Max. compressed file size (KB) Max. Größe kompr. Dateien (kB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Dies ist eine Obergrenze; komprimierte Dateien jenseits dieser Größe werden nicht verarbeitet. Auf -1 setzen, um keine Obergrenze zu haben, auf 0, um nie zu dekomprimieren. Max. text file size (MB) Max. Größe Textdateien (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Dies ist eine Obergrenze; Textdateien jenseits dieser Größe werden nicht verarbeitet Auf -1 setzen, um keine Obergrenze zu haben. Dies dient dazu, riesige Log-Dateien vom Index auszuschließen. Text file page size (KB) Seitengröße Textdateien (kB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Wenn dieser Wert gesetzt ist (ungleich -1), werden Textdateien zur Indizierung in Stücke dieser Größe aufgeteilt. Das hilft bei der Suche in sehr großen Textdateien (z.B. Log-Dateien). Max. filter exec. time (S) Max. Zeit für Filter (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Externe Filter, die länger als diese Zeit laufen, werden abgebrochen. Das ist für den seltenen Fall (Postscript), in dem ein Dokument eine unendliche Schleife auslöst. Auf -1 setzen, um keine Obergrenze zu haben. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Externe Filter, die länger als diese Zeit laufen, werden abgebrochen. Das ist für den seltenen Fall (Postscript), in dem ein Dokument eine unendliche Schleife auslöst. Auf -1 setzen, um keine Obergrenze zu haben. Only mime types Nur Mime-Typen An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Eine exklusive Liste der indizierten Mimetypen.<br>Sonst wird nichts indiziert. Normalerweise leer und inaktiv Exclude mime types Auszuschließende Mime-Typen Mime types not to be indexed Mime-Typen, die nicht indiziert werden Max. filter exec. time (s) Max. Ausführungszeit der Filter (s) confgui::ConfTabsW Apply Übernehmen confgui::ConfTopPanelW Top directories Start-Verzeichnisse The list of directories where recursive indexing starts. Default: your home. Die Liste der Verzeichnisse, in denen die rekursive Indizierung startet. Standard: Home-Verzeichnis. Skipped paths Auszulassende Pfade These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Die Namen der Verzeichnisse, die nicht indiziert werden.<br>Kann Wildcards enthalten. Muss den Pfaden entsprechen, die der Indizierer sieht (d.h.. wenn '/home/me' in den Start-Verzeichnissen steht und '/home' eigentlich ein Link zu '/usr/home' ist, dann wäre ein korrekter Eintrag '/home/me/tmp*' und nicht '/usr/home/me/tmp*') Stemming languages Stemming-Sprachen The languages for which stemming expansion<br>dictionaries will be built. Die Sprachen, für die Worstammerweiterungsverzeichnisse erstellt werden. Log file name Log-Datei The file where the messages will be written.<br>Use 'stderr' for terminal output Die Datei, in die Ausgaben geschrieben werden.<br>Für Ausgaben auf dem Terminal 'stderr' benutzen. Log verbosity level Ausführlichkeit des Logs This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Dieser Wert steuert die Menge der Meldungen<br>(nur Fehler oder viele Debugging Ausgaben). Index flush megabytes interval Interval (MB) für Speicherleerung This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Dieser Wert steuert, wieviel Daten indiziert werden bevor die Indexinformationen auf Festplatte geschrieben werden.<br>Hierdurch kann der Speicherverbrauch des Indizierers gesteuert werden. Standardwert: 10MB Max disk occupation (%) Max. Festplattenbelegung (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Dies ist der Prozentsatz der Festplattenbelegung, ab dem die Indizierung gestoppt wird (um das Füllen der Festplatte zu vermeiden).<br>0 bedeutet keine Begrenzung (das ist der Standardwert). No aspell usage Aspell nicht benutzen Aspell language Sprache für Aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Die Sprache des Aspell-Wörterbuchs (z.B. 'en' oder 'de' ...)<br>Wenn dieser Wert nicht gesetzt ist, wird die NLS-Umgebung verwendet, um die Sprache festzustellen, was im Allgemeinen funktioniert. Um eine Vorstellung zu bekommen, was auf Ihrem System installiert ist, geben Sie 'aspell config' ein und schauen Sie nach .dat Dateien im Verzeichnis 'data-dir'. Database directory name Verzeichnis für Index-Datenbank The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Der Name eines Verzeichnisses, in dem der Index gespeichert werden soll.<br>Ein nicht-absoluter Pfad ist dabei relativ zum Konfigurationsverzeichnis. Der Standard ist 'xapiandb'. Use system's 'file' command 'file' Kommando benutzen Use the system's 'file' command if internal<br>mime type identification fails. Benutze das 'file' Kommando, wenn die interne Erkennung des Mime-Typs fehlschlägt. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Deaktiviert die Verwendung von Aspell für die Erzeugung von Schreibweisen-Näherungen im Ausdruck-Explorer-Werkzeug. <br>Nützlich, wenn Aspell nicht vorhanden ist oder nicht funktioniert. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Die Sprache des Aspell-Wörterbuchs (z.B. 'en' oder 'de' ...)<br>Wenn dieser Wert nicht gesetzt ist, wird die NLS-Umgebung verwendet, um die Sprache festzustellen, was im Allgemeinen funktioniert. Um eine Vorstellung zu bekommen, was auf Ihrem System installiert ist, geben Sie 'aspell config' ein und schauen Sie nach .dat Dateien im Verzeichnis 'data-dir'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Der Name eines Verzeichnisses, in dem der Index gespeichert werden soll.<br>Ein nicht-absoluter Pfad ist dabei relativ zum Konfigurationsverzeichnis. Der Standard ist 'xapiandb'. Unac exceptions Unac Ausnahmen <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Dies sind Ausnahmen für den unac Mechanismus, der standardmäßig alle diakritischen Zeichen entfernt und sie durch kanonische Entsprechungen ersetzt. Sie können (abhängig von Ihrer Sprache) dieses Entfernen von Akzenten für einige Zeichen übersteuern und zusätzliche Ersetzungen angeben, z.B. für Ligaturen. Bei jedem durch Leerzeichen getrennten Eintrag ist das erste Zeichen das Ausgangszeichen und der Rest die Ersetzung. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Dies sind Pfadnamen von Verzeichnissen, welche die Indizierung nicht betritt.<br>Pfad-Elemente können Wildcards enthalten. Die Einträge müssen den Pfaden des Indexers entsprechen (z.B.: wenn das Startverzeichnis '/home/me' beinhaltet und '/home' tatsächlich ein Link zu '/usr/home' ist, würde ein korrekt ausgelassener Pfadeintrag '/home/me/tmp*' und nicht '/usr/home/me/tmp*' sein) Max disk occupation (%, 0 means no limit) Maximale Plattenbeschäftigung (%, 0 bedeutet kein Limit) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Dies ist der Prozentsatz der Festplattennutzung - Gesamtfestplattennutzung, nicht Indexgröße - bei dem die Indexierung ausfällt und stoppt.<br> Der Standardwert von 0 entfernt jede Grenze. uiPrefsDialogBase User preferences Benutzereinstellungen User interface Benutzeroberfläche Number of entries in a result page Anzahl der Ergebnisse pro Seite If checked, results with the same content under different names will only be shown once. Bei Auswahl werden Ergebnisse mit dem gleichen Inhalt unter verschiedenen Namen nur einmal gezeigt. Hide duplicate results. Verstecke doppelte Ergebnisse Highlight color for query terms Farbe zur Hervorhebung von Suchbegriffen Result list font Schriftart für Ergebnisliste Opens a dialog to select the result list font Öffnet einen Dialog zur Auswahl der Schriftart für die Ergebnisliste Helvetica-10 Helvetica-10 Resets the result list font to the system default Setzt die Schriftart für die Ergebnisliste auf den Standardwert zurück Reset Zurücksetzen Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definiert das Format für jeden Absatz der Ergebnisliste. Verwenden Sie qt HTML-Format und druckähnliche Ersetzungen:<br>%A Abstrakt<br> %D Datum<br> %I Icon Bildname<br> %K Keywords (falls vorhanden)<br> %L Vorschau und Bearbeiten von Links<br> %M Mime Typ<br> %N Ergebnisnummer<br> %R Relevanz Prozentsatz<br> %S Größen Informationen<br> %T Titel<br> %U Url<br> Result paragraph<br>format string Formatstring für Ergebnisse Texts over this size will not be highlighted in preview (too slow). Texte über dieser Größe werden in der Vorschau nicht mit Hervorhebungen versehen (zu langsam). Maximum text size highlighted for preview (megabytes) Maximale Textgröße für Vorschau-Hervorhebung Use desktop preferences to choose document editor. Einstellung des Dokumenteneditors erfolgt in den Desktopeinstellungen Choose editor applications Standardanwendungen auswählen Display category filter as toolbar instead of button panel (needs restart). Kategorie-Filter in Werkzeugleiste statt als Radio-Buttons (Neustart erforderlich) Auto-start simple search on whitespace entry. Automatisch eine einfache Suche starten, wenn ein Worttrenner eingegeben wird Start with advanced search dialog open. Nach dem Start automatisch den Dialog für die erweiterte Suche öffnen Start with sort dialog open. Nach dem Start automatisch den Sortierdialog öffnen. Remember sort activation state. Speichern, ob Sortierung aktiviert ist Prefer Html to plain text for preview. Bei Vorschau HTML gegenüber reinem Text bevorzugen Search parameters Suchparameter Stemming language Stemming-Sprache A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Eine Suche nach [Rolling Stones] wird geändert zu [Rolling OR Stones OR (Rolling PHRASE 2 Stones)]. Dadurch sollten Ergebnisse, in denen die Suchworte genau wie eingegeben auftreten, stärker gewichtet werden. Automatically add phrase to simple searches Automatisches Hinzufügen von Phrasen zu einfachen Suchen Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Versuchen wir, Zusammenfassungen für Ergebnisse aus den Fundstellen zu erzeugen? Dies kann bei großen Dokumenten langsam sein. Dynamically build abstracts Zusammenfassungen dynamisch erzeugen Do we synthetize an abstract even if the document seemed to have one? Erzeugen wir eine Zusammenfassung auch dann, wenn das Dokument schon eine Zusammenfassung enthält? Replace abstracts from documents Ersetzen der Zusammenfassungen aus Dokumenten Synthetic abstract size (characters) Länge der erzeugten Zusammenfassung (in Zeichen) Synthetic abstract context words Anzahl der Kontextworte in der Zusammenfassung The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Die Worte in dieser Liste werden automatisch zu ext:xxx Ausdrücken im Abfragesprachen-Eintrag umgewandelt. Query language magic file name suffixes. Magische Dateinamen-Erweiterungen für Abfragesprache Enable Aktivieren External Indexes Externe Indizes Toggle selected Auswahl umkehren Activate All Alle auswählen Deactivate All Alle abwählen Remove from list. This has no effect on the disk index. Aus der Liste entfernen. Dies hat keinen Einfluss auf den gespeicherten Index. Remove selected Ausgewählte entfernen Click to add another index directory to the list Anklicken, um ein weiteres Index-Verzeichnis zur Liste hinzuzufügen Add index Index hinzufügen Apply changes Änderungen übernehmen &OK &Ok Discard changes Änderungen verwerfen &Cancel &Abbrechen Abstract snippet separator Trenner für Zusammenfassungs-Teile Use <PRE> tags instead of <BR>to display plain text as html. Verwenden Sie <PRE> Tags anstelle von <BR>um Klartext als HTML anzuzeigen. Lines in PRE text are not folded. Using BR loses indentation. Zeilen im PRE-Text werden nicht gefaltet. BR verliert Einrückung. Style sheet Style Sheet Opens a dialog to select the style sheet file Öffnet einen Dialog zur Auswahl der Style Sheet Datei Choose Auswählen Resets the style sheet to default Setzt das Style Sheet auf den Standardwert zurück Lines in PRE text are not folded. Using BR loses some indentation. Zeilen in PRE-Text werden nicht umgebrochen. Bei Verwendung von BR gehen manche Einrückungen verloren. Use <PRE> tags instead of <BR>to display plain text as html in preview. <PRE> Tags statt <BR> verwenden, um Texte in der Vorschau als HTML anzuzeigen Result List Ergebnisliste Edit result paragraph format string Format-String für Ergebnis-Absatz editieren Edit result page html header insert HTML-Header der Ergebnisseite ergänzen Date format (strftime(3)) Datumsformat (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Häufigkeitsschwellwert in Prozent, über dem Begriffe nicht beim automatischen Hinzufügen von Phrasen verwendet werden. Häufige Begriffe beeinträchtigen die Performance bei Phrasen stark. Weggelassene Begriffe erhöhen den Phrasen-Slack und vermindern den Nutzender automatischen Phrasen. Der Standardwert ist 2. Autophrase term frequency threshold percentage Häufigkeitsschwellwert für automatische Phrasen Plain text to HTML line style Zeilen-Stil für Umwandlung von Text in HTML Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Zeilen in PRE-Text werden nicht umgebrochen. Bei Verwendung von BR gehen manche Einrückungen verloren. Möglicherweise ist der Stil 'PRE + Umbruch' das, was Sie wollen. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + Umbruch Exceptions Ausnahmen Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Mime-Typen, die nicht an xdg-open übergeben werden sollen, selbst wenn Desktopvoreinstellungen gewählt wurden.<br> Nützlich, um Seitenzahl und Suchstring zu übergebn, z.B. an evince. Disable Qt autocompletion in search entry. Qt-Autovervollständigung in Suchleiste deaktivieren. Search as you type. Suche beim Eintippen starten. Paths translations Pfadumwandlung Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Klicken Sie hier um einen weiteren Indexordner zur Liste hinzuzufügen. Sie können entweder einen Recoll-Konfigurationsordner oder einen Xapian-Index auswählen. Snippets window CSS file Schnipsel-Fenster CSS Datei Opens a dialog to select the Snippets window CSS style sheet file Öffnet einen Dialog zur Auswahl der Schnipsel-Fenster CSS Style Sheet Datei Resets the Snippets window style Setzt das Schnipsel-Fenster Style Sheet auf den Standardwert zurück Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Entscheide ob die Dokumentfilter als Optionsfeld, Auswahllisten-Kombinationsfeld oder Menü angezeigt werden. Document filter choice style: Stil der Dokumentfilterauswahl: Buttons Panel Tasten Panel Toolbar Combobox Auswahllisten-Kombinationsfeld Menu Menü Show system tray icon. Zeige das Icon im Benachrichtigungsbereich. Close to tray instead of exiting. Schließe es in den Benachrichtigungsbereich, anstatt es zu verlassen. Start with simple search mode Starten mit einfachem Suchmodus Show warning when opening temporary file. Eine Warnung anzeigen, wenn eine temporäre Datei geöffnet wird. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Benutzerstil, der auf das Snippet-Fenster angewendet werden soll.<br> Hinweis: Die Ergebnis-Seiten-Kopfzeile ist auch im Snippet-Fensterheader enthalten. Synonyms file Symonyme-Datei (bedeutungsgleiche Wörter-Datei) Highlight CSS style for query terms Hervorheben von Abfragebegriffe im CSS-Stil Recoll - User Preferences Recoll - Benutzereinstellungen Set path translations for the selected index or for the main one if no selection exists. Lege die Pfadübersetzungen für den ausgewählten Index oder für den Hauptindex fest, wenn keine Auswahl vorhanden ist. Activate links in preview. Links in der Vorschau aktivieren. Make links inside the preview window clickable, and start an external browser when they are clicked. Mache Links innerhalb des Vorschaufensters anklickbar und starte einen externen Browser, wenn sie angeklickt werden. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Abfragebedingungen in den Ergebnissen hervorheben. <br>Versuchen vielleicht etwas wie "color:red;background:yellow" für etwas lebendigeres als das Standard-Blau... Start search on completer popup activation. Suche bei vollständiger Popup-Aktivierung starten. Maximum number of snippets displayed in the snippets window Maximale Anzahl von Schnipsel die im Schnipselfenster angezeigt werden Sort snippets by page number (default: by weight). Sortiere die Schnipsel nach der Seitennummer (Standard: nach Wichtigkeit). Suppress all beeps. Unterdrücke alles Piepen. Application Qt style sheet Anwendungs-Qt-Stylesheet Limit the size of the search history. Use 0 to disable, -1 for unlimited. Die Größe der Suchhistorie beschränken. Verwenden 0 zum deaktivieren, -1 für unbegrenzt. Maximum size of search history (0: disable, -1: unlimited): Maximale Größe der Suchhistorie (0: deaktivieren, -1: unbegrenzt): Generate desktop notifications. Erzeuge Desktop-Benachrichtigungen. Misc Sonstiges Work around QTBUG-78923 by inserting space before anchor text Umgehen Sie QTBUG-78923, indem Sie vor dem Ankertext ein Leerzeichen einfügen Display a Snippets link even if the document has no pages (needs restart). Zeige einen Snippets-Link an, auch wenn das Dokument keine Seiten hat (Restart erforderlich). Maximum text size highlighted for preview (kilobytes) Maximale Textgröße der hervorgehoben Vorschau (Kilobytes) Start with simple search mode: Starten mit einfachem Suchmodus: Hide toolbars. Verstecke Werkzeugleisten. Hide status bar. Verstecke Statusleiste. Hide Clear and Search buttons. Verstecke Löschen- und Suchtaste. Hide menu bar (show button instead). Verstecke Menüleiste (zeige stattdessen Buttons). Hide simple search type (show in menu only). Verstecke einfache Suchart (nur im Menü anzeigen). Shortcuts Verknüpfungen Hide result table header. Ergebnis-Tabellen-Header ausblenden. Show result table row headers. Ergebniszeilen-Kopfzeilen anzeigen. Reset shortcuts defaults Shortcuts zurücksetzen Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Deaktivieren Sie die Strg+[0-9]/[a-z] Verknüpfungen um zu Tabellenzeilen zu springen. Use F1 to access the manual F1 verwenden, um auf das Handbuch zuzugreifen Hide some user interface elements. Verstecke einige Benutzeroberflächenelemente. Hide: Verstecken: Toolbars Symbolleisten Status bar Statusleiste Show button instead. Zeige stattdessen den Button. Menu bar Menüleiste Show choice in menu only. Nur Auswahl im Menü anzeigen. Simple search type Einfache Suchart Clear/Search buttons Löschen/Suchen Buttons Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Deaktivieren Sie die Tastenkombinationen Ctrl+[0-9]/Shift+[a-z] zum Springen zu Tabellenzeilen. None (default) Keine (Standard) Uses the default dark mode style sheet Verwendet das Standard-Dunkelmodus-Stylesheet. Dark mode Dunkler Modus Choose QSS File Wählen Sie die QSS-Datei aus. To display document text instead of metadata in result table detail area, use: Um den Dokumententext anstelle von Metadaten im Detailbereich der Ergebnistabelle anzuzeigen, verwenden Sie: left mouse click Linksklick der Maus Shift+click Umschalt + Klick Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Öffnet einen Dialog zum Auswählen der Stylesheet-Datei. Schauen Sie sich /usr/share/recoll/examples/recoll[-dark].qss für ein Beispiel an. Result Table Ergebnistabelle Do not display metadata when hovering over rows. Zeigen Sie keine Metadaten an, wenn Sie über Zeilen schweben. Work around Tamil QTBUG-78923 by inserting space before anchor text Umgehen Sie Tamil QTBUG-78923, indem Sie einen Leerschritt vor dem Anker-Text einfügen. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Der Fehler führt dazu, dass seltsame Kreiszeichen innerhalb markierter tamilischer Wörter angezeigt werden. Die Lösung besteht darin, ein zusätzliches Leerzeichen einzufügen, das das Problem zu beheben scheint. Depth of side filter directory tree Tiefe des Seitensuchfilters im Verzeichnisbaum Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Zoomfaktor für die Benutzeroberfläche. Nützlich, wenn die Standardeinstellung nicht für Ihre Bildschirmauflösung geeignet ist. Display scale (default 1.0): Anzeigemaßstab (Standard 1.0): Automatic spelling approximation. Automatische Rechtschreib-Approximation. Max spelling distance Maximale Rechtschreibdistanz Add common spelling approximations for rare terms. Fügen Sie gängige Rechtschreib-Annäherungen für seltene Begriffe hinzu. Maximum number of history entries in completer list Maximale Anzahl von Verlaufseinträgen in der Vervollständigungsliste Number of history entries in completer: Anzahl der Verlaufseinträge im Vervollständiger: Displays the total number of occurences of the term in the index Zeigt die Gesamtanzahl der Vorkommen des Begriffs im Index an. Show hit counts in completer popup. Zeige Trefferanzahl im Vervollständigungsfenster an. Prefer HTML to plain text for preview. Bevorzugen Sie HTML anstelle von reinem Text für die Vorschau. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Siehe die Qt QDateTimeEdit-Dokumentation. Z.B. yyyy-MM-dd. Lassen Sie das Feld leer, um das Standard-Qt/System-Format zu verwenden. Side filter dates format (change needs restart) Seitenfilter Datumsformat (Änderung erfordert Neustart) If set, starting a new instance on the same index will raise an existing one. Wenn festgelegt, wird das Starten einer neuen Instanz auf demselben Index eine vorhandene erhöhen. Single application Einzelanwendung Set to 0 to disable and speed up startup by avoiding tree computation. Setze auf 0, um die Baum-Berechnung zu deaktivieren und den Startvorgang zu beschleunigen. The completion only changes the entry when activated. Die Vervollständigung ändert den Eintrag nur, wenn sie aktiviert ist. Completion: no automatic line editing. Vervollständigung: keine automatische Zeilenbearbeitung. Interface language (needs restart): Benutzeroberfläche-Sprache (Neustart erforderlich): Note: most translations are incomplete. Leave empty to use the system environment. Hinweis: Die meisten Übersetzungen sind unvollständig. Lassen Sie das Feld leer, um die Systemumgebung zu verwenden. Preview Vorschau Set to 0 to disable details/summary feature Setze auf 0, um die Details-/Zusammenfassungsfunktion zu deaktivieren. Fields display: max field length before using summary: Felder anzeigen: maximale Feldlänge vor Verwendung der Zusammenfassung: Number of lines to be shown over a search term found by preview search. Anzahl der Zeilen, die über einem Suchbegriff angezeigt werden sollen, der durch die Vorschau-Suche gefunden wurde. Search term line offset: Suchbegriff-Zeilenversatz: Wild card characters *?[] will processed as punctuation instead of being expanded Platzhalterzeichen *?[] werden als Satzzeichen verarbeitet, anstatt erweitert zu werden. Ignore wild card characters in ALL terms and ANY terms modes Ignorieren Sie Platzhalterzeichen in den Modi ALLE Begriffe und IRGENDEIN Begriff. Color scheme Farbschema When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Beim Anzeigen von HTML im Dunkelmodus versuchen Sie, einen dunklen Hintergrund (und helle Farben) zu verwenden. Dies steht im Konflikt mit vielen Dokumenten, die unsere helle Einstellung mit ihrer eigenen CSS (dunklen) Vordergrundfarbe überschreiben, was zu einem unlesbaren Dokument führt, daher ist es standardmäßig deaktiviert. Use dark background when displaying HTML in dark mode. Verwenden Sie einen dunklen Hintergrund, wenn HTML im Dunkelmodus angezeigt wird. recoll-1.43.12/qtgui/i18n/recoll_uk.ts0000644000175000017500000106406515124431112016711 0ustar dockesdockes ActSearchDLG Menu search Пошук у меню AdvSearch All clauses Всі поля Any clause Будь-яке поле texts тексти spreadsheets таблиці presentations презентації media мультимедіа messages повідомлення other інше Bad multiplier suffix in size filter Помилковий мультиплікатор у фільтрі text текст spreadsheet таблиці presentation презентації message повідомлення Advanced Search Складний пошук History Next Історія Далі History Prev Історія Load next stored search Завантажити наступний збережений пошук Load previous stored search Завантажити збережений пошук AdvSearchBase Advanced search Складний пошук Restrict file types Обмежити типи файлів Save as default Зберегти як типові Searched file types Бажані All ----> Всі -----> Sel -----> Виб -----> <----- Sel <----- Виб <----- All <----- Всі Ignored file types Ігноровані Enter top directory for search Шукати тільки у каталозі Browse Перегляд Restrict results to files in subtree: Обмежити пошук по файлах з піддерева: Start Search Шукати Search for <br>documents<br>satisfying: Шукати<br>документи,</br>що задовільняють: Delete clause Прибрати поле Add clause Додати поле Check this to enable filtering on file types Використовувати фільтрацію по типах файлів By categories По категоріях Check this to use file categories instead of raw mime types Використовувати категорії замість типів MIME Close Закрити All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Всі непусті поля буде об'єднано за допомогою АБО ("усі слова") або ТА ("будь-які слова").<br>Поля типу "будь-які слова", "усі слова" та "без цих слів" приймають суміш слів та фраз у подвійних лапках.<br>Поля без даних не беруться до уваги. Invert Invert Minimum size. You can use k/K,m/M,g/G as multipliers Мінімальний розмір. Ви можете використовувати k/K,m/M,g/G як множники Min. Size Min. Size Maximum size. You can use k/K,m/M,g/G as multipliers Максимальний розмір. Ви можете використовувати k/K,m/M,g/G як множники Max. Size Макс. розмір Select Вибрати Filter Фільтр From Від To На Check this to enable filtering on dates Позначте цей пункт, щоб увімкнути фільтрацію дат Filter dates Фільтрувати дати Find Знайти Check this to enable filtering on sizes Позначте цей прапорець, щоб увімкнути фільтрування за розмірами Filter sizes Розмір фільтру Filter birth dates Фільтрувати дати народження ConfIndexW Can't write configuration file Неможливо записати файл конфіґурації Global parameters Загальні параметри Local parameters Місцеві параметри Search parameters Параметри пошуку Top directories Верхні теки The list of directories where recursive indexing starts. Default: your home. Список тек, з яких починається рекурсивне індексування. Типово: домашня тека. Skipped paths Пропускати шляхи These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Це шляхи каталогів, в яких не буде входити індексація.<br>Елементи контуру, які можуть містити шаблони. Записи повинні відповідати шляхам індексатор (наприклад, якщо верхні каталоги включають '/home/me' і '/будинок' насправді посилання на '/usr/home'правильний запис у пропущеному шляху буде '/home/me/tmp*', не '/usr/home/me/tmp*') Stemming languages Мови зі словоформами The languages for which stemming expansion<br>dictionaries will be built. Мови, для яких буде побудовано<br>словники розкриття словоформ. Log file name Файл журналу The file where the messages will be written.<br>Use 'stderr' for terminal output Файл, куди підуть повідомлення.<br>'stderr' для терміналу Log verbosity level Докладність журналу This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Встановити обсяг повідомлень,<br>від помилок до даних зневадження. Index flush megabytes interval Інтервал скидання індексу (Мб) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Скільки даних буде проіндексовано між скиданнями індексу на диск.<br>Допомагає контролювати використання пам'яті індексатором. Типово: 10Мб This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Це відсоток використання диску - загальний обсяг диску, а не розмір індексу - при якому індексація зазнає невдачі та зупинки.<br>Стандартне значення 0 видаляє будь-які межі. No aspell usage Не використовувати aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Вимикає використання aspell для генерації наближень у написання в навіґаторі термінів.<br>Корисне, коли aspell відсутній або зламаний. Aspell language Мова aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Мова аспельного словника. Це має виглядати на 'en' або 'fr' . .<br>Якщо це значення не встановлено, то NLS середовище буде використане для обчислення, що зазвичай працює. Щоб отримати уявлення про те, що було встановлено на вашій системі, введіть 'аюту' і подивіться на . у папці 'data-dir' Database directory name Тека бази даних The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Ім'я каталогу, де зберігати індекс<br>каталог, не є абсолютний шлях відноситься до каталогу конфігурації. За замовчуванням 'xapiandb'. Unac exceptions Юнацькі винятки <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Це винятки з механізму unac, який, за замовчуванням, видаляє всі діакритики, і виконує канонічну декомпозицію. Ви можете перевизначити неакцентовані на деякі символи, в залежності від вашої мови, і вказати додаткові декомпозиції. . для лігатур. При відрізах першого символу - це вихідний, а решта - переклад. Process the WEB history queue Обробити чергу історії WEB Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Вмикає індексацію відвіданих сторінок.<br>(вам також потрібно встановити плагін для Firefox) Web page store directory name Ім'я каталогу веб-сторінок магазину The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Ім'я каталогу, де зберігати відвідані веб-сторінки.<br>Шлях не абсолютний шлях відноситься до каталогу налаштувань. Max. size for the web store (MB) Макс. розмір для веб-магазину (МБ) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Записів буде перероблено після досягнення розміру.<br>Збільшення розміру дійсно має сенс, бо зменшення значення не призведе до скорочення існуючого файлу (лише відходів в кінці). Automatic diacritics sensitivity Автоматична чутливість діакритики <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Автоматично викликати чутливість до діакриту, якщо пошуковий термін має акцентовані символи (не в unac_except_trans). Можливо, вам потрібно використовувати мову запитів і модифікатор <i>D</i> щоб вказати чутливість до діакритики. Automatic character case sensitivity Автоматична чутливість регістру символів <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Автоматично чутливість до регістру ієрогліфів, якщо запис має символи у верхньому регістрі, окрім першої позиції. Також вам потрібно використовувати мову запиту і модифікатор <i>C</i> щоб вказати чутливість до символів . Maximum term expansion count Максимальний термін розширення <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Максимальна кількість розширення для одного строку (наприклад, при використанні шаблонів). За замовчуванням 10 000 є розумним і буде уникати запитів, які з'являються замороженими, тоді як двигун рухається в цьому списку. Maximum Xapian clauses count Максимальна кількість заяв Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Максимальна кількість елементарних застережень, які ми додаємо до одного Xapian запиту. У деяких випадках результатом строкового розширення може бути багатократне і ми хочемо уникати використання надмірної пам'яті. Значення за замовчуванням 100 000 має бути достатньо високим у більшості випадків і сумісним з поточними типовими конфігураціями обладнання. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... Будуть зібрані мови, для яких будуть обрані словники розширень.<br>Подивіться на документацію Xapian stemmer з можливих значень. Наприклад, english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Мова аспек-словника. Значення - 2-літерні коди мови, наприклад 'en', 'fr' . .<br>Якщо це значення не встановлено, то NLS середовище буде використане для обчислення, що зазвичай працює. Щоб отримати уявлення про те, що було встановлено на вашій системі, введіть 'аюту' і подивіться на . у папці 'data-dir' Indexer log file name Ім'я файла журналу індексування If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Якщо пусто, буде використано ім'я файлу журналу. Можливо, корисно мати окремий журнал для діагностичних цілей, оскільки загальний журнал буде стертий при запуску<br>інтерфейсу. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Відсоток повного порогу на диску, за якого ми припиняємо індексувати<br>Наприклад: 90% до повного заряду, 0 або 100 означає відсутність обмежень) Web history Веб-історія Process the Web history queue Обробити чергу історії веб-сторінок (by default, aspell suggests mispellings when a query has no results). за замовчуванням, aspell пропонує варіанти неправильного написання слів, коли запит не має результатів. Page recycle interval Інтервал перезавантаження сторінки <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. За замовчуванням в кеші зберігається лише один екземпляр URL-адреси. Це можна змінити, встановивши це значення, що визначає частоту збереження кількох екземплярів ('день', 'тиждень', 'місяць', 'рік'). Зверніть увагу, що збільшення інтервалу не видалить існуючі записи. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Увага: старі сторінки будуть видалені для звільнення місця для нових, коли досягнутий максимальний розмір. Поточний розмір: %1 Start folders Початкові теки The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Список папок/каталогів для індексації. Підпапки будуть оброблятися рекурсивно. За замовчуванням: ваш домашній каталог. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Відсоток повного порогу диска, при досягненні якого ми припиняємо індексацію<br>(Наприклад, 90 для зупинки на 90% заповнення, 0 або 100 означає відсутність обмежень) Browser add-on download folder Папка завантаження додатків для браузера Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Встановіть це лише у випадку, якщо ви встановили параметр "Підкаталог завантажень" у налаштуваннях додатку для веб-браузера. У цьому випадку це повинен бути повний шлях до каталогу (наприклад, /home/[me]/Downloads/my-subdir) Store some GUI parameters locally to the index Зберігайте деякі параметри GUI локально в індексі. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index Налаштування GUI зазвичай зберігаються в глобальному файлі, що є дійсним для всіх індексів. Встановлення цього параметра зробить деякі налаштування, такі як налаштування таблиці результатів, конкретними для індексу. Suspend the real time indexer when running on battery Призупинити індексатор у реальному часі під час роботи на батареї. The indexer will wait for a return on AC and reexec itself when it happens Індексатор буде чекати на повернення на AC і повторно виконувати себе, коли це станеться. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Список папок/каталогів для індексації, рекурсивно з їх підкаталогами.<br>Символ '~' розгортається до вашого домашнього каталогу, який є значенням за замовчуванням. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Лише типи МІМЕ An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Виключний список індексованих mime-типів.<br>Додатково нічого не буде індексовано. Зазвичай, порожній і неактивний Exclude mime types Виключити типи МІМЕ Mime types not to be indexed Типи MIME не індексуються Max. compressed file size (KB) Межа розміру стиснених файлів (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Це значення встановлює поріг розміру стиснених файлів, більші за нього не буде опрацьовано. -1 вимикає ліміт, 0 вимикає декомпресію. Max. text file size (MB) Макс. розмір текстового файлу (МБ) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Це значення встановлює поріг, після якого текстові файли не будуть оброблятися. Встановіть в -1 для відсутності ліміту. Це за винятком файлів monster журналів з індексу. Text file page size (KB) Розмір текстової сторінки (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Якщо це значення встановлено (не дорівнює -1), текстові файли будуть розділені у чанках такого розміру для індексування. Це допоможе шукати дуже великі текстові файли (тобто файли журналу). Max. filter exec. time (s) Макс. виконання фільтрів. Час (ів) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Зовнішні фільтри працюють довше, ніж це буде перервано. Це для рідкісного випадку (i: postscript) де документ може спричинити фільтр для циклу. Встановіть -1 для відсутності ліміту. Global Глобальні ConfigSwitchDLG Switch to other configuration Перемкнутися на іншу конфігурацію ConfigSwitchW Choose other Виберіть інше Choose configuration directory Виберіть каталог конфігурації CronToolW Cron Dialog Cron Dialog <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Дні тижня (* або 0-7, 0 або 7 - неділя) Hours (* or 0-23) Годин (* або 0-23) Minutes (0-59) Хвилин (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> , li { white-space: попередня обритя; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Клікніть <span style=" font-style:italic;">Вимкніть</span> щоб зупинити автоматичне парне індексацію, <span style=" font-style:italic;">Увімкнено</span> , щоб задіяти, <span style=" font-style:italic;">Скасуйте</span> нічого не змінити.</p></body></html> Enable Увімкнено Disable Вимкнено It seems that manually edited entries exist for recollindex, cannot edit crontab Здається, що відредаговані вручну записи існують для recollindex, не можна редагувати crontab Error installing cron entry. Bad syntax in fields ? Помилка встановлення планувальника cron. Невдалий синтаксис у поля? EditDialog Dialog Діалог EditTrans Source path Шлях до вихідного коду Local path Локальний шлях Config error Помилка конфігурації Original path Початковий шлях Path in index Шлях в індексі Translated path Перекладений шлях EditTransBase Path Translations Переклади шляхів Setting path translations for Налаштування перекладів шляху для Select one or several file types, then use the controls in the frame below to change how they are processed Виберіть один або кілька типів файлів, а потім використовуйте параметри в кадрі нижче, щоб змінити їх обробку Add Додати Delete Видалити Cancel Відмінити Save Зберегти FirstIdxDialog First indexing setup Перше налаштування індексування <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> , li { white-space: попередня обритя; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">, Схоже, індекс цієї конфігурації не існує.</span><br /><br />, Якщо ви просто хочете індексувати домашній каталог за допомогою заданого значення за замовчуванням, натисніть <span style=" font-style:italic;">Почати індексацію</span> . Ви зможете згодом налаштувати подробиці. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Якщо потрібно більше контролю, змініть значення наступних посилань для налаштування конфігурації індексування та розкладу.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ці інструменти можна отримати пізніше <span style=" font-style:italic;">Налаштування</span> меню.</p></body></html> Indexing configuration Конфігурація індексування This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Це дозволить вам налаштувати каталоги, які ви хочете індексувати або інші параметри, такі як виключені шляхи до файлів або імена, набір символів за замовчуванням і т. д. Indexing schedule Розклад індексування This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Це дозволить вам вибирати між пакетною і індексацією в реальному часі, і налаштувати автоматичний розклад для пакетної індексації (за допомогою cron). Start indexing now Почати індексацію зараз FragButs %1 not found. %1 не знайдено. %1: %2 %1: %2 Fragment Buttons Кнопки фрагменту Query Fragments Фрагменти запитів IdxSchedW Index scheduling setup Налаштування планування індексів <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> , li { white-space: попередня обритя; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing може працювати безповоротно, індексування файлів під час їх змін, чи запуску з перервних інтервалів. </p> ,<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Читання ручної інструкції може допомогти вам вирішити ці підходи (натисніть F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Цей інструмент допоможе вам налаштувати розклад для автоматизації виконання батчів індексації, або почати реально індексацію часу, коли ви увійдете (або і те, й інше, що рідко має сенс). </p></body></html> Cron scheduling Планування Cron The tool will let you decide at what time indexing should run and will install a crontab entry. Інструмент дозволить вам вирішити, в який час індексації слід запустити і буде встановити запис на crontab Real time indexing start up Запуск індексування в реальному часі Decide if real time indexing will be started when you log in (only for the default index). Оберіть, чи буде розпочато індексацію часу при вході (лише для індексу за замовчуванням). ListDialog Dialog Діалог GroupBox Групак Main No db directory in configuration В конфігурації немає каталогу БД Could not open database in Не можу відкрити базу даних в . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Натисніть Відміна, якщо бажаєте відредагувати конфіґурацію до початку індексування, чи OK для продовження. Configuration problem (dynconf Проблема конфігурації (dynconf "history" file is damaged or un(read)writeable, please check or remove it: "історія" файл пошкоджений або недоступний для запису, будь ласка, перевірте чи видаліть його: "history" file is damaged, please check or remove it: "історія" файл пошкоджений, будь ласка, перевірте або видаліть його: Needs "Show system tray icon" to be set in preferences! Потрібно встановити "Показати значок системного лотка" у налаштуваннях! PTransEdit Path in index Шлях в індексі Translated path Перекладений шлях Config error Помилка конфігурації Original path Початковий шлях Local path Локальний шлях PTransEditBase Path Translations Переклади шляхів Select one or several file types, then use the controls in the frame below to change how they are processed Виберіть один або кілька типів файлів, а потім використовуйте параметри в кадрі нижче, щоб змінити їх обробку Add Додати Delete Видалити Cancel Відмінити Save Зберегти Preview &Search for: &Шукати: &Next &Наступне &Previous &Попереднє Match &Case &Чутливість до реєстру Clear Стерти Creating preview text Створюю текст для перегляду Loading preview text into editor Завантажую текст перегляду в редактор Cannot create temporary directory Не можу створити тимчасову теку Cancel Відмінити Close Tab Закрити вкладку Missing helper program: Не знайдено допоміжну програму: Can't turn doc into internal representation for Неможливо перетворити документ на внутрішнє представлення для Cannot create temporary directory: Не вдалося створити тимчасову теку: Error while loading file Помилка при завантаженні файлу Form Форма Tab 1 Tab 1 Open Відкрити Canceled Скасовано Error loading the document: file missing. Помилка завантаження документа: відсутній файл. Error loading the document: no permission. Помилка при завантаженні документа: немає дозволу. Error loading: backend not configured. Помилка завантаження: backend не налаштований. Error loading the document: other handler error<br>Maybe the application is locking the file ? Помилка при завантаженні документу: інша помилка обробника<br>Можливо, програма блокує файл ? Error loading the document: other handler error. Помилка при завантаженні документа: іншої помилки обробника. <br>Attempting to display from stored text. <br>Спроба відобразити із збереженого тексту. Could not fetch stored text Не вдалося отримати збережений текст Previous result document Попередній документ результату Next result document Наступний документ результату Preview Window Вікно попереднього перегляду Close Window Закрити вікно Next doc in tab Наступний доктор у вкладці Previous doc in tab Попередній доктор у вкладці Close tab Закрити вкладку Print tab Print tab Close preview window Закрити вікно попереднього перегляду Show next result Показати наступний результат Show previous result Показати попередній результат Print Друк PreviewTextEdit Show fields Показувати поля Show main text Показувати основний текст Print Друк Print Current Preview Надрукувати поточний перегляд Show image Показати зображення Select All Виділити все Copy Копія Save document to file Зберегти документ у файл Fold lines Складки рядків Preserve indentation Зберегти відступ Open document Відкритий документ Reload as Plain Text Перезавантажити як звичайний текст Reload as HTML Перезавантажити як HTML QObject Global parameters Загальні параметри Local parameters Місцеві параметри <b>Customised subtrees <b>Піддерева з налаштуваннями The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Список тек у індексованій ієрархії,<br>для яких деякі параметри потрібно змінити. Типово: пустий. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Нижченаведені параметри змінюються або на верхньому рівні, якщо<br>не вибрано нічого або пустий рядок, або для вибраної теки.<br>Ви можете додати або прибрати теки кнопками +/-. Skipped names Пропускати назви These are patterns for file or directory names which should not be indexed. Шаблони назв файлів або тек, які не буде індексовано. Default character set Типове кодування This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Кодування, яке буде застосовано при читанні файлів, які не вказують таке особливо (наприклад, чисто текстових файлів).<br>Типово невказане, тоді використовується значення з оточення (локалі). Follow symbolic links Розкривати символічні посилання Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Ходити по симлінках при індексації. Типово "ні" для уникнення дублікатів Index all file names Індексувати всі назви файлів Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Індексувати також назви файлів, вміст яких не може бути впізнано чи оброблено (невідомий або непідтримуваний тип MIME). Типово "так" Beagle web history Бігле веб-історія Search parameters Параметри пошуку Web history Веб-історія Default<br>character set За замовчуванням<br>кодувати Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Символ, що використовується для читання файлів, які не визначають налаштування символу внутрішньо, наприклад цілком текстові файли.<br>Значення за замовчуванням порожнє, і значення для використання NLS. Ignored endings Ігноровані закінчення These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Це кінець назви файлу для файлів, які будуть індексуватися лише контентом (без спроби ідентифікації типу MIME, без декомпресії, без індексації вмісту. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Це кінець назви файлу для файлів, які будуть індексуватися лише по імені (без спроби ідентифікації типу MIME, без декомпресії, без індексації вмісту). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>Параметри, які випливають, встановлені на верхньому рівні, якщо в переліку вище не вибрано нічого або порожній рядок, або для вибраного підкаталогу. Ви можете додати або видалити каталоги, натиснувши кнопки +/-. These are patterns for file or directory names which should not be indexed. Це шаблони для імен файлів або каталогів, які не повинні індексуватися. QWidget Create or choose save directory Створити або вибрати теку для збереження Choose exactly one directory Виберіть лише один каталог Could not read directory: Не вдалося прочитати каталог: Unexpected file name collision, cancelling. Неочікуване зіткнення з іменем файлу, скасування Cannot extract document: Не вдалося витягти документ: &Preview &Переглянути &Open &Відкрити Open With Відкрити за допомогою Run Script Запуск сценарію Copy &File Name Копіювати &назву файла Copy &URL Копіювати &URL &Write to File &Написати у файл Save selection to files Зберегти виділене для файлів Preview P&arent document/folder Попередній перегляд &зовнішньої документа/теки &Open Parent document/folder &Відкрити батьківську документ/теку Find &similar documents Знайти &схожі документи Open &Snippets window Відкрити &вікно сніпетів Show subdocuments / attachments Показати піддокументи / вкладення &Open Parent document &Відкрити батьківський документ &Open Parent Folder &Відкрити батьківську теку Copy Text Копіювати текст Copy &File Path Скопіювати шлях до файлу Copy File Name Скопіювати назву файлу QxtConfirmationMessage Do not show again. Не показувати знову. RTIToolW Real time indexing automatic start Автоматичний старт індексування реальному часі <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> , li { white-space: попередня обритя; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">рецептів</span> індексації може бути настроєно виконуватись як демон, оновлення індексу як зміни файлів в реальному часі. Ви отримуєте постійний формат часу, але постійні використання системних ресурсів.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Запустити індексацію служби з моєю сесією на робочому столі. Also start indexing daemon right now. Також почати індексацію служби просто зараз. Replacing: Замінник: Replacing file Заміна файлу Can't create: Може't створити: Warning Попередження Could not execute recollindex Не вдалося виконати recollindex Deleting: Видалення: Deleting file Видалення файлу Removing autostart Видалення автозапуску Autostart file deleted. Kill current process too ? Автозапуск файлу видалено. Зупинити поточний процес? Configuration name Назва конфігурації Short alphanumeric nickname for this config Коротке алфавітно-цифрове ім'я для цієї конфігурації Could not find Не вдалося знайти RclCompleterModel Hits Пошуки Hits RclMain About Recoll Про Recoll Executing: [ Виконую: [ Cannot retrieve document info from database Не можу здобути документ з бази даних Warning Попередження Can't create preview window Не можу створити вікно перегляду Query results Результати запиту Document history Історія документів History data Дані історії Indexing in progress: Індексується: Files Файли Purge Очистити Stemdb База коренів Closing Закриваю Unknown Невідомо This search is not active any more Цей пошук вже неактивний Can't start query: Неможливо почати запит: Bad viewer command line for %1: [%2] Please check the mimeconf file Невірний командний рядок для переглядача %1: [%2] Перевірте файл mimeconf Cannot extract document or create temporary file Неможливо здобути документ чи створити тимчасовий файл (no stemming) (без словоформ) (all languages) (всі мови) error retrieving stemming languages помилка здобування списку мов Update &Index Поновити &індекс Indexing interrupted Індексування перервано Stop &Indexing Пе&рервати індексування All всі media медіа message повідомлення other інше presentation презентації spreadsheet таблиці text текст sorted сортоване filtered фільтроване External applications/commands needed and not found for indexing your file types: Відсутні зовнішні додатки/команди, що потрібні для індексування ваших документів: No helpers found missing Всі додаткові програми наявні Missing helper programs Відсутні додаткові програми Save file dialog Зберегти файл Choose a file name to save under Оберіть ім'я файла для збереження Document category filter Фільтр категорії документів No external viewer configured for mime type [ Немає налаштованого зовнішнього переглядача для типу mime [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Переглядач, вказаний в mimeview для %1: %2 не знайдено. Ви хочете почати діалогове вікно налаштувань? Can't access file: Може'файл доступу: Can't uncompress file: Може't нестиснутий файл: Save file Зберегти файл Result count (est.) Підсумкова кількість (майже) Query details Деталі запиту Could not open external index. Db not open. Check external index list. Не вдалося відкрити зовнішній індекс. Db не відкрито. Перевірте список зовнішніх індекс. No results found Нічого не знайдено None Без ефекту Updating Оновлення Done Виконано Monitor Монітор Indexing failed Індексацію не вдалося The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Поточний процес індексування не був запущений з цього інтерфейсу. Натисніть ОК, щоб вбити його в будь-якому разі, або Скасувати, щоб залишити його одним Erasing index Стирання індексу Reset the index and start from scratch ? Скинути індекс і почати з нуля? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Триває запит.<br>В результаті обмежень індексації бібліотека<br>скасовується вихід з програми Error Помилка Index not open Індекс не відкритий Index query error Помилка запиту індекса Indexed Mime Types Індексовані типи MIME Content has been indexed for these MIME types: Вміст було індексовано для цих типів MIME: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Індекс не оновлений до дати цього файлу. Відмова переймається тим, що ризикує показати неправильний запис. Натисніть Ок, щоб оновити індекс для цього файлу, а потім перезапустіть запит після завершення індексації. Ще раз, скасувати. Can't update index: indexer running Може't оновлення індекс: запускається індексатор Indexed MIME Types Індексовані MIME типи Bad viewer command line for %1: [%2] Please check the mimeview file Помилковий командний рядок переглядача для %1: [%2] Будь ласка, перевірте файл mimeview Viewer command line for %1 specifies both file and parent file value: unsupported Перегляд командного рядка %1 вказує як файл так і значення батьківського файлу: не підтримується Cannot find parent document Не вдалося знайти батьківський документ Indexing did not run yet Індексування ще не запущено External applications/commands needed for your file types and not found, as stored by the last indexing pass in Зовнішні програми / команди, необхідні для типів файлів і не знайдені, як збережені при останньому переданні індексації Index not up to date for this file. Refusing to risk showing the wrong entry. Індекс не оновлений до дати цього файлу. Відмова переймається тим, що ризикує показати неправильний запис. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Натисніть Ок, щоб оновити індекс для цього файлу, а потім перезапустіть запит після завершення індексації. Ще раз, скасувати. Indexer running so things should improve when it's done Індексатор працював, щоб все мало покращити коли's виконано Sub-documents and attachments Піддокументи та вкладення Document filter Фільтр документа Index not up to date for this file. Refusing to risk showing the wrong entry. Індекс не оновлений до дати цього файлу. Відмова переймається тим, що ризикує показати неправильний запис. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Натисніть Ок, щоб оновити індекс для цього файлу, тоді вам потрібно буде перезапустити запит після завершення індексації. The indexer is running so things should improve when it's done. Індекатор працює, щоб усе мало бути кращим коли він's завершено. The document belongs to an external indexwhich I can't update. Документ належить до зовнішнього індексу, який я можу'оновити . Click Cancel to return to the list. Click Ignore to show the preview anyway. Натисніть "Скасувати", щоб повернутися до списку. Натисніть "Ігнорувати для перегляду" все одно показати попередній перегляд. Duplicate documents Дублювати документи These Urls ( | ipath) share the same content: Ці адреси (| ipath) діляться тим самим змістом: Bad desktop app spec for %1: [%2] Please check the desktop file Помилкова специфікація додатка для %1: [%2] Будь ласка, перевірте файл стільниці Bad paths Помилкові шляхи Bad paths in configuration file: Помилкові шляхи у файлі конфігурації: Selection patterns need topdir Шаблони відбору потребують топіка Selection patterns can only be used with a start directory Шаблони виділення можуть використовуватися тільки в початковому каталозі No search Не знайдено No preserved previous search Немає збережених попереднього пошуку Choose file to save Виберіть файл для збереження Saved Queries (*.rclq) Збережені запити (*.rclq) Write failed Помилка запису Could not write to file Не вдалося записати файл Read failed Помилка читання Could not open file: Не вдалося відкрити файл: Load error Помилка завантаження Could not load saved query Не вдалося завантажити збережений запит Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Do not show this warning next time (use GUI preferences to restore). Не показувати це попередження наступного разу (використовуйте налаштування GUI для відновлення). Disabled because the real time indexer was not compiled in. Вимкнено, оскільки індексування в реальному часі не було скомпільовано. This configuration tool only works for the main index. Цей інструмент конфігурації працює лише для головного індексу. The current indexing process was not started from this interface, can't kill it Поточний процес індексування не був запущений з цього інтерфейсу, може't вбити його The document belongs to an external index which I can't update. Документ належить до зовнішнього індексу, який я можу'оновити . Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Натисніть "Скасувати", щоб повернутися до списку. <br>Натисніть "Ігнорувати для того, щоб показати попередній перегляд (та запам'ятати для цієї сесії). Index scheduling Планування індексів Sorry, not available under Windows for now, use the File menu entries to update the index Вибачте, поки що не доступне під Windows, використовуйте записи в меню "Файл" для оновлення індексу Can't set synonyms file (parse error?) Чи може'встановити синонім файл (помилка аналізування?) Index locked Індекс заблокований Unknown indexer state. Can't access webcache file. Невідомий стан індексатора. Може'доступ до файлу webcache Indexer is running. Can't access webcache file. Indexer запущено. Може'доступ до файлу webcache файлу. with additional message: з додатковим повідомленням: Non-fatal indexing message: Нефатальне повідомлення індексації: Types list empty: maybe wait for indexing to progress? Список типів порожній: можливо чекати завершення індексації? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Програма перегляду командного рядка %1 визначає батьківський файл, але URL-адреса - http[s]: не підтримується Tools Інструменти Results Результати (%d documents/%d files/%d errors/%d total files) (%d документів/%d файлів /%d помилок /%d загалом файлів) (%d documents/%d files/%d errors) (%d документів/%d файлів /%d помилок) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Порожній або не існує шляхів у файлі конфігурації. Натисніть Ok, щоб почати індексацію (дані про відсутні не будуть видалені з індексу): Indexing done Індексацію завершено Can't update index: internal error Може't оновлення індекс: внутрішня помилка Index not up to date for this file.<br> Індекс не оновлений до дати цього файлу.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Також, здається, що останнє індексне оновлення файлу провалилося</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Натисніть Ок, щоб спробувати оновити індекс для цього файлу. Вам потрібно буде знову запустити запит після завершення індексації<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Натисніть "Скасувати", щоб повернутися до списку.<br>Натисніть "Ігнорувати для того, щоб показати попередній перегляд (та запам'ятати для цієї сесії). Існує ризик показу неправильного запису.<br/> documents документи document документ files файли file файл errors помилки error помилка total files) всього файлів) No information: initial indexing not yet performed. Немає інформації: початкове індексування ще не виконано. Batch scheduling Пакетне планування The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Інструмент дозволить вам вирішити, в який час при індексуванні має запускатися. Він використовує планувальник завдань Windows завдань. Confirm Підтвердити Erasing simple and advanced search history lists, please click Ok to confirm Стирання простих і просунутих списків історії пошуку, будь ласка, натисніть Ок, щоб підтвердити Could not open/create file Не вдалося відкрити/створити файл F&ilter Запов&ітувач Could not start recollindex (temp file error) Не вдалося запустити recollindex (помилка тимчасового файлу) Could not read: Не вдалося прочитати: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Це замінить поточний вміст заголовка списку результатів і імені файлу GUI qss. Продовжити? You will need to run a query to complete the display change. Вам потрібно буде запустити запит для завершення зміни дисплея. Simple search type Простий тип пошуку Any term Будь-яке слово All terms Усі слова File name Ім'я файлу Query language Мова запиту Stemming language Мова словоформ Main Window Головне вікно Focus to Search Перейти до пошуку Focus to Search, alt. Перейти до пошуку, самі. Clear Search Очистити пошук Focus to Result Table Фокус до результатів Clear search Очистити пошук Move keyboard focus to search entry Пересунути клавіатуру на пошуковий запис Move keyboard focus to search, alt. Перемістіть клавіатуру до пошуку, зовсім. Toggle tabular display Переключити табуляційний екран Move keyboard focus to table Перемістити фокус клавіатури до таблиці Flushing Змивання Show menu search dialog Показати діалогове вікно пошуку меню Duplicates Дублікати Filter directories Фільтрувати каталоги Main index open error: Помилка відкриття головного індексу: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Індекс може бути пошкоджений. Можливо, спробуйте запустити xapian-check або перебудувати індекс? This search is not active anymore Цей пошук більше не активний. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Рядок команди переглядача для %1 вказує на батьківський файл, але URL не є file://: непідтримувано The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Відсутній переглядач, вказаний у mimeview для %1: %2. Бажаєте відкрити діалогове вікно налаштувань? Show advanced search dialog Показати діалогове вікно розширеного пошуку with additional message: RclMainBase Previous page Попередня сторінка Next page Наступна сторінка &File &Файл E&xit &Вихід &Tools &Інструменти &Help &Довідка &Preferences &Налаштування Search tools Інструменти пошуку Result list Список результатів &About Recoll Про &Recoll Document &History &Історія документів Document History Історія документів &Advanced Search &Складний пошук Advanced/complex Search Складний (поглиблений) пошук &Sort parameters &Параметри сортування Sort parameters Параметри сортування Next page of results Наступна сторінка результатів Previous page of results Попередня сторінка результатів &Query configuration Конфіґурація &запиту &User manual &Довідник користувача Recoll Запах Ctrl+Q Ctrl+Q Update &index &Поновити індекс Term &explorer &Навіґатор термінів Term explorer tool Інструмент для вивчання термінів External index dialog Діалог зовнішнього індексу &Erase document history &Очистити історію документів First page Перша сторінка Go to first page of results Перейти до першої сторінки результатів &Indexing configuration &Конфіґурація індексування All всі &Show missing helpers Відсутні програми PgDown ПДР Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp Пігап &Full Screen &Весь екран F11 Ф11 Full Screen На весь екран &Erase search history &Стерти історію пошуку sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Сортувати за датою від найстаріших до найновіших sortByDateDesc сортби-Датедек Sort by dates from newest to oldest Сортувати за датою від найновіших до старіших Show Query Details Показувати подробиці запиту Show results as table Показати результати як таблицю &Rebuild index &Перебудувати індекс &Show indexed types &Показати індексовані типи Shift+PgUp Shift+PgUp &Indexing schedule &Розклад індексування E&xternal index dialog Д&одальне вікно вічного індексу &Index configuration &Індексувати конфігурацію &GUI configuration &Налаштування інтерфейсу &Results &Результати Sort by date, oldest first Впорядкувати по даті, спочатку старіші Sort by date, newest first Впорядкувати за датою, спочатку новіше Show as table Показати як таблицю Show results in a spreadsheet-like table Показати результати в таблиці електронної таблиці Save as CSV (spreadsheet) file Зберегти як CSV (електронна таблиця) файл Saves the result into a file which you can load in a spreadsheet Зберігає результат у файл, який можна завантажити в таблицю Next Page Наступна сторінка Previous Page Попередня сторінка First Page Перша сторінка Query Fragments Фрагменти запитів With failed files retrying З помилковою спробою файлів повторна спроба Next update will retry previously failed files Наступне оновлення буде повторюватися раніше невдалі файли Save last query Зберегти останній запит Load saved query Завантажити збережений запит Special Indexing Спеціальний індекс Indexing with special options Індексування з спеціальними опціями Indexing &schedule індексування &розкладу Enable synonyms Увімкнути синоніми &View &Вигляд Missing &helpers Відсутні &помічники Indexed &MIME types Інде&овані типи MIME Index &statistics З&качати статистику Webcache Editor Редактор Webcache Trigger incremental pass Тригер інкрементний прохід E&xport simple search history Експорт простої історії пошуку Use default dark mode Використовувати стандартний темний режим Dark mode Темний режим &Query &Запит Increase results text font size Збільшити розмір шрифту тексту результатів Increase Font Size Збільшити розмір шрифту Decrease results text font size Зменшити розмір шрифту тексту результатів Decrease Font Size Зменшити розмір шрифту Start real time indexer Почати індексацію в реальному часі Query Language Filters Фільтри мови запитів Filter dates Фільтрувати дати Assisted complex search Допомагає складний пошук Filter birth dates Фільтрувати дати народження Switch Configuration... Конфігурація перемикача... Choose another configuration to run on, replacing this process Виберіть іншу конфігурацію для запуску, замінюючи цей процес. &User manual (local, one HTML page) Керівництво користувача (локальне, одна HTML-сторінка) &Online manual (Recoll Web site) &Онлайн посібник (веб-сайт Recoll) Path translations Переклад шляхів With failed files retrying RclTrayIcon Restore Відновити Quit Вийти RecollModel Abstract Абстракції Author Автор Document size Розмір документа Document date Дата документа File size Розмір файлу File name Ім'я файлу File date Дата файлу Ipath Іпатія Keywords Ключові слова Mime type Тип MIME Original character set Початковий набір символів Relevancy rating Рейтинг релевантності Title Найменування URL Адреса Mtime Мтім Date Дата Date and time Дата та час MIME type MIME-тип Can't sort by inverse relevance Може'сортування по інверсній релевантності ResList Result list Список результатів Unavailable document Документ недосяжний Previous Попередня Next Наступна <p><b>No results found</b><br> <p><b>Не знайдено</b><br> &Preview &Переглянути Copy &URL Копіювати &URL Find &similar documents Знайти &схожі документи Query details Деталі запиту (show query) (показати запит) Copy &File Name Копіювати &назву файла filtered фільтроване sorted сортоване Document history Історія документів Preview Перегляд Open Відкрити <p><i>Alternate spellings (accents suppressed): </i> <p><i>Альтернативні орфографії (акценти придушено): </i> &Write to File &Написати у файл Preview P&arent document/folder Попередній перегляд &зовнішньої документа/теки &Open Parent document/folder &Відкрити батьківську документ/теку &Open &Відкрити Documents Документи out of at least з принаймні for по <p><i>Alternate spellings: </i> <p><i>Альтернативні орфографії: </i> Open &Snippets window Відкрити &вікно сніпетів Duplicate documents Дублювати документи These Urls ( | ipath) share the same content: Ці адреси (| ipath) діляться тим самим змістом: Result count (est.) Підсумкова кількість (майже) Snippets Сніпети This spelling guess was added to the search: Це варіант написання був доданий до пошуку: These spelling guesses were added to the search: Ці варіанти написання були додані до пошуку: ResTable &Reset sort &Сортування за замовчуванням &Delete column &Видалити стовпець Add " Додати " " column " стовпці Save table to CSV file Зберегти таблицю в CSV файл Can't open/create file: Може'відкрити або створити файл: &Preview &Переглянути &Open &Відкрити Copy &File Name Копіювати &назву файла Copy &URL Копіювати &URL &Write to File &Написати у файл Find &similar documents Знайти &схожі документи Preview P&arent document/folder Попередній перегляд &зовнішньої документа/теки &Open Parent document/folder &Відкрити батьківську документ/теку &Save as CSV &Зберегти як CSV Add "%1" column Додати "%1" стовпець Result Table Таблиця результатів Open Відкрити Open and Quit Відкрити і вийти Preview Перегляд Show Snippets Показати сніпети Open current result document Відкрити поточний документ результату Open current result and quit Відкрити поточний результат і вийти Show snippets Показати сніпети Show header Відображати заголовок Show vertical header Показати вертикальний заголовок Copy current result text to clipboard Скопіювати поточний текст результату в буфер обміну Use Shift+click to display the text instead. Використовуйте Shift + клік, щоб відобразити текст замість цього. %1 bytes copied to clipboard %1 байтів скопійовано в буфер обміну Copy result text and quit Скопіюйте текст результату і вийдіть ResTableDetailArea &Preview &Переглянути &Open &Відкрити Copy &File Name Копіювати &назву файла Copy &URL Копіювати &URL &Write to File &Написати у файл Find &similar documents Знайти &схожі документи Preview P&arent document/folder Попередній перегляд &зовнішньої документа/теки &Open Parent document/folder &Відкрити батьківську документ/теку ResultPopup &Preview &Переглянути &Open &Відкрити Copy &File Name Копіювати &назву файла Copy &URL Копіювати &URL &Write to File &Написати у файл Save selection to files Зберегти виділене для файлів Preview P&arent document/folder Попередній перегляд &зовнішньої документа/теки &Open Parent document/folder &Відкрити батьківську документ/теку Find &similar documents Знайти &схожі документи Open &Snippets window Відкрити &вікно сніпетів Show subdocuments / attachments Показати піддокументи / вкладення Open With Відкрити за допомогою Run Script Запуск сценарію SSearch Any term Будь-яке слово All terms Усі слова File name Ім'я файлу Completions Доповнення Select an item: Оберіть: Too many completions Занадто багато доповнень Query language Мова запиту Bad query string Невірний рядок запиту Out of memory Недостатньо пам'яті Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Введіть вираз мови запиту. Шкіра аркуш:<br> <i>термін2</i> : 'term1' і 'term2' у будь-якому полі.<br> <i>поле:term1</i> : 'term1' в полі 'поле'.<br> Стандартних Полів імена/синоніми:<br> title/subject/caption, author/from, recipient/to, ename, ext.<br> псевдополя: бруд, mime/format, type/rclcat, дата.<br> проміжок дати: 2009-03-05-20 2009-03-03-03-03-03-03-03-01/01/P2M.<br> <i>терміни 2 АБО вираз2</i> : вираз1 І (терміни 2 АБО умова).<br> Не допускаються справжні дужки.<br> <i>"термін1 термін2"</i> : фраза (має відбуватися точно). Можливі модифікатори:<br> <i>"термін2"р</i> : невпорядкований пошук близькості з відстанню за замовчуванням.<br> Використайте <b>Показати запит</b> , коли виникає сумніви щодо результату й дивіться вручну (&л; 1>) для детальнішої інформації. Enter file name wildcard expression. Введіть шаблон назви файлу. Enter search terms here. Type ESC SPC for completions of current term. Введіть пошукові слова. Можна використовувати Esc-пробіл для доповнення. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Введіть вираз мови запиту. Шкіра аркуш:<br> <i>термін2</i> : 'term1' і 'term2' у будь-якому полі.<br> <i>поле:term1</i> : 'term1' в полі 'поле'.<br> Стандартних Полів імена/синоніми:<br> title/subject/caption, author/from, recipient/to, ename, ext.<br> псевдополя: бруди, мим/формат, тип/rclcat, дата.<br> проміжок дати: 2009-03-01/2009-05-20 2009-03-03-03-03-01/01/P2M.<br> <i>терміни 2 АБО вираз2</i> : вираз1 І (терміни 2 АБО умова).<br> Ви можете використовувати дужки, щоб зробити це зрозумілішим.<br> <i>"термін1 термін2"</i> : фраза (має відбуватися точно). Можливі модифікатори:<br> <i>"термін2"р</i> : невпорядкований пошук близькості з відстанню за замовчуванням.<br> Використайте <b>Показати запит</b> , коли виникає сумніви щодо результату й дивіться вручну (&л; 1>) для детальнішої інформації. Stemming languages for stored query: Видалення мов для збереженого запиту: differ from current preferences (kept) відрізняти від поточних параметрів (зберегти) Auto suffixes for stored query: Автоматично суфікси для збереженого запиту: External indexes for stored query: Зовнішні індекси для збереженого запиту: Autophrase is set but it was unset for stored query Встановити автофразу, але вона була не встановлена для збереженого запиту Autophrase is unset but it was set for stored query Автофраза не встановлена, але була встановлена для збереженого запиту Enter search terms here. Введіть тут умови пошуку. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; рамка: solid black; border-collapse: collapse; обвал кордону: обвал; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Чектор мови запиту. У сумніві: натисніть <b>Показати запит</b>.&nbsp; You should really look at the manual (F1)</p> Вам дійсно потрібно переглянути інструкцію (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Що</th><th>Приклади</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>І</td><td>одна дві&nbsp;&nbsp;&nbsp;1 і дві&nbsp;&nbsp;&nbsp;1 і два</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Або</td><td>один АБО два&nbsp;&nbsp;&nbsp;один || два</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Complex boolean. АБО має пріоритет, використовуйте дужки&nbsp; where needed</td><td>(one AND two) OR three</td></tr> де потрібно</td><td>(один І два) АБО три</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Не</td><td>-термін</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Фраза</td><td>"гордість і упередження"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Невпорядкований проксі. (стандартна слабкість=10)</td><td>"упередження&nbsp;гордість"р</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Без розширення стей: великі</td><td>Поверх</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Польовий специфічний</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>І всередині поля (немає замовлення)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>АБО всередині поля</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Фільтр каталогів</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>фільтр MIME типу</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Інтервал між датами</td><td>дата:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> дата:2018&nbsp;&nbsp;дата:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Може't відкритий індекс Could not restore external indexes for stored query:<br> Не вдалося відновити зовнішні індекси для збереженого запиту:<br> ??? ??? Using current preferences. Використання поточних уподобань. Simple search Простий пошук History Історія <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Шпаргалка з мовою запитів. У випадку сумнівів: натисніть <b>Показати деталі запиту</b>. <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Зробити велику літеру, щоб приглушити розширення стему</td><td>Підлога</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Стерти Ctrl+S Ctrl+S Erase search entry Стерти вміст рядка запита Search Знайти Start query Почати запит Enter search terms here. Type ESC SPC for completions of current term. Введіть пошукові слова. Можна використовувати Esc-пробіл для доповнення. Choose search type. Оберіть тип пошуку. Show query history Показати історію запитів Enter search terms here. Введіть тут умови пошуку. Main menu Головне меню SearchClauseW SearchClauseW Пошуку CluseW Any of these будь-які слова All of these усі слова None of these без цих слів This phrase фраза Terms in proximity слова поблизу File name matching назва файлу Select the type of query that will be performed with the words Виберіть тип запиту, який буде зроблено по цих словах Number of additional words that may be interspersed with the chosen ones Кількість додаткових слів, що можуть бути між обраними In field В полі No field Без поля Any Будь-яке All всі None Без ефекту Phrase Фраза Proximity Наближення File name Ім'я файлу Snippets Snippets Сніпети X Ікс Find: Знайти: Next Наступна Prev Попередня SnippetsW Search Знайти <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Вибачте, в межах обмежень не було знайдено точного збігу. Можливо документ дуже великий, а генератор сніпетів загубив у лабіринті...</p> Sort By Relevance Сортувати за рівнем Sort By Page Сортувати за сторінкою Snippets Window Вікно сніпетів Find Знайти Find (alt) Знайти (альт) Find Next Знайти наступне Find Previous Знайти попереднє Hide Приховати Find next Знайти наступний Find previous Знайти попереднє Close window Закрити вікно Increase font size Збільшити розмір шрифту Decrease font size Зменшити розмір шрифту SortForm Date Дата Mime type Тип MIME SortFormBase Sort Criteria Критерії сортування Sort the Сортувати most relevant results by: кращих результатів за: Descending спаданням Close Закрити Apply Застосувати SpecIdxW Special Indexing Спеціальний індекс Do not retry previously failed files. Не намагайтеся повторити невдалі файли. Else only modified or failed files will be processed. Можливо оброблятимуться тільки змінені або невдалі файли. Erase selected files data before indexing. Видаляти дані обраних файлів перед індексуванням. Directory to recursively index Каталог з рекурсивним індексом Browse Перегляд Start directory (else use regular topdirs): Початковий каталог (інакше використовувати регулярні вершини): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Залиште порожнім, щоб вибрати всі файли. Ви можете використовувати кілька шаблонів, розділених пробілами.<br>Шаблон з вбудованими пробілами слід цитувати з подвійними лапками.<br>Можна використовувати лише якщо встановлено початкову ціль. Selection patterns: Шаблони виділення: Top indexed entity Верхній індексований об'єкт Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Директорія для рекурсивного індексу. Це має бути всередині звичайної індексованої області<br> як визначено в файлі конфігурації (пов’язано з текою). Retry previously failed files. Повторіть спробу невдалих файлів. Start directory. Must be part of the indexed tree. We use topdirs if empty. Початкова директорія. Повинно бути частиною індексованого дерева. Якщо порожні. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Запустити каталог. Якщо порожня, обов'язково має бути частиною індексованого дерева. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Файл виводу діагностики. Буде обрізаний і отримає діагностику індексації (причини, з яких файли не індексуються). Diagnostics file Файл діагностики SpellBase Term Explorer Навіґатор термінів &Expand &Розкрити Alt+E Alt+клавiша переходу &Close &Закрити Alt+C Alt+C Term Слово No db info. Немає інформації про db. Doc. / Tot. Документ. / Вт. Match Матч Case Звернення Accents Акценти SpellW Wildcards Шаблони Regexp Регвираз Spelling/Phonetic Напис/звучання Aspell init failed. Aspell not installed? Не вдалося запустити aspell. Воно взагалі встановлене? Aspell expansion error. Помилка розкриття aspell. Stem expansion Розкриття словоформ error retrieving stemming languages помилка здобування списку мов No expansion found Розкриття не знайдене Term Слово Doc. / Tot. Документ. / Вт. Index: %1 documents, average length %2 terms Індекс: %1 документів, середня довжина %2 термінів Index: %1 documents, average length %2 terms.%3 results Index: %1 документів, середня довжина %2 умови.%3 результатів %1 results %1 результатів List was truncated alphabetically, some frequent Список промальовувався по алфавіту, деякі часті terms may be missing. Try using a longer root. термінів можуть бути відсутні. Спробуйте використати більш довгий root. Show index statistics Показати статистику індексів Number of documents Кількість документів Average terms per document Середнє умови на документ Smallest document length Найменша довжина документа Longest document length Найдовша довжина документа Database directory size Розмір теки в базі даних MIME types: Типи MIME: Item Елемент Value Цінність Smallest document length (terms) Найменша довжина документа (терміни) Longest document length (terms) Довга довжина документа (терміни) Results from last indexing: Результати з останнього індексування: Documents created/updated Документи створено/оновлено Files tested Файлів перевірено Unindexed files Неіндексовані файли List files which could not be indexed (slow) Список файлів, які не вдалося індексувати (повільно) Spell expansion error. Помилка розширення правопису. Spell expansion error. Помилка розширення заклинання. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index Обрана тека не схожа на індекс Xapian This is the main/local index! Це основний/локальний індекс! The selected directory is already in the index list Обрана тека вже у списку індексів Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Оберіть теку із індексом Xapian (наприклад, /home/приятель/.recoll/xapiandb) error retrieving stemming languages помилка здобування списку мов Choose Перегляд Result list paragraph format (erase all to reset to default) Формат списку результатів (видалити всі параметри, щоб скинути до типових) Result list header (default is empty) Заголовок списку результатів (типово порожній) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Оберіть директорію конфігурації або теку індексу xapian (наприклад, /home/me/.recoll або /home/me/.recoll/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Вибраний каталог виглядає як каталог конфігурації Recoll, але конфігурація не може бути прочитана At most one index should be selected Потрібно вибрати не більше одного індексу Cant add index with different case/diacritics stripping option Заборона додавання індексу з різними варіантами/діакритичними знаками Default QtWebkit font Default QtWebkit font Any term Будь-яке слово All terms Усі слова File name Ім'я файлу Query language Мова запиту Value from previous program exit Значення попереднього виходу з програми Context Контекст Description Опис Shortcut Ярлик Default Типово Choose QSS File Виберіть файл QSS Can't add index with different case/diacritics stripping option. Не вдається додати індекс з різним варіантом видалення регістру/діакритичних знаків. Light Світло Dark Темний System Система UIPrefsDialogBase User interface Інтерфейс Number of entries in a result page Кількість результатів на сторінку Result list font Шрифт списку результатів Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Відкриває діалог вибору шрифту списку результатів Reset Скинути Resets the result list font to the system default Повертає шрифт у типовий системний Auto-start simple search on whitespace entry. Починати простий пошук при введенні пробілу. Start with advanced search dialog open. Відкривати діалог складного пошуку при старті. Start with sort dialog open. Відкривати діалог сортування при старті. Search parameters Параметри пошуку Stemming language Мова словоформ Dynamically build abstracts Динамічно будувати конспекти Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Чи намагатися будувати конспекти для результатів пошуку, використовуючі контекст знайдених слів? Може працювати повільно для великих документів. Replace abstracts from documents Заміняти наявні у документах конспекти Do we synthetize an abstract even if the document seemed to have one? Чи робити новий конспект, навіть якщо якийсь вже є в документі? Synthetic abstract size (characters) Розмір синтетичного конспекту (у символах) Synthetic abstract context words Контекстних слів у конспекті External Indexes Зовнішні індекси Add index Додати індекс Select the xapiandb directory for the index you want to add, then click Add Index Оберіть потрібну теку із індексом Xapian та натисніть "Додати індекс" Browse Перегляд &OK &ОК Apply changes Застосувати зміни &Cancel &Відміна Discard changes Відмінити зміни Result paragraph<br>format string Рядок форматування<br>блоку результатів Automatically add phrase to simple searches Автоматично додавати фразу до простих пошуків A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Пошук [rolling stones] (2 слова) буде змінено на [rolling or stones or (rolling phrase 2 stones)]. Це може підняти результати, в яких пошукові слова зустрічаються саме в такій послідовності, як в запиті. User preferences Вподобання Use desktop preferences to choose document editor. Використовувати налаштування десктопу щодо редактору документів. External indexes Зовнішні індекси Toggle selected Переключити вибране Activate All Включити все Deactivate All Виключити все Remove selected Видалити вибране Remove from list. This has no effect on the disk index. Видалити зі списку. Не впливає на дисковий індекс. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Визначає формат для кожного блоку списку результатів. Використовуйте html-формат qt та схожі на printf заміни:<br>%A анотація<br> %D дата<br> %I назва піктограми<br> %K ключові слова (якщо є)<br> %L посилання перегляду та редагування<br> %M тип MIME<br> %N кількість результатів<br> %R релевантність<br> %S розмір<br> %T назва<br> %U URL<br> Remember sort activation state. Запам'ятати стан сортування. Maximum text size highlighted for preview (megabytes) Максимальний розмір тексту із підсвічуванням (Мб) Texts over this size will not be highlighted in preview (too slow). Тексти із розміром, більшим за вказаний, не буде підсвічено у попередньому перегляді (повільно). Highlight color for query terms Колір виділення ключових слів Prefer Html to plain text for preview. Віддавати перевагу HTML над текстом для перегляду. If checked, results with the same content under different names will only be shown once. Якщо увімкнене, результати с таким самим змістом та різними назвами буде показано не більше одного разу. Hide duplicate results. Ховати дублікати Choose editor applications Оберіть редактори Display category filter as toolbar instead of button panel (needs restart). Відображати фільтр категорій як панель інструментів замість панелі кнопок (потребує перезавантаження). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Слова в списку будуть автоматично перетворені на ext:xxx тверджень при введенні в мову запиту. Query language magic file name suffixes. Абонентський код назв файлів магічного типу. Enable Увімкнено ViewAction Changing actions with different current values Зміна дій із різними поточними значеннями Mime type Тип MIME Command Команда MIME type MIME-тип Desktop Default Типово для робочого стола Changing entries with different current values Зміна записів з різними поточними значеннями ViewActionBase File type Тип файлу Action Дія Select one or several file types, then click Change Action to modify the program used to open them Оберіть один або декілька типів файлів, потім натисніть "Змінити дію", щоб змінити програму для них Change Action Змінити дію Close Закрити Native Viewers Рідні переглядачі Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Виберіть один або кілька типів mime, потім натисніть "Змініть дію"<br>Ви також можете закрити це діалогове вікно і перевірити "Налаштування робочого столу"<br>на головній панелі, щоб проігнорувати цей список і використати налаштування робочого столу. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Виберіть один або кілька МІМЕ типів за допомогою елементів керування у нижній кадрі щоб змінити спосіб їх обробки. Use Desktop preferences by default Використовувати налаштування робочого столу за замовчуванням Select one or several file types, then use the controls in the frame below to change how they are processed Виберіть один або кілька типів файлів, а потім використовуйте параметри в кадрі нижче, щоб змінити їх обробку Exception to Desktop preferences Виключення до налаштувань робочого столу Action (empty -> recoll default) Дія (порожня -> Скинути за замовчуванням) Apply to current selection Застосувати до поточного виділення Recoll action: Дія при відновленні: current value поточне значення Select same Виберіть те ж саме <b>New Values:</b> <b>Нові значення:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Значення - це командний рядок, який потрібно виконати. Підстановки: %s: рядок пошуку; %p: номер сторінки; <br>%f: назва файлу документа. F1 для отримання додаткової довідки. Webcache Webcache editor Редактор Webcache Search regexp Шукати регулярний вираз TextLabel Текстова мітка WebcacheEdit Copy URL Копіювати посилання Unknown indexer state. Can't edit webcache file. Невідомий стан індексатора. Може'редагувати файл веб-кешу. Indexer is running. Can't edit webcache file. Indexer запущений. Може'редагувати файл webcache Delete selection Видалити вибране Webcache was modified, you will need to run the indexer after closing this window. Веб-кеш було змінено, вам потрібно буде запустити індексатор після закриття цього вікна. Save to File Зберегти до файлу File creation failed: Створення файлу не вдалося: Maximum size %1 (Index config.). Current size %2. Write position %3. Максимальний розмір %1 (Конфігурація індексу). Поточний розмір %2. Позиція запису %3. WebcacheModel MIME MIME Url URL-адреса Date Дата Size Розмір URL Адреса WinSchedToolW Error Помилка Configuration not initialized Конфігурацію не ініціалізовано <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> Command already started Команда вже розпочата Recoll Batch indexing Повторна індексація батчів Start Windows Task Scheduler tool Запустити інструмент планувальника завдань Windows Could not create batch file Не вдалося створити пакетний файл confgui::ConfBeaglePanelW Steal Beagle indexing queue Черга індексування крадіжки Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle MUST не запущено. Дозволяє обробляти черги звірів для індексування історії Firefox.<br>(Вам також слід встановити плагін для Firefox Beagle) Web cache directory name Ім'я каталогу веб-кешу The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Ім'я каталогу, де зберігати кеш для відвідуваних веб-сторінок.<br>Шлях шлях виконується відносно каталогу налаштувань. Max. size for the web cache (MB) Макс. розмір для веб-кешу (МБ) Entries will be recycled once the size is reached Записи будуть перероблені після досягнення розміру Web page store directory name Ім'я каталогу веб-сторінок магазину The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Ім'я каталогу, де зберігати відвідані веб-сторінки.<br>Шлях не абсолютний шлях відноситься до каталогу налаштувань. Max. size for the web store (MB) Макс. розмір для веб-магазину (МБ) Process the WEB history queue Обробити чергу історії WEB Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Вмикає індексацію відвіданих сторінок.<br>(вам також потрібно встановити плагін для Firefox) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Записів буде перероблено після досягнення розміру.<br>Збільшення розміру дійсно має сенс, бо зменшення значення не призведе до скорочення існуючого файлу (лише відходів в кінці). confgui::ConfIndexW Can't write configuration file Неможливо записати файл конфіґурації Recoll - Index Settings: Recoll - Параметри індексу: confgui::ConfParamFNW Browse Перегляд Choose Перегляд confgui::ConfParamSLW + + - - Add entry Додати запис Delete selected entries Видалити виділені записи ~ ~ Edit selected entries Редагувати вибрані записи confgui::ConfSearchPanelW Automatic diacritics sensitivity Автоматична чутливість діакритики <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Автоматично викликати чутливість до діакриту, якщо пошуковий термін має акцентовані символи (не в unac_except_trans). Можливо, вам потрібно використовувати мову запитів і модифікатор <i>D</i> щоб вказати чутливість до діакритики. Automatic character case sensitivity Автоматична чутливість регістру символів <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Автоматично чутливість до регістру ієрогліфів, якщо запис має символи у верхньому регістрі, окрім першої позиції. Також вам потрібно використовувати мову запиту і модифікатор <i>C</i> щоб вказати чутливість до символів . Maximum term expansion count Максимальний термін розширення <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Максимальна кількість розширення для одного строку (наприклад, при використанні шаблонів). За замовчуванням 10 000 є розумним і буде уникати запитів, які з'являються замороженими, тоді як двигун рухається в цьому списку. Maximum Xapian clauses count Максимальна кількість заяв Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Максимальна кількість елементарних застережень, які ми додаємо до одного Xapian запиту. У деяких випадках результатом строкового розширення може бути багатократне і ми хочемо уникати використання надмірної пам'яті. Значення за замовчуванням 100 000 має бути достатньо високим у більшості випадків і сумісним з поточними типовими конфігураціями обладнання. confgui::ConfSubPanelW Global Глобальні Max. compressed file size (KB) Межа розміру стиснених файлів (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Це значення встановлює поріг розміру стиснених файлів, більші за нього не буде опрацьовано. -1 вимикає ліміт, 0 вимикає декомпресію. Max. text file size (MB) Макс. розмір текстового файлу (МБ) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Це значення встановлює поріг, після якого текстові файли не будуть оброблятися. Встановіть в -1 для відсутності ліміту. Це за винятком файлів monster журналів з індексу. Text file page size (KB) Розмір текстової сторінки (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Якщо це значення встановлено (не дорівнює -1), текстові файли будуть розділені у чанках такого розміру для індексування. Це допоможе шукати дуже великі текстові файли (тобто файли журналу). Max. filter exec. time (S) Макс. виконання фільтру. час (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Зовнішні фільтри працюють довше, ніж це буде перервано. Це для рідкісного випадку (i: postscript) де документ може спричинити фільтр до циклу -1 без обмежень. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Зовнішні фільтри працюють довше, ніж це буде перервано. Це для рідкісного випадку (i: postscript) де документ може спричинити фільтр для циклу. Встановіть -1 для відсутності ліміту. Only mime types Лише типи МІМЕ An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Виключний список індексованих mime-типів.<br>Додатково нічого не буде індексовано. Зазвичай, порожній і неактивний Exclude mime types Виключити типи МІМЕ Mime types not to be indexed Типи MIME не індексуються Max. filter exec. time (s) Макс. виконання фільтрів. Час (ів) confgui::ConfTabsW Apply Застосувати confgui::ConfTopPanelW Top directories Верхні теки The list of directories where recursive indexing starts. Default: your home. Список тек, з яких починається рекурсивне індексування. Типово: домашня тека. Skipped paths Пропускати шляхи These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Це назви тек, у які індексування не потрапить.<br> Може містити шаблони. Має співпадати із шляхами, що бачить індексатор (наприклад, якщо topdirs містить '/home/me' та '/home' є посиланням на '/usr/home', то вірний запис буде '/home/me/tmp*', а не '/usr/home/me/tmp*') Stemming languages Мови зі словоформами The languages for which stemming expansion<br>dictionaries will be built. Мови, для яких буде побудовано<br>словники розкриття словоформ. Log file name Файл журналу The file where the messages will be written.<br>Use 'stderr' for terminal output Файл, куди підуть повідомлення.<br>'stderr' для терміналу Log verbosity level Докладність журналу This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Встановити обсяг повідомлень,<br>від помилок до даних зневадження. Index flush megabytes interval Інтервал скидання індексу (Мб) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Скільки даних буде проіндексовано між скиданнями індексу на диск.<br>Допомагає контролювати використання пам'яті індексатором. Типово: 10Мб Max disk occupation (%) Максимальне використання диску (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Відсоток зайнятого диску, коли індексування буде зупинено (щоб уникнути заповнення доступного простору).<br>Типово: 0 (без ліміту). No aspell usage Не використовувати aspell Aspell language Мова aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Мова словника aspell. Має виглядати як 'en' або 'uk'...<br>Якщо не встановлене, буде використане оточення (локаль), що зазвичай робить. Щоб з'ясувати, що маємо на системі, наберіть 'aspell config' та перегляньте файли .dat у теці 'data-dir'. Database directory name Тека бази даних The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Назва теки, де міститься індекс<br>Відносний шлях буде трактовано відносно теки конфіґурації. Типово: 'xapiandb'. Use system's 'file' command Використовувати системну 'file' Use the system's 'file' command if internal<br>mime type identification fails. Використовувати команду 'file' з системи, коли внутрішнє<br>визначення типу MIME дає збій. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Вимикає використання aspell для генерації наближень у написання в навіґаторі термінів.<br>Корисне, коли aspell відсутній або зламаний. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Мова аспельного словника. Це має виглядати на 'en' або 'fr' . .<br>Якщо це значення не встановлено, то NLS середовище буде використане для обчислення, що зазвичай працює. Щоб отримати уявлення про те, що було встановлено на вашій системі, введіть 'аюту' і подивіться на . у папці 'data-dir' The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Ім'я каталогу, де зберігати індекс<br>каталог, не є абсолютний шлях відноситься до каталогу конфігурації. За замовчуванням 'xapiandb'. Unac exceptions Юнацькі винятки <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Це винятки з механізму unac, який, за замовчуванням, видаляє всі діакритики, і виконує канонічну декомпозицію. Ви можете перевизначити неакцентовані на деякі символи, в залежності від вашої мови, і вказати додаткові декомпозиції. . для лігатур. При відрізах першого символу - це вихідний, а решта - переклад. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Це шляхи каталогів, в яких не буде входити індексація.<br>Елементи контуру, які можуть містити шаблони. Записи повинні відповідати шляхам індексатор (наприклад, якщо верхні каталоги включають '/home/me' і '/будинок' насправді посилання на '/usr/home'правильний запис у пропущеному шляху буде '/home/me/tmp*', не '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Максимальна зайнятість диску (%, 0 - без обмежень) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Це відсоток використання диску - загальний обсяг диску, а не розмір індексу - при якому індексація зазнає невдачі та зупинки.<br>Стандартне значення 0 видаляє будь-які межі. uiPrefsDialogBase User preferences Вподобання User interface Інтерфейс Number of entries in a result page Кількість результатів на сторінку If checked, results with the same content under different names will only be shown once. Якщо увімкнене, результати с таким самим змістом та різними назвами буде показано не більше одного разу. Hide duplicate results. Ховати дублікати Highlight color for query terms Колір виділення ключових слів Result list font Шрифт списку результатів Opens a dialog to select the result list font Відкриває діалог вибору шрифту списку результатів Helvetica-10 Helvetica-10 Resets the result list font to the system default Повертає шрифт у типовий системний Reset Скинути Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Визначає формат для кожного блоку списку результатів. Використовуйте html-формат qt та схожі на printf заміни:<br>%A анотація<br> %D дата<br> %I назва піктограми<br> %K ключові слова (якщо є)<br> %L посилання перегляду та редагування<br> %M тип MIME<br> %N кількість результатів<br> %R релевантність<br> %S розмір<br> %T назва<br> %U URL<br> Result paragraph<br>format string Рядок форматування<br>блоку результатів Texts over this size will not be highlighted in preview (too slow). Тексти із розміром, більшим за вказаний, не буде підсвічено у попередньому перегляді (повільно). Maximum text size highlighted for preview (megabytes) Максимальний розмір тексту із підсвічуванням (Мб) Use desktop preferences to choose document editor. Використовувати налаштування десктопу щодо редактору документів. Choose editor applications Оберіть редактори Display category filter as toolbar instead of button panel (needs restart). Відображати фільтр категорій як панель інструментів замість панелі кнопок (потребує перезавантаження). Auto-start simple search on whitespace entry. Починати простий пошук при введенні пробілу. Start with advanced search dialog open. Відкривати діалог складного пошуку при старті. Start with sort dialog open. Відкривати діалог сортування при старті. Remember sort activation state. Запам'ятати стан сортування. Prefer Html to plain text for preview. Віддавати перевагу HTML над текстом для перегляду. Search parameters Параметри пошуку Stemming language Мова словоформ A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Пошук [rolling stones] (2 слова) буде змінено на [rolling or stones or (rolling phrase 2 stones)]. Це може підняти результати, в яких пошукові слова зустрічаються саме в такій послідовності, як в запиті. Automatically add phrase to simple searches Автоматично додавати фразу до простих пошуків Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Чи намагатися будувати конспекти для результатів пошуку, використовуючі контекст знайдених слів? Може працювати повільно для великих документів. Dynamically build abstracts Динамічно будувати конспекти Do we synthetize an abstract even if the document seemed to have one? Чи робити новий конспект, навіть якщо якийсь вже є в документі? Replace abstracts from documents Заміняти наявні у документах конспекти Synthetic abstract size (characters) Розмір синтетичного конспекту (у символах) Synthetic abstract context words Контекстних слів у конспекті The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Слова в списку будуть автоматично перетворені на ext:xxx тверджень при введенні в мову запиту. Query language magic file name suffixes. Абонентський код назв файлів магічного типу. Enable Увімкнено External Indexes Зовнішні індекси Toggle selected Переключити вибране Activate All Включити все Deactivate All Виключити все Remove from list. This has no effect on the disk index. Видалити зі списку. Не впливає на дисковий індекс. Remove selected Видалити вибране Click to add another index directory to the list Натисніть, щоб додати до списку іншу теку індексу Add index Додати індекс Apply changes Застосувати зміни &OK &ОК Discard changes Відмінити зміни &Cancel &Відміна Abstract snippet separator Розділювач фрагментів Use <PRE> tags instead of <BR>to display plain text as html. Використовуйте теги <PRE> замість <BR>для відображення простого тексту в якості html. Lines in PRE text are not folded. Using BR loses indentation. Рядки в тексті PRE не складені. Використання BR втрачає відступи. Style sheet Таблиця стилів Opens a dialog to select the style sheet file Відкриває діалог для вибору файлу таблиці стилів Choose Перегляд Resets the style sheet to default Скинути таблицю стилів на типовий Lines in PRE text are not folded. Using BR loses some indentation. Рядки в тексті PRE не складені. Використання BR втрачає деякі відступи. Use <PRE> tags instead of <BR>to display plain text as html in preview. Використовуйте <PRE> теги замість <BR>для відображення простого тексту в якості html у попередньому перегляді. Result List Підсумки Edit result paragraph format string Редагувати результат рядка формату абзац Edit result page html header insert Редагувати заголовок HTML шаблону результату сторінки Date format (strftime(3)) Date format (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Відсоток частоти порогу, протягом якого ми не використовуємо терміни в автофразі. Частотні терміни є досить складною проблемою з фраз. Пропущені терміни, збільшують фразу "пошкодження" і зменшують ефективність автофрази-паролю Значення, за замовчуванням 2 (percent). Autophrase term frequency threshold percentage Відсоток частоти автофрази, Plain text to HTML line style Простий текст до стилю HTML рядка Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Рядки в тексті PRE не складені. Використання BR втрачає деякі відступи. PRE + стиль обрухту може бути тим, що ви хочете. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + загортання Exceptions Винятки Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Типи Mime, які не слід передавати у xdg-відкриття, навіть коли "Використовувати налаштування робочого стола" встановлено.<br> Корисно для того, щоб передати номер сторінки та пошукові параметри до, наприклад evince. Disable Qt autocompletion in search entry. Вимкнути автодоповнення Qt в пошуковому записі. Search as you type. Пошук по вашому типу. Paths translations Переклади шляхів Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Натисніть, щоб додати іншу теку для індексу до списку. Ви можете вибрати теку з конфігурацією Recoll чи індексом Xapa. Snippets window CSS file Сніпети віконного файлу CSS Opens a dialog to select the Snippets window CSS style sheet file Відкриває діалогове вікно для вибору файлу таблиці стилів CSS Resets the Snippets window style Скинути стиль вікна сніпетів Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Оберіть, чи відображаються фільтри документів як радіо, панель інструментів combobox або меню. Document filter choice style: Стиль фільтру документа: Buttons Panel Панель кнопок Toolbar Combobox Комбокс з інструментами Menu Меню Show system tray icon. Показувати піктограму на панелі завдань. Close to tray instead of exiting. Закривати до трею замість виходу. Start with simple search mode Почніть з простого пошуку Show warning when opening temporary file. Показувати застереження при відкритті тимчасового файлу. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Стиль користувача, який буде застосовуватися до вікна сніпетів.<br> Примітка: заголовок сторінки результату також включений у заголовок вікна сніпетів. Synonyms file Синонім файлу Highlight CSS style for query terms Виділяти стиль CSS для умов запиту Recoll - User Preferences Recoll - Налаштування користувача Set path translations for the selected index or for the main one if no selection exists. Встановити переклад шляхів для вибраного індексу або головного, якщо не існує вибору. Activate links in preview. Активувати посилання в режимі попереднього перегляду. Make links inside the preview window clickable, and start an external browser when they are clicked. При натисканні на вікно попереднього перегляду, відбуваються посилання для запуску зовнішнього браузера. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Умови запиту виділені в результаті. <br>Може, спробуйте щось на зразок "color:red;background:жовтий" для чогось більше, ніж за замовчуванням синій... Start search on completer popup activation. Почати пошук по завершенню спливаючого вікна активації. Maximum number of snippets displayed in the snippets window Максимальна кількість сніпетів, які відображаються у вікні сніпетів Sort snippets by page number (default: by weight). Сортування сніпетів за номером сторінки (за замовчуванням: за вагою). Suppress all beeps. Придушити всіх гусень. Application Qt style sheet Таблиця стилів додатку Limit the size of the search history. Use 0 to disable, -1 for unlimited. Обмежити розмір історії пошуку. Використовуйте 0, щоб вимкнути, -1 для необмежених. Maximum size of search history (0: disable, -1: unlimited): Максимальний розмір історії пошуку (0: вимкнути, -1: необмежено): Generate desktop notifications. Згенерувати сповіщення на робочому столі. Misc Інше Work around QTBUG-78923 by inserting space before anchor text Робота над QTBUG-78923 шляхом вставлення простору перед якорем тексту Display a Snippets link even if the document has no pages (needs restart). Відображати посилання на сніпети, навіть якщо в документі немає сторінок (потребує перезапуску). Maximum text size highlighted for preview (kilobytes) Максимальний розмір тексту виділений для попереднього перегляду (кілобайт) Start with simple search mode: Почніть з простого пошуку: Hide toolbars. Приховати панелі інструментів. Hide status bar. Сховати рядок стану. Hide Clear and Search buttons. Приховати кнопки очищення та пошуку. Hide menu bar (show button instead). Приховати панель меню (замість цього показувати кнопку). Hide simple search type (show in menu only). Приховати тип простого пошуку (показувати лише в меню). Shortcuts Гарячі клавіші Hide result table header. Сховати заголовок таблиці результатів. Show result table row headers. Показати заголовки рядків результату. Reset shortcuts defaults Скинути налаштування ярликів Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Вимкнути комбінації клавіш Ctrl+[0-9]/[a-z] для перемикання до рядків таблиці. Use F1 to access the manual Для ручного доступу до F1 скористайтеся функцією Hide some user interface elements. Сховати деякі елементи інтерфейсу користувача. Hide: Сховати: Toolbars Панелі інструментів Status bar Панель стану Show button instead. Показати кнопку замість. Menu bar Рядок меню Show choice in menu only. Показати лише вибір у меню. Simple search type Простий тип пошуку Clear/Search buttons Кнопки Очистити/Пошук Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Вимкніть скорочення Ctrl+[0-9]/Shift+[a-z] для переходу до рядків таблиці. None (default) Жоден (за замовчуванням) Uses the default dark mode style sheet Використовує стандартний стильовий аркуш темного режиму. Dark mode Темний режим Choose QSS File Виберіть файл QSS To display document text instead of metadata in result table detail area, use: Для відображення тексту документа замість метаданих у детальній області таблиці результатів, використовуйте: left mouse click лівий клік мишею Shift+click Натисніть Shift+клацання. Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Відкриває діалогове вікно для вибору файлу таблиці стилів.<br>Перегляньте /usr/share/recoll/examples/recoll[-dark].qss для прикладу. Result Table Таблиця результатів Do not display metadata when hovering over rows. Не відображати метадані при наведенні курсора на рядки. Work around Tamil QTBUG-78923 by inserting space before anchor text Вирішити проблему з Tamil QTBUG-78923, вставивши пробіл перед текстом якоря The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Помилка призводить до відображення дивних круглих символів всередині виділених тамільських слів. Обхідний шлях вставляє додатковий пробіл, що, здається, виправляє проблему. Depth of side filter directory tree Глибина дерева каталогів фільтра бічної панелі Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Коефіцієнт масштабування для інтерфейсу користувача. Корисно, якщо значення за замовчуванням не підходить для вашого роздільної здатності екрану. Display scale (default 1.0): Масштаб відображення (за замовчуванням 1.0): Automatic spelling approximation. Автоматичне наближення за написанням. Max spelling distance Максимальна відстань написання Add common spelling approximations for rare terms. Додайте загальноприйняті приблизні написання для рідкісних термінів. Maximum number of history entries in completer list Максимальна кількість записів історії в списку автодоповнення Number of history entries in completer: Кількість записів історії в автодоповнювачі: Displays the total number of occurences of the term in the index Показує загальну кількість входжень терміну в індексі. Show hit counts in completer popup. Показати кількість збігів у спливаючому вікні автодоповнення. Prefer HTML to plain text for preview. Вибір HTML для попереднього перегляду, а не простого тексту. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Дивіться документацію Qt QDateTimeEdit. Наприклад, yyyy-MM-dd. Залиште порожнім, щоб використовувати формат за замовчуванням Qt/System. Side filter dates format (change needs restart) Формат дати бічного фільтра (зміна потребує перезапуску) If set, starting a new instance on the same index will raise an existing one. Якщо встановлено, запуск нового екземпляра на тому ж індексі підніме існуючий. Single application Одне додаток Set to 0 to disable and speed up startup by avoiding tree computation. Встановіть на 0, щоб вимкнути та прискорити запуск, уникнувши обчислення дерева. The completion only changes the entry when activated. Завершення змінює запис лише при активації. Completion: no automatic line editing. Завершення: відсутнє автоматичне редагування рядка. Interface language (needs restart): Мова інтерфейсу (потрібен перезапуск): Note: most translations are incomplete. Leave empty to use the system environment. Примітка: більшість перекладів неповні. Залиште порожнім, щоб використовувати системне середовище. Preview Перегляд Set to 0 to disable details/summary feature Встановіть 0, щоб вимкнути функцію деталей/зведення. Fields display: max field length before using summary: Поля відображення: максимальна довжина поля перед використанням узагальнення: Number of lines to be shown over a search term found by preview search. Кількість рядків, які будуть показані над знайденим пошуковим терміном за допомогою попереднього перегляду. Search term line offset: Зміщення рядка пошукового терміну: Wild card characters *?[] will processed as punctuation instead of being expanded Дикий символ *?[] буде оброблений як розділові знаки замість розширення. Ignore wild card characters in ALL terms and ANY terms modes Ігноруйте символи допуску в усіх режимах термінів та будь-яких термінів Color scheme Кольорова схема When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. При відображенні HTML у темному режимі, спробуйте використовувати темний фон (і світлі кольори). Це суперечить багатьом документам, які перевизначать наші світлі налаштування своїм власним CSS (темним) переднім кольором, що призводить до нерозбірливого документа, тому це вимкнено за замовчуванням. Use dark background when displaying HTML in dark mode. Використовуйте темний фон при відображенні HTML у темному режимі. recoll-1.43.12/qtgui/i18n/recoll_ja.ts0000644000175000017500000055005515124431112016662 0ustar dockesdockes ActSearchDLG Menu search メニュー検索 AdvSearch All clauses 全ての条件 Any clause 任意の条件 media マルチメディア other その他 Bad multiplier suffix in size filter ファイルサイズフィルターのサフィックスが正しくありません text テキスト spreadsheet 表計算シート (spreadsheets) presentation プレゼンテーション message メール(メッセージ) texts テキスト spreadsheets 表計算シート (spreadsheets) Advanced Search 高度な検索 Load next stored search 次の保存済み検索の呼出し Load previous stored search 前の保存済み検索の呼出し AdvSearchBase Advanced search 高度な検索 Search for <br>documents<br>satisfying: Search for <br>documents<br>satisfying: Delete clause 条項を削除 Add clause 条項を追加 Restrict file types 制限付きファイルタイプ Check this to enable filtering on file types ファイル形式で検索するときはここにチェック By categories カテゴリー毎 Check this to use file categories instead of raw mime types チェックして、MIMEタイプの代わりにファイルカテゴリを使用する Save as default デフォルトとして保存 Searched file types 検索されたファイルタイプ All ----> 全て移動→ Sel -----> 選択移動→ <----- Sel ←選択移動 <----- All ←全て移動 Ignored file types 無視されたファイルタイプ Enter top directory for search 検索するTOPディレクトリを入力 Browse ブラウズ Restrict results to files in subtree: 結果のファイルをこのサブディレクトリツリーに制限します: Start Search 検索開始 Close 閉じる All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. 右側の空白でないフィールドはすべて、論理AND("全条件"オプション)または論理OR("任意条件"オプション)に従って結合されます。<br>“任意”“全部”和“无”三种字段类型都接受输入简单词语和双引号引用的词组的组合。<br>空的输入框会被忽略。 Invert 条件を反転 Minimum size. You can use k/K,m/M,g/G as multipliers 最小サイズ。サブツリー内のファイルへの乗数結果として k/K,m/M,g/G を使用できます Min. Size 最小サイズ Maximum size. You can use k/K,m/M,g/G as multipliers 最大サイズ。サブツリー内のファイルへの乗数結果として k/K,m/M,g/G を使用できます Max. Size 最大サイズ Filter フィルター From From To To Check this to enable filtering on dates チェックして、日付によるフィルタリングを有効にする Filter dates 日付でフィルター Find 検索 Check this to enable filtering on sizes チェックして、サイズによるフィルタリングを有効にする Filter sizes サイズでフィルター Filter birth dates 生年月日をフィルターする ConfIndexW Can't write configuration file configuration を書き込めません Global parameters グローバル・パラメータ Local parameters ローカル・パラメータ Search parameters 検索パラメータ Top directories トップ・ディレクトリ The list of directories where recursive indexing starts. Default: your home. 再帰的なインデックス作成を開始するディレクトリ Default:your home. Skipped paths Skipped PATH These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Stemming languages Stemming languages Log file name Logファイル名 The file where the messages will be written.<br>Use 'stderr' for terminal output プログラムより出力されたメッセージは、このファイルに保存されます。<br>ターミナル出力は 'stderr' を使用 Log verbosity level Log冗長レベル This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. この値は、出力メッセージ量を<br>エラーのみ 〜 大量のデバッグデータまで調整します。 Index flush megabytes interval インデックス更新(MB 間隔) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB この値は、インデックスデータが少し蓄積された場合にのみデータをハードディスクに更新することです。 <br>インデックス作成プロセスのメモリ使用量を制御するために使用されます。 Default: 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. この値は、インデックス作成が失敗したときに停止するディスク使用量のパーセンテージです(これは合計ディスク使用量であり、インデックスサイズではありません)。 <br>デフォルト値の0は、すべての制限を削除します。 No aspell usage aspell を使用しない Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. エクスプローラーでaspellを使用して、同様のスペルの単語を生成することは禁止されています。 <br>このオプションは、aspellがインストールされていない場合、または正しく機能していない場合に使用します。 Aspell language Aspell语言 Database directory name Database ディレクトリ名 The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Unac exceptions Unac exceptions <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Web page store directory name Web page store directory name The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. 訪れたWebページのコピーを保存するディレクトリ名 <br>非絶対パスは、構成ディレクトリに対して相対的に取得されます。 Max. size for the web store (MB) Max. size for the web store (MB) Max. size for the web store (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Automatic diacritics sensitivity 大文字・小文字を自動判別 <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. Automatic character case sensitivity 文字の大文字・小文字の区別を自動的に調整 <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. Maximum term expansion count Maximum term expansion count <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. Maximum Xapian clauses count Xapian条項の最大数 <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Indexer log file name インデクサーログファイル名 If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Web history WEB履歴 Process the Web history queue Web履歴キューを処理 Note: old pages will be erased to make space for new ones when the maximum size is reached Note: 最大サイズに達すると、古いページが消去され、新しいページ用のスペースが確保されます Page recycle interval <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Start folders フォルダを開始 The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. インデックス化するフォルダ/ディレクトリのリスト。サブフォルダは再帰的に処理されます。デフォルト:ホームディレクトリ。 Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) ディスクがいっぱいになったときにインデックスを停止する閾値のパーセンテージ(例:90%で停止、0または100は制限なし) Browser add-on download folder ブラウザのアドオンダウンロードフォルダ Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) この設定は、Webブラウザのアドオン設定で「ダウンロードサブディレクトリ」パラメータを設定した場合にのみ設定してください。<br>この場合、ディレクトリへの完全なパスを指定する必要があります(例:/home/[me]/Downloads/my-subdir)。 Store some GUI parameters locally to the index インデックスにいくつかのGUIパラメータをローカルに保存します。 <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index <p>GUIの設定は通常、すべてのインデックスに有効なグローバルファイルに保存されます。このパラメータを設定すると、結果テーブルのセットアップなど、一部の設定がインデックスに特化します。 Suspend the real time indexer when running on battery バッテリー駆動時にリアルタイムインデクサーを一時停止します。 The indexer will wait for a return on AC and reexec itself when it happens インデクサーはACの返信を待ち、それが起こったときに自分自身を再実行します。 (by default, aspell suggests mispellings when a query has no results). (デフォルトでは、クエリに結果がない場合、aspellはスペルミスを提案します)。 The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. インデックス化されるフォルダ/ディレクトリのリストと、そのサブフォルダを再帰的に表示します。<br>「〜」文字はホームディレクトリに展開され、デフォルトの初期値です。 (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types MIME形式のみ An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive インデックス付けされたmimeタイプの排他的なリスト。<br>他にインデックス付けされるものはありません。 通常は空白で非アクティブ Exclude mime types MEME形式を除外 Mime types not to be indexed MIMEタイプはインデックス登録されません Max. compressed file size (KB) 圧縮ファイルの最大サイズ(KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. この値は、それを超えると圧縮ファイルが処理されないしきい値を設定します。 制限がない場合は -1 に設定し、解凍がない場合は 0 に設定します。 Max. text file size (MB) 最大テキストファイルサイズ(MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. この値は、それを超えるとテキストファイルが処理されないしきい値を設定します。 制限なしの場合は -1 に設定します。 モンスターログファイルをインデックスから除外するためのものです。 Text file page size (KB) テキストファイル・頁サイズ(KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). この値が設定されている場合( -1 に等しくない場合)、テキストファイルはインデックス作成のためにこのサイズのチャンクに分割されます。 これは、非常に大きなテキストファイル(ログファイルなど)の検索に役立ちます。 Max. filter exec. time (s) 最大フィルター実行時間(秒) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. これより長く動作する外部フィルターは中止されます。 これは、ドキュメントによってフィルターがループする可能性があるまれなケース(つまり、ポストスクリプト)の場合です。 制限なしの場合は-1に設定します。 Global Global ConfigSwitchDLG Switch to other configuration 他の設定に切り替える ConfigSwitchW Choose other 他を選択してください。 Choose configuration directory 構成ディレクトリを選択してください CronToolW Cron Dialog Cronダイアログ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Days of week (* or 0-7, 0 or 7 is Sunday) Hours (* or 0-23) 時間 (* or 0-23) Minutes (0-59) 分 (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> Enable 有効 Disable 無効 It seems that manually edited entries exist for recollindex, cannot edit crontab recoll-index用に手動で編集されたエントリが存在するようです。crontabを編集できません Error installing cron entry. Bad syntax in fields ? cronエントリのインストール中にエラーが発生しました。 フィールドの構文が間違っていませんか? EditDialog Dialog ダイアログ EditTrans Source path Source path Local path Local path Config error Config error Original path Original path Path in index インデックス内のパス Translated path 翻訳されたパス EditTransBase Path Translations Path Translations Setting path translations for Setting path translations for Select one or several file types, then use the controls in the frame below to change how they are processed 1つまたは複数のファイルタイプを選択し、下のフレームのコントロールを使用して、それらの処理方法を変更します Add 追加 Delete 削除 Cancel キャンセル Save 保存 FirstIdxDialog First indexing setup 最初のインデックス設定 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> Indexing configuration インデックス設定 This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. これにより、インデックスを作成するディレクトリや、除外されたファイルのパスや名前、デフォルトの文字セットなどの他のパラメータを調整できます。 Indexing schedule インデックス・スケジュール This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). これにより、バッチインデックスとリアルタイムインデックスのどちらかを選択し、バッチインデックスの自動スケジュールを設定できます(cronを使用). Start indexing now 今すぐインデックス作成を開始 FragButs %1 not found. %1 が見つかりません。 %1: %2 %1: %2 Query Fragments Query 断片 IdxSchedW Index scheduling setup インデックス・スケジュール設定 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> Cron scheduling Cronスケジューリング The tool will let you decide at what time indexing should run and will install a crontab entry. このツールを使用すると、インデックス作成を実行するタイミングを決定し、crontabエントリをインストールできます。 Real time indexing start up リアルタイム・インデックス開始 Decide if real time indexing will be started when you log in (only for the default index). ログイン時にリアルタイムのインデックス作成を開始するかどうかを決定します(デフォルトのインデックスに対してのみ有効)。 ListDialog Dialog ダイアログ GroupBox グループボックス Main No db directory in configuration 環境設定にDatabaseディレクトリがありません "history" file is damaged, please check or remove it: "history"ファイルが損傷しています。確認もしくは削除してください。: Needs "Show system tray icon" to be set in preferences! 設定で「システムトレイアイコンを表示」を設定する必要があります! PTransEdit Path in index インデックス内のパス Translated path 翻訳されたパス Config error Config error Original path Original path Local path Local path PTransEditBase Path Translations Path Translations Select one or several file types, then use the controls in the frame below to change how they are processed 1つまたは複数のファイルタイプを選択し、下のフレームのコントロールを使用して、それらの処理方法を変更します Add 追加 Delete 削除 Cancel キャンセル Save 保存 Preview Cancel キャンセル Missing helper program: 補助プログラム(helper)が見つかりません: Can't turn doc into internal representation for ドキュメントを内部表現に変換できません Creating preview text プレビューテキストを作成 Loading preview text into editor プレビューテキストをエディターにロード中 &Search for: 検索(&S): &Next 次(&N) &Previous 前(&P) Clear 消去(Clear) Match &Case Match &Case Form Form Tab 1 Tab 1 Open 開く Canceled キャンセル Error loading the document: file missing. ドキュメント・ロードエラー:ファイルがありません。 Error loading the document: no permission. ドキュメント・ロードエラー:許可がありません。 Error loading: backend not configured. ロードエラー:backendが構成されていません。 Error loading the document: other handler error<br>Maybe the application is locking the file ? ドキュメント読み込みエラー:他ハンドラーのエラー<br>アプリケーションがファイルをロックしている可能性? Error loading the document: other handler error. ドキュメントの読み込みエラー:その他のハンドラーエラー. <br>Attempting to display from stored text. <br>保存されたテキストから表示中。 Could not fetch stored text 保存されたテキストを取得できません Previous result document 前の結果ドキュメント Next result document 次の結果ドキュメント Preview Window プレビュー・ウィンドウ Close tab タブを閉じる Close preview window プレビューウィンドウを閉じる Show next result 次の結果を表示 Show previous result 前の結果を表示 Print 印刷 PreviewTextEdit Show fields フィールド表示 Show main text 主テキストを表示 Print 印刷 Print Current Preview 現在のプレビューを印刷 Show image イメージを表示 Select All 全て選択 Copy コピー Save document to file ドキュメントをファイルに保存 Fold lines ワードラップ Preserve indentation インデントを維持 Open document ドキュメントを開く Reload as Plain Text プレーンテキストとして再読み込み Reload as HTML HTML として再読み込み QObject <b>Customised subtrees <b>Customised subtrees The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Skipped names Skipped names These are patterns for file or directory names which should not be indexed. These are patterns for file or directory names which should not be indexed. Follow symbolic links Follow symbolic links Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Index all file names Index all file names Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Default<br>character set Default<br>character set Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Ignored endings Ignored endings These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. These are patterns for file or directory names which should not be indexed. これは、インデックスされるべきでないファイルやディレクトリ名のパターンです。 QWidget Create or choose save directory 保存ディレクトリを作成または選択 Choose exactly one directory 特定のディレクトリを選択 Could not read directory: ディレクトリを読み込めません: Unexpected file name collision, cancelling. 予期しないファイル名の衝突のためキャンセル。 Cannot extract document: ドキュメントを開けません: &Preview プレビュー(&P) &Open 開く(&O) Open With として開く Run Script Script実行 Copy &File Name ファイル名をコピー(&F) Copy &URL URLコピー(&U) &Write to File ファイルに書込み(&W) Save selection to files 選択したコンテンツをファイルに保存 Preview P&arent document/folder プレビュー 主ドキュメント/フォルダー(&a) Find &similar documents 類似ドキュメントを検出(&s) Open &Snippets window 断片ウィンドウを表示(&S) Show subdocuments / attachments サブドキュメント/添付ファイルを表示 &Open Parent document 親ドキュメントを開く(&O) &Open Parent Folder 親フォルダーを開く(&O) Copy Text コピー・テキスト Copy &File Path ファイル Pathをコピー( &F) Copy File Name コピー ファイル名 QxtConfirmationMessage Do not show again. Do not show again. RTIToolW Real time indexing automatic start リアルタイム・インデックス作成(autostart) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. デスクトップセッション開始時にインデックス・デーモンをStart. Also start indexing daemon right now. 今すぐインデックスデーモンを開始. Replacing: 置き換え: Replacing file ファイル置き換え Can't create: 作成不可: Warning 警告 Could not execute recollindex recollインデックスを実行できませんでした Deleting: 削除中: Deleting file ファイル削除 Removing autostart Autostart削除 Autostart file deleted. Kill current process too ? Autostartファイルが削除されました。現在のプロセスも停止しますか? Configuration name 構成名 (Kousei mei) Short alphanumeric nickname for this config この構成のための短い英数字のニックネーム Could not find 次のテキスト断片を日本語に翻訳します。「Could not find」。テキスト検索GUIのコンテキストで使用される想定です。 RclCompleterModel Hits ヒット Hits RclMain (no stemming) (no stemming) (all languages) (all languages) error retrieving stemming languages error retrieving stemming languages Indexing in progress: インデックス作成(進行中): Purge Purge Stemdb Stemdb Closing Closing Unknown 未知 Query results クエリ結果 Cannot retrieve document info from database データベースからドキュメント情報を取得できません Warning 警告 Can't create preview window プレビューウィンドウを作成できません This search is not active any more This search is not active any more Cannot extract document or create temporary file ドキュメントを開けません(または、一時ファイルを作成できません) Executing: [ 実行中: [ About Recoll Recoll について History data 履歴データ Document history ドキュメント履歴 Update &Index アップデート インデックス(&I) Stop &Indexing インデックス作成中止(&I) All 全て media マルチメディア message メール(メッセージ) other その他 presentation プレゼンテーション spreadsheet スプレッドシート text テキスト sorted 並替え filtered フォルター化 No helpers found missing 不足している補助プログラム(helper)なし Missing helper programs 不足している補助プログラム(helper) No external viewer configured for mime type [ 外部ビューワーが設定されていません mime type [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Can't access file: ファイルへのアクセス不能: Can't uncompress file: ファイル展開不可: Save file ファイル保存 Result count (est.) カウント結果(推測) Could not open external index. Db not open. Check external index list. Could not open external index. Db not open. Check external index list. No results found 結果が見つかりません None なし Updating 更新中 Done 完了 Monitor モニター Indexing failed インデックス作成失敗 The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Erasing index インデックス消去中 Reset the index and start from scratch ? インデックスをリセットして最初から始めますか? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program クエリ進行中.<br>インデックス作成ライブラリの制限により、<br>キャンセルするとプログラムが終了します Error エラー Index query error インデックス・クエリ・エラー Can't update index: indexer running インデックス更新不可: indexer running Indexed MIME Types Indexed MIME Types Bad viewer command line for %1: [%2] Please check the mimeview file Bad viewer command line for %1: [%2] Please check the mimeview file Viewer command line for %1 specifies both file and parent file value: unsupported Viewer command line for %1 specifies both file and parent file value: unsupported Cannot find parent document 親ドキュメントが見つかりません External applications/commands needed for your file types and not found, as stored by the last indexing pass in External applications/commands needed for your file types and not found, as stored by the last indexing pass in Sub-documents and attachments サブドキュメント及び添付ファイル Document filter ドキュメントフィルター The indexer is running so things should improve when it's done. The indexer is running so things should improve when it's done. Duplicate documents ドキュメント重複 These Urls ( | ipath) share the same content: These Urls ( | ipath) share the same content: Bad desktop app spec for %1: [%2] Please check the desktop file Bad desktop app spec for %1: [%2] Please check the desktop file Indexing interrupted インデックス作成が中断されました Bad paths Bad paths Selection patterns need topdir Selection patterns need topdir Selection patterns can only be used with a start directory Selection patterns can only be used with a start directory No search No search No preserved previous search 保存済みの過去の検索はありません Choose file to save 保存するファイルを選択 Saved Queries (*.rclq) 保存されたクエリ (*.rclq) Write failed 書込み失敗 Could not write to file ファイルへの書込みができませんでした Read failed 読み込み失敗 Could not open file: ファイルを開けませんでした: Load error ロード・エラー Could not load saved query 保存済みクエリをロードできませんでした Disabled because the real time indexer was not compiled in. リアルタイムインデクサーが内部コンパイルされていなため無効になっています. This configuration tool only works for the main index. この設定ツールはマイン・インデックスに対してのみ機能します。 Can't set synonyms file (parse error?) 同義語ファイルを設定できません(解析エラー?) The document belongs to an external index which I can't update. ドキュメントは、更新できない外部インデックスに属しています。 Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. 一時ファイルとしてのコピーを開く。編集を永続的な場所に保存しないと、<br/>編集内容が失われます。 Do not show this warning next time (use GUI preferences to restore). 次回からこの警告を表示しない (復元のためGUI設定を使用する)。 Index locked インデックスがロックされています Unknown indexer state. Can't access webcache file. インデクサー状態が不明。Webキャッシュファイルにアクセスできません。 Indexer is running. Can't access webcache file. インデクサー実行中。Webキャッシュファイルにアクセスできません。 with additional message: 追加メッセージ付き: Non-fatal indexing message: 非致命的な索引付けメッセージ: Types list empty: maybe wait for indexing to progress? タイプリストが空です:インデックス作成が進行するのを待つ可能性がありますか? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported ビューアコマンドライン %1 は親ファイルを指定していますが、URL http [s]: はサポートされていません Tools ツール Results 結果 Content has been indexed for these MIME types: コンテンツは、次のMIME形式のインデックスに登録されています: Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): 構成ファイルに空白パスまたは存在しないパスが存在。 OKをクリックし、とにかくインデックス作成を開始します(存在しないデータはインデックスから削除されません): Indexing done インデックス作成完了 Can't update index: internal error インデックス更新できません:内部エラー Index not up to date for this file.<br> このファイルのインデックスは最新ではありません。<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>また、ファイルの最後のインデックス更新が失敗したようです。</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> OK をクリックして、このファイルのインデックスを更新してみてください。インデックス作成が完了したら、クエリを再度実行する必要があります。<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> [キャンセル]をクリックしてリストに戻ります。<br> [無視]をクリックしてプレビューを表示します(このセッションでは覚えておいてください)。間違ったエントリが表示されるリスクがあります。<br/> documents ドキュメント document ドキュメント files ファイル file ファイル errors エラー error エラー total files) ファイル合計) No information: initial indexing not yet performed. 情報なし:初期インデックス作成はまだ実行されていません。 Batch scheduling バッチ・スケジューリング The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. このツールを使用すると、インデックス作成を実行するタイミングを決定できます。このツールは、Windowsタスクスケジューラを使用します。 Confirm 確認 Erasing simple and advanced search history lists, please click Ok to confirm シンプルで高度な検索履歴リストを消去するには、[OK]をクリックして確認してください Could not open/create file ファイル・オープン/作成不可 F&ilter フィルター(&i) Could not read: 読込み不可: Simple search type 単純な検索形式 Any term 任意の用語 All terms 全ての用語 File name ファイル名 Query language Query language Stemming language Stemming language Main Window メイン・ウィンドウ Clear search 検索消去 Move keyboard focus to search entry キーボードフォーカスを検索エントリに移動します Move keyboard focus to search, alt. キーボードのフォーカスを検索に移動します。 Toggle tabular display 表形式の表示を切り替えます Move keyboard focus to table キーボードのフォーカスをテーブルに移動します Flushing フラッシング Show menu search dialog メニュー検索ダイアログを表示 Duplicates 繰り返し Filter directories ディレクトリをフィルターする Main index open error: メインインデックスのオープンエラー: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. インデックスが壊れている可能性があります。xapian-checkを実行するか、インデックスを再構築してみてはどうでしょうか? This search is not active anymore この検索はもうアクティブではありません。 Viewer command line for %1 specifies parent file but URL is not file:// : unsupported %1のビューアコマンドラインは親ファイルを指定していますが、URLがfile://ではありません:サポートされていません The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? %1: %2のためにmimeviewで指定されたビューアが見つかりません。 設定ダイアログを開始しますか? Show advanced search dialog 高度な検索ダイアログを表示します。 with additional message: RclMainBase Recoll Recoll &File ファイル(&F) &Tools ツール(&T) &Preferences 環境設定(&P) &Help ヘルプ(&H) E&xit 終了(&x) Ctrl+Q Ctrl+Q Update &index インデックス更新(&i) &Erase document history ドキュメント履歴を消去(&E) &About Recoll Recollについて(&A) &User manual ユーザーマニュアル(&U) Document &History ドキュメント履歴(&H) Document History ドキュメント履歴 &Advanced Search 高度な検索(&A) Advanced/complex Search 高度/複雑な検索 &Sort parameters パラメータ並替え(&S) Sort parameters パラメータ並替え Term &explorer Term &explorer Term explorer tool Term explorer tool Next page 次のページ Next page of results 結果頁 First page 最初の頁 Go to first page of results 結果の最初頁へ移動 Previous page 前の頁 Previous page of results 前の結果頁 External index dialog 外部インデックスダイアログ PgDown PdDown PgUp PgUp &Full Screen 全画面(&F) F11 F11 Full Screen 全画面 &Erase search history 検索履歴を消去(&E) Sort by dates from oldest to newest 日付で並替え(古い順) Sort by dates from newest to oldest 日付で並替え(新しい順) Show Query Details クエリ(照会)詳細を表示 &Rebuild index インデックスを再構築(&R) Shift+PgUp Shift+PgUp E&xternal index dialog 外部インデックスダイアログ(&x) &Index configuration インデックス環境設定(&I) &GUI configuration GUI環境設定(&G) &Results 結果(&R) Sort by date, oldest first 日付で並び替え(古い順) Sort by date, newest first 日付で並び替え(新しい順) Show as table テーブル表示 Show results in a spreadsheet-like table 結果をスプレッドシート状テーブルで表示 Save as CSV (spreadsheet) file CSV (spreadsheet)ファイルに保存 Saves the result into a file which you can load in a spreadsheet 結果をスプレッドシートとしてロード可能なファイルに保存 Next Page 次の頁 Previous Page 前の頁 First Page 最初の頁 Query Fragments クエリ(照会)フラグメント With failed files retrying With failed files retrying Next update will retry previously failed files Next update will retry previously failed files Indexing &schedule インデックス・スケジュール(&s) Enable synonyms 同義語を有効にする Save last query 最後のクエリ(照会)を保存 Load saved query 保存されたクエリ(照会)をロード Special Indexing スペシャル・インデックス Indexing with special options スペシャルオプション付きインデックス &View 表示(&V) Missing &helpers 補助プログラム(helper)なし(&h) Indexed &MIME types インデックスMIMEタイプ (&M) Index &statistics インデックス統計 (&s) Webcache Editor Webcache エディタ Trigger incremental pass 増分パスをトリガー E&xport simple search history 単純な検索履歴をエクスポート(&x) &Query クエリ &Query Could not extract or copy text テキストを抽出またはコピーできませんでした %1 bytes copied to clipboard %1 bytes をクリップボードにコピーしました Increase results text font size 結果のテキストフォントサイズを大きくする Increase Font Size フォントサイズを大きくする Decrease results text font size 結果のテキストフォントサイズを小さくする Decrease Font Size フォントサイズを小さくする Start real time indexer リアルタイムインデクサを開始 Query Language Filters 言語フィルター・クエリ Filter dates 日付でフィルター Assisted complex search 複雑な検索支援 Filter birth dates 生年月日をフィルターする Switch Configuration... スイッチの設定... Choose another configuration to run on, replacing this process このプロセスを置き換えて実行する別の構成を選択してください。 &User manual (local, one HTML page) ユーザーマニュアル(ローカル、1つのHTMLページ) &Online manual (Recoll Web site) オンラインマニュアル(Recollウェブサイト) Path translations パスの翻訳 With failed files retrying RclTrayIcon Restore リストア Quit 中止 RecollModel Abstract 概要 Author 著者 Document size ドキュメントサイズ Document date ドキュメント日付 File size ファイルサイズ File name ファイル名 File date ファイル日付 Keywords キーワード Original character set オリジナル character set Relevancy rating 関連性の評価 Title タイトル URL URL Date 日付 Date and time 日付と時刻 Ipath Ipath MIME type MIME形式 Can't sort by inverse relevance 逆の関連性による並替えはできません ResList Result list 結果リスト (show query) (クエリ表示) Document history ドキュメント履歴 <p><b>No results found</b><br> <p><b>結果が見つかりません</b><br> Previous Next Unavailable document ドキュメント利用不可 Preview プレビュー Open 開く <p><i>Alternate spellings (accents suppressed): </i> <p><i>代替スペリング(アクセント抑制): </i> Documents ドキュメント out of at least out of at least for for <p><i>Alternate spellings: </i> <p><i>代替スペリング: </i> Result count (est.) カウント結果(推定) Query details クエリ詳細 Snippets Snippets This spelling guess was added to the search: このスペルの推測が検索に追加されました。 These spelling guesses were added to the search: 検索に追加されたスペルの推測: ResTable &Reset sort 並替えリセット(&R) &Delete column 列を削除(&D) &Delete column Save table to CSV file テーブルをCSV ファイルに保存 Can't open/create file: ファイルを開くこと/作成ができません: &Save as CSV CSVとして保存(&S) Add "%1" column "%1" 列を追加 Result Table 結果テープル Preview プレビュー Open current result document 現在の結果ドキュメントを開く Open current result and quit 現在の結果を開いて終了する Show snippets snippets表示 Show header ヘッダーを表示 Show vertical header verticalヘッダーを表示 Copy current result text to clipboard 現在の結果テキストをクリップボードへコピー Use Shift+click to display the text instead. Use Shift+click to display the text instead. %1 bytes copied to clipboard %1 bytes をクリップボードにコピーしました Copy result text and quit 結果テキストをコピーして終了 SSearch Any term 任意の表現 All terms 全ての表現 File name ファイル名 Query language クエリ(照会)言語 Bad query string クエリ文字列が不正 Out of memory メモリ不足 Enter file name wildcard expression. ワイルドカード式のファイル名を入力. Stemming languages for stored query: 保存されたクエリのステミング言語: differ from current preferences (kept) differ from current preferences (kept) Auto suffixes for stored query: 保存されたクエリの自動サフィックス: Autophrase is set but it was unset for stored query オートフレーズが設定されていますが、保存されたクエリに対して設定されていません Autophrase is unset but it was set for stored query オートフレーズは設定されていませんが、保存されたクエリ用に設定されています Enter search terms here. ここに検索用語を入力. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border-collapse: collapse; } } th,td { th,td { text-align: center; テキスト-整列:中央; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; You should really look at the manual (F1)</p> マニュアルを見る必要があります (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>What</th><th>Examples</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; where needed</td><td>(one AND two) OR three</td></tr> where needed</td><td>(one AND two) OR three</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index インデックスを開けません Could not restore external indexes for stored query:<br> 保存されたクエリの外部インデックスを復元できませんでした:<br> ??? ??? Using current preferences. 現在の詳細設定を使用. Simple search 単純検索 History 履歴 <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <p>クエリ言語のチートシート。疑問がある場合は、<b>クエリの詳細を表示</b>をクリックしてください。&nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>語幹の拡張を抑制するために大文字にする</td><td>フロア</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Clear Erase search entry 検索エントリを消去 Search 検索 Start query クエリ開始 Choose search type. 検索タイプを選択. Show query history クエリ履歴を表示 Main menu メイン・メニュー SearchClauseW Select the type of query that will be performed with the words 単語で実行されるクエリ・タイプを選択 Number of additional words that may be interspersed with the chosen ones Number of additional words that may be interspersed with the chosen ones No field フィールドなし Any 任意 All 全て None なし Phrase フレーズ Proximity 近接性 File name ファイル名 Snippets Snippets Snippets Find: 検出: Next Prev SnippetsW Search 検索 <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>申し訳ありません、制限内で完全に一致するものが見つかりませんでした。おそらくドキュメントが非常に大きく、スニペットジェネレータが迷路の中で迷子になりました...</p> Sort By Relevance 関連性で並替え Sort By Page 頁で並替え Snippets Window Snippets Window Find 検出 Find (alt) 検出 (alt) Find next 後方検出 Find previous 前方検出 Close window ウィンドウを閉じる Increase font size フォントサイズを大きくする Decrease font size フォントサイズを小さくする SpecIdxW Special Indexing スペシャル・インっデックス作成 Else only modified or failed files will be processed. それ以外の場合は、変更または失敗したファイルのみが処理されます。 Erase selected files data before indexing. インデックス作成前に、選択したファイルのデータを消去します。 Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). 再帰的にインデックスを作成するディレクトリ。 This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Browse ブラウズ Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. 空白のままで、すべてのファイルを選択します。スペースで区切られた複数のシェルタイプのパターンを使用できます。<br>スペースが埋め込まれているパターンは、二重引用符で囲む必要があります。<br>開始ターゲットが設定されている場合にのみ使用できます。 Selection patterns: Selection patterns: Top indexed entity Top indexed entity Retry previously failed files. Retry previously failed files. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnostics file Diagnostics file SpellBase Term Explorer Term Explorer &Expand &Expand Alt+E Alt+E &Close 閉じる(&C) Alt+C Alt+C No db info. database情報なし. Match 一致 Case Case Accents Accents SpellW Wildcards Wildcards Regexp Regexp Stem expansion Stem expansion Spelling/Phonetic Spelling/Phonetic error retrieving stemming languages error retrieving stemming languages No expansion found No expansion found Term Term Doc. / Tot. Doc. / Tot. Index: %1 documents, average length %2 terms.%3 results Index: %1 documents, average length %2 terms.%3 results %1 results %1 results List was truncated alphabetically, some frequent List was truncated alphabetically, some frequent terms may be missing. Try using a longer root. terms may be missing. Try using a longer root. Show index statistics インデックス統計を表示 Number of documents ドキュメント数 Average terms per document ドキュメントあたりの平均用語 Database directory size データベース・ディレクトリサイズ MIME types: MIME 形式: Item 項目 Value Smallest document length (terms) 最小のドキュメント長さ (terms) Longest document length (terms) 最大のドキュメント長さ (terms) Results from last indexing: Results from last indexing: Documents created/updated Documents created/updated Files tested Files tested Unindexed files Unindexed files List files which could not be indexed (slow) List files which could not be indexed (slow) Spell expansion error. Spell expansion error. Spell expansion error. スペル拡張エラー。 Documents created/updated Files tested Unindexed files UIPrefsDialog error retrieving stemming languages error retrieving stemming languages The selected directory does not appear to be a Xapian index 選択されたディレクトリには Xapian インデックスがありません This is the main/local index! これは main/localインデックスです! The selected directory is already in the index list 選択したディレクトリは既にインデックスリストに含まれています Choose 選択 Result list paragraph format (erase all to reset to default) 段落形式による結果リスト(すべて消去してデフォルトにリセット) Result list header (default is empty) Result list header (default is empty) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read 選択されたディレクトリはRecoll設定ディレクトリのようですが、設定を読み込めません At most one index should be selected 最大で1つのインデックスを選択する必要があります Cant add index with different case/diacritics stripping option ケース/発音区別符号のストリッピングオプションが異なるインデックスは追加できません Default QtWebkit font デフォルトの QtWebkitフォント Any term 任意用語 All terms 全ての用語 File name ファイル名 Query language クエリ言語 Value from previous program exit Value from previous program exit Context Context Description 説明 Shortcut ショートカット Default デフォルト Choose QSS File QSS ファイルを選択 Can't add index with different case/diacritics stripping option. 異なる大文字/ダイアクリティカルストリッピングオプションを持つインデックスを追加できません。 Light ライト Dark ダーク System システム ViewAction Command Command MIME type MIME形式 Desktop Default デスクトップ・デフォルト Changing entries with different current values Changing entries with different current values ViewActionBase Native Viewers ネイティブ・ビューワー Close 閉じる Select one or several mime types then use the controls in the bottom frame to change how they are processed. 1つまたは複数のMIME形式を選択し、下部フレームにあるコントロールを使用して、それらの処理方法を変更します。 Use Desktop preferences by default デスクトップ設定をでデフォルトで使用する Select one or several file types, then use the controls in the frame below to change how they are processed 1つまたは複数のファイルタイプを選択し、下のフレームのコントロールを使用して、それらの処理方法を変更します Exception to Desktop preferences デスクトップ設定の例外 Action (empty -> recoll default) Action (empty -> recoll default) Apply to current selection 現在の選択に追加 Recoll action: Recoll action: current value 現在の値 Select same Select same <b>New Values:</b> <b>新しい値:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. 値は実行されるコマンドラインです。置換: %s: 検索文字列; %p: ページ番号; <br>%f: ドキュメントファイル名。詳細なヘルプにはF1を押してください。 Webcache Webcache editor Webcache エディタ Search regexp 正規表現で検索 TextLabel テキストラベル WebcacheEdit Copy URL URLをコピー Unknown indexer state. Can't edit webcache file. インデクサー状態が不明です。 Webキャッシュファイルを編集できません。 Indexer is running. Can't edit webcache file. インデクサーが実行されています。 Webキャッシュファイルを編集できません。 Delete selection 選択を消去 Webcache was modified, you will need to run the indexer after closing this window. Webcacheが変更されました。このウィンドウを閉じた後、インデクサーを実行する必要があります。 Save to File ファイルに保存 File creation failed: ファイル保存に失敗: Maximum size %1 (Index config.). Current size %2. Write position %3. テキスト検索GUIの文脈で、以下のテキストフラグメントを日本語に翻訳します。テキストフラグメント:最大サイズ%1(インデックス構成)。現在のサイズ%2。書き込み位置%3。 WebcacheModel MIME MIME Url Url Date 日付 Size サイズ URL URL WinSchedToolW Recoll Batch indexing Recoll バッチインデックス化 Start Windows Task Scheduler tool Windows タスク スケジューラ ツールを開始します。 Error エラー Configuration not initialized 設定が初期化されていません。 Could not create batch file バッチファイルを作成できませんでした。 <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll インデックスバッチスケジューリング</h3><p>これには標準のWindowsタスクスケジューラを使用します。プログラムは、以下のボタンをクリックすると開始されます。</p><p>完全なインターフェース(右側のメニューにある<i>タスクの作成</i>)または簡略化された<i>基本タスクの作成</i>ウィザードのいずれかを使用できます。いずれの場合も、以下にリストされているバッチファイルのパスを<i>アクション</i>としてコピー/ペーストしてください。</p> Command already started コマンドはすでに開始されています confgui::ConfParamFNW Choose 選択 confgui::ConfParamSLW + + - - Add entry エントリー追加 Delete selected entries 選択したエントリーを削除 ~ ~ Edit selected entries 選択したエントリーを編集 confgui::ConfTabsW Apply 適用する (てきようする) uiPrefsDialogBase User interface ユーザー・インターフェース Number of entries in a result page 結果ページのエントリ数 If checked, results with the same content under different names will only be shown once. オンにすると、同じコンテンツで異なる名前の結果が1回だけ表示されます。 Hide duplicate results. 重複結果を隠す. Result list font 結果リストのフォント Opens a dialog to select the result list font 結果リストのフォントを選択するためのダイアログを開きます Helvetica-10 Helvetica-10 Resets the result list font to the system default 結果リストのフォントをシステムのデフォルトにリセットします Reset リセット Texts over this size will not be highlighted in preview (too slow). このサイズを超えるテキストはプレビューで強調表示されません(遅すぎます)。 Choose editor applications エディタ・アプリケーションを選択 Start with advanced search dialog open. 詳細検索ダイアログを開いて開始. Remember sort activation state. 並べ替えのアクティブ化状態を覚えておいてください。 Prefer Html to plain text for preview. プレビューにはプレーンテキストよりもHTMLを優先します。 Search parameters 検索パラメータ Stemming language Stemming language A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Automatically add phrase to simple searches 単純検索に自動的にフレーズを追加 Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. クエリ用語のコンテキストを使用して、結果リストエントリの要約を作成しようとしていますか? 大きなドキュメントの場合は遅くなる可能性があります。 Dynamically build abstracts アブストラクトを動的に構築する Do we synthetize an abstract even if the document seemed to have one? ドキュメントに要約が含まれているように見えても、要約を合成しますか? Replace abstracts from documents ドキュメントから要約を置き換える Synthetic abstract size (characters) 合成された要約サイズ (characters) Synthetic abstract context words 合成された要約コンテキストワード The words in the list will be automatically turned to ext:xxx clauses in the query language entry. リスト内の単語は、クエリ言語エントリ ext:xxx条項に自動的に変換されます。 Query language magic file name suffixes. クエリ言語のマジックファイル名のサフィックス。 Enable 有効化 External Indexes 外部インデックス Toggle selected Toggle selected Activate All 全てアクティブ化 Deactivate All 全て非アクティブ化 Remove from list. This has no effect on the disk index. リストから削除。これはディスクインデックスには影響しません。 Remove selected 選択を削除 Add index インデックス追加 Apply changes 変更を適用 &OK &OK Discard changes 変更を破棄 &Cancel キャンセル(&C) Abstract snippet separator 要約snippetセパレータ Opens a dialog to select the style sheet file スタイルシートファイルを選択するためのダイアログを開きます Choose 選択 Resets the style sheet to default スタイルシートをデフォルトにリセット Result List 結果リスト Edit result paragraph format string 結果の段落形式の文字列を編集する Edit result page html header insert 結果ページのHTMLヘッダー挿入を編集しま Date format (strftime(3)) 日付フォーマット (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Autophrase term frequency threshold percentage Autophrase term frequency threshold percentage Plain text to HTML line style プレイン・テキストをHTMLへ。ライン形式 Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. PREテキストの行は折りたたまれていません。 BRを使用すると、インデントが失われます。 PRE +ラップスタイルがあなたの望むものかもしれません。 <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + wrap Disable Qt autocompletion in search entry. 検索エントリでQtオートコンプリートを無効にします。 Paths translations Paths translations Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. クリックして、別のインデックスディレクトリをリストに追加します。 Recoll構成ディレクトリまたはXapianインデックスのいずれかを選択できます。 Snippets window CSS file Snippets window CSS file Opens a dialog to select the Snippets window CSS style sheet file Snippets windowのCSSスタイルシートファイルを選択するためのダイアログを開きます Resets the Snippets window style Snippets window形式をリセット Decide if document filters are shown as radio buttons, toolbar combobox, or menu. ドキュメントフィルターをラジオボタン、ツールバーコンボボックス、またはメニューとして表示するかどうかを決定します。 Document filter choice style: ドキュメントフィルターのチェック形式: Buttons Panel ボタンパネル Toolbar Combobox ツールバーコンボボックス Menu メニュー Show system tray icon. システムトレイ・アイコンを表示. Close to tray instead of exiting. Close to tray instead of exiting. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. snippets windowに適用するユーザースタイル。<br>注:結果ページのヘッダー挿入は、snippets windowのヘッダーにも含まれています。 Synonyms file snippets ファイル Show warning when opening temporary file. 一時ファイルを開くときに警告を表示します。 Highlight CSS style for query terms クエリ用語のCSSスタイルを強調表示 Recoll - User Preferences Recoll - ユーザー詳細設定 Set path translations for the selected index or for the main one if no selection exists. 選択したインデックス、または選択が存在しない場合はメインインデックスのパス変換を設定します。 Activate links in preview. プレビューでリンクをアクティブにします。 Make links inside the preview window clickable, and start an external browser when they are clicked. プレビューウィンドウ内のリンクをクリック可能にし、クリックされたときに外部ブラウザを起動します。 Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... 結果で強調表示されているクエリ用語。 <br>デフォルト(青色)より目立つ色にするには、「color:red; background:yellow」のようなものを試してみてください... Start search on completer popup activation. 完全なポップアップアクティベーションで検索を開始します。 Maximum number of snippets displayed in the snippets window snippets windowに表示されるsnippets の最大数 Suppress all beeps. すべてのビープ音を抑制。 Application Qt style sheet アプリケーションQtスタイルシート Limit the size of the search history. Use 0 to disable, -1 for unlimited. 検索履歴のサイズを制限します。無効にするには0を使用し、無制限にするには-1を使用します。 Maximum size of search history (0: disable, -1: unlimited): 検索履歴の最大サイズ(0:無効、-1:無制限): Generate desktop notifications. デスクトップ通知を生成します。 Sort snippets by page number (default: by weight). snippetsをページ番号で並べ替えます(デフォルト:by weight). Misc その他 Work around QTBUG-78923 by inserting space before anchor text アンカーテキストの前にスペースを挿入して、QTBUG-78923を回避します Display a Snippets link even if the document has no pages (needs restart). ドキュメントにページがない場合でも、Snippets linkを表示します(再起動が必要です)。 Maximum text size highlighted for preview (kilobytes) プレビュー用に強調表示された最大テキストサイズ(KB) Start with simple search mode: 単純検索モードで開始: Shortcuts ショートカット Hide result table header. 結果テーブルヘッダーを隠す. Show result table row headers. 結果テーブルの行ヘッダーを表示. Reset shortcuts defaults ショートカットをデフォルトにリセット Use F1 to access the manual マニュアルにアクセスするには F1 を押す Hide some user interface elements. 一部のユーザーインターフェイス要素を非表示. Hide: 隠す: Toolbars ツールバー Status bar ステータス・バー Show button instead. 代わりにボタンを表示. Menu bar メニュー・バー Show choice in menu only. メニューにのみ選択肢を表示. Simple search type 単純検索形式 Clear/Search buttons Clear/Search buttons Show text contents when clicking result table row (else use Shift+click). 結果テーブルの行をクリックするとテキストの内容が表示されます(それ以外の場合はShiftキーを押しながらクリックします)。 Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. 表の行にジャンプするためのCtrl + [0-9] / Shift + [a-z]ショートカットを無効にします。 None (default) None (default) Uses the default dark mode style sheet デフォルトのダークモード・スタイルシートを使用 Dark mode ダークモード Choose QSS File QSS ファイルを選択 Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Result Table 結果テープル To display document text instead of metadata in result table detail area, use: To display document text instead of metadata in result table detail area, use: left mouse click left mouse click Shift+click Shift+click Do not display metadata when hovering over rows. Do not display metadata when hovering over rows. Work around Tamil QTBUG-78923 by inserting space before anchor text アンカーテキストの前にスペースを挿入して、タミルQTBUG-78923を回避します The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. このバグにより、強調表示されたタミル語の中に奇妙な円の文字が表示されます。 回避策は、問題を修正するように見える追加のスペース文字を挿入します。 Depth of side filter directory tree サイドフィルターディレクトリツリーの深さ Zoom factor for the user interface. Useful if the default is not right for your screen resolution. ユーザーインターフェースのズーム倍率。デフォルトが画面解像度に合っていない場合に便利です。 Display scale (default 1.0): 表示スケール(デフォルト1.0): Automatic spelling approximation. 自動スペル近似。 Max spelling distance 最大スペル距離 Add common spelling approximations for rare terms. 稀な用語に対して一般的な綴りの近似を追加します。 Maximum number of history entries in completer list 補完リスト内の履歴エントリの最大数 Number of history entries in completer: 補完機能の履歴エントリ数: Displays the total number of occurences of the term in the index インデックス内の用語の総出現回数を表示します。 Show hit counts in completer popup. コンプリータのポップアップにヒット数を表示します。 Prefer HTML to plain text for preview. プレビューにはプレーンテキストではなくHTMLを使用してください。 See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Qt QDateTimeEditのドキュメントを参照してください。例:yyyy-MM-dd。デフォルトのQt/System形式を使用する場合は空白のままにしてください。 Side filter dates format (change needs restart) サイドフィルタの日付形式(変更には再起動が必要です) If set, starting a new instance on the same index will raise an existing one. 設定されている場合、同じインデックスで新しいインスタンスを開始すると、既存のインスタンスが起動されます。 Single application 単一のアプリケーション Set to 0 to disable and speed up startup by avoiding tree computation. ツリー計算を避けて起動を高速化するために、0に設定して無効にします。 The completion only changes the entry when activated. 完了は、アクティブ化されたときにのみエントリを変更します。 Completion: no automatic line editing. 完了:自動行編集なし。 Interface language (needs restart): インターフェース言語(再起動が必要): Note: most translations are incomplete. Leave empty to use the system environment. 注意:ほとんどの翻訳は不完全です。システム環境を使用する場合は空白のままにしてください。 Preview プレビュー Set to 0 to disable details/summary feature 詳細/要約機能を無効にするには、0に設定してください。 Fields display: max field length before using summary: フィールドの表示:サマリーを使用する前の最大フィールド長: Number of lines to be shown over a search term found by preview search. プレビュー検索で見つかった検索語の上に表示される行数。 Search term line offset: 検索語の行オフセット: Wild card characters *?[] will processed as punctuation instead of being expanded ワイルドカード文字*?[]は、展開される代わりに句読点として処理されます。 Ignore wild card characters in ALL terms and ANY terms modes すべての用語といずれかの用語モードでワイルドカード文字を無視します。 Color scheme カラースキーム When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. ダークモードでHTMLを表示する際は、ダークな背景(および明るい色)を使用してみてください。<br>これは、多くの文書が自身のCSS(ダーク)の前景色で私たちの明るい設定を上書きし、読めない文書になるため、デフォルトではオフになっています。 Use dark background when displaying HTML in dark mode. ダークモードでHTMLを表示する際は、暗い背景を使用してください。 recoll-1.43.12/qtgui/i18n/recoll_nl.ts0000644000175000017500000074660715124431112016713 0ustar dockesdockes ActSearchDLG Menu search Menu zoeken AdvSearch All clauses Alle termen Any clause Elke term texts teksten spreadsheets werkbladen presentations presentaties media Media messages berichten other andere Bad multiplier suffix in size filter Geen juist achtervoegsel in grootte filter text tekst spreadsheet rekenblad presentation presentatie message bericht Advanced Search Geavanceerd Zoeken History Next Volgende geschiedenis History Prev Vorige geschiedenis Load next stored search Zoeken op volgende opslag laden Load previous stored search Laad vorige opgeslagen zoekopdracht AdvSearchBase Advanced search geavanceerd zoeken Restrict file types beperk tot bestandstype Save as default Sla op als standaard Searched file types Gezochte bestands type All ----> Alle ----> Sel -----> Sel ----> <----- Sel <----- Zel <----- All alle Ignored file types negeer bestandstype Enter top directory for search voer de top bestandsmap in om te doorzoeken Browse doorbladeren Restrict results to files in subtree: Beperk de resultaten tot de bestanden in de subtak Start Search Begin met zoeken Search for <br>documents<br>satisfying: Zoek naar<br>documenten<br> die bevatten: Delete clause verwijder term Add clause voeg term toe Check this to enable filtering on file types vink dit aan om filetype filtering te activeren By categories Per categorie Check this to use file categories instead of raw mime types Vink dit aan om bestands catergorie te gebruiken in plaats van raw mime Close sluit All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Elk niet lege veld aan de rechterzijde zal worden gecombineerd met En ("Alle clausules" keuze) en Of ("Bepalingen" keuze) voegwoorden. <br> "Elk", "en" Of "Geen" veldtypen kan een mix van eenvoudige woorden en uitdrukkingen tussen dubbele aanhalingstekens te accepteren. <br> Velden zonder gegevens worden genegeerd. Invert omkeren Minimum size. You can use k/K,m/M,g/G as multipliers Minimummaat. U kunt k / K, m / M gebruiken, g / G als multipliers Min. Size Min Grootte Maximum size. You can use k/K,m/M,g/G as multipliers Maximale grootte. U kunt k / K, m / M gebruiken, g / G als multipliers Max. Size Max grootte Select Selecteren Filter Filteren From Van To Tot Check this to enable filtering on dates Vink dit aan om op datum te kunnen filteren Filter dates Filter datums Find Vind Check this to enable filtering on sizes Vink dit aan om te filteren op grootte Filter sizes Filter grootte Filter birth dates Filter geboortedata ConfIndexW Can't write configuration file Kan configuratie bestand niet lezen Global parameters Globale parameters Local parameters Lokale parameters Search parameters Zoek parameters Top directories Top mappen The list of directories where recursive indexing starts. Default: your home. Een lijst van mappen waar de recursive indexering gaat starten. Standaard is de thuismap. Skipped paths Paden overgeslagen These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Dit zijn padnamen van mappen die niet zullen worden geïndexeerd.<br>Pad elementen kunnen wildcards bevatten. De items moeten overeenkomen met de paden die door de indexeerder worden gezien (bijv. als de uren op de voorgrond zijn '/home/me' en '/home' een link is naar '/usr/home'een juist skippedPath item zou '/home/me/tmp*'zijn, niet '/usr/home/me/tmp*') Stemming languages Stam talen The languages for which stemming expansion<br>dictionaries will be built. De talen waarvoor de stam uitbreidings<br>wooordenboeken voor zullen worden gebouwd. Log file name Log bestandsnaam The file where the messages will be written.<br>Use 'stderr' for terminal output Het bestand waar de boodschappen geschreven zullen worden.<br>Gebruik 'stderr' voor terminal weergave Log verbosity level Log uitgebreidheids nivo This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Deze waarde bepaald het aantal boodschappen,<br>van alleen foutmeldingen tot een hoop debugging data. Index flush megabytes interval Index verversings megabyte interval This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Deze waarde past de hoeveelheid data die zal worden geindexeerd tussen de flushes naar de schijf.<br> Dit helpt bij het controleren van het gebruik van geheugen. Standaad 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Dit is het percentage van schijfgebruik - totaal schijfgebruik, niet indexgrootte - waarop de indexering zal mislukken en stoppen.<br>De standaardwaarde van 0 verwijdert elke limiet. No aspell usage Gebruik aspell niet Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Schakelt het gebruik van aspell uit om spellings gissingen in het term onderzoeker gereedschap te genereren. <br> Handig als aspell afwezig is of niet werkt. Aspell language Aspell taal The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Taal instelling voor het aspell woordenboek. Dit zou er uit moeten zien als 'en'of 'nl'...<br> als deze waarde niet is ingesteld, zal de NLS omgeving gebruikt worden om het te berekenen, wat meestal werkt. Om een idee te krijgen wat er op uw systeem staat, type 'aspell config' en zoek naar .dat bestanden binnen de 'data-dir'map. Database directory name Database map naam The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. De naam voor een map om de index in op te slaan<br> Een niet absoluut pad ten opzichte van het configuratie bestand is gekozen. Standaard is het 'xapian db'. Unac exceptions Unac uitzonderingen <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Dit zijn uitzonderingen op het unac mechanisme dat, standaard, alle diakritische tekens verwijderd, en voert canonische ontbinding door. U kunt unaccenting voor sommige karakters veranderen, afhankelijk van uw taal, en extra decomposities specificeren, bijv. voor ligaturen. In iedere ruimte gescheiden ingave , waar het eerste teken is de bron is, en de rest de vertaling. Process the WEB history queue Verwerk de WEB geschiedenis wachtrij Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Zet het indexeren van firefox bezochte paginas aan. <br> (hiervoor zal ook de Firefox Recoll plugin moeten worden geinstalleerd door uzelf) Web page store directory name Web pagina map naam om op te slaan The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. De naam voor een map waarin de kopieen van de bezochte webpaginas opgeslagen zullen worden.<br>Een niet absoluut pad zal worden gekozen ten opzichte van de configuratie map Max. size for the web store (MB) Max. grootte voor het web opslaan (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Invoeringen zullen worden gerecycled zodra de groote is bereikt. <br> Het verhogen van de groote heeft zin omdat het beperken van de waarde de bestaande waardes niet zal afkappen ( er is alleen afval ruimte aan het einde). Automatic diacritics sensitivity Automatische diakritische tekens gevoeligheid <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <P> Automatisch activeren diakritische tekens gevoeligheid als de zoekterm tekens zijn geaccentueerd (niet in unac_except_trans). Wat je nodig hebt om de zoek taal te gebruiken en de <i> D</i> modifier om diakritische tekens gevoeligheid te specificeren. Automatic character case sensitivity Automatische karakter hoofdletter gevoeligheid <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <P> Automatisch activeren hoofdletters gevoeligheid als de vermelding hoofdletters heeft in elke, behalve de eerste positie. Anders moet u zoek taal gebruiken en de <i>C</i> modifier karakter-hoofdlettergevoeligheid opgeven. Maximum term expansion count Maximale term uitbreidings telling <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p> Maximale uitbreidingstelling voor een enkele term (bijv.: bij het gebruik van wildcards) Een standaard van 10.000 is redelijk en zal zoekpodrachten die lijken te bevriezen terwijl de zoekmachine loopt door de termlijst vermijden. Maximum Xapian clauses count Maximaal Xapian clausules telling <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p> Maximale aantal elementaire clausules die we kunnen toevoegen aan een enkele Xapian zoeken. In sommige gevallen kan het resultaatvan de term uitbreiding multiplicatief zijn, en we willen voorkomen dat er overmatig gebruik word gemaakt van het werkgeheugen. De standaard van 100.000 zou hoog genoeg moeten zijn in beidde gevallen en compatible zijn met moderne hardware configuraties. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... De talen waarvoor de uitbreidingswoordenboeken zullen worden gebouwd.<br>Zie de Xapiaanse stammer documentatie voor mogelijke waarden. Bijv. dutse, french, duitsch... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. De taal van het aspell woordenboek. De waarden zijn 2-letter taalcodes, bijv. 'nr', 'fr' . .<br>Als deze waarde niet is ingesteld, zal de NLS-omgeving worden gebruikt om het te berekenen, wat meestal werkt. Om een idee te krijgen van wat is geïnstalleerd op uw systeem, typ 'aspell config' en zoek naar . op bestanden in de map 'data-dir' Indexer log file name Indexer log bestandsnaam If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Indien leeg, wordt de bovenstaande waarde van de bestandsnaam gebruikt. Het kan handig zijn om een apart logboek voor diagnostische doeleinden te hebben, omdat het algemene logboek wordt gewist wanneer<br>de GUI opstart. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Schijf volledige drempelpercentage waarmee we stoppen met het indexeren van<br>Bijv. 90% om 90% volledig, 0 of 100 betekent geen limiet) Web history Web geschiedenis Process the Web history queue Verwerk de wachtrij van de webgeschiedenis (by default, aspell suggests mispellings when a query has no results). (standaard suggereert aspell verkeerd gespelde woorden wanneer een zoekopdracht geen resultaten oplevert). Page recycle interval Pagina recycle interval <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Standaard wordt slechts één exemplaar van een URL in de cache bewaard. Dit kan worden gewijzigd door dit in te stellen op een waarde die bepaalt met welke frequentie we meerdere exemplaren behouden ('dag', 'week', 'maand', 'jaar'). Let op dat het verhogen van het interval bestaande vermeldingen niet zal wissen. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Let op: oude pagina's worden gewist om ruimte te maken voor nieuwe wanneer de maximale grootte is bereikt. Huidige grootte: %1 Start folders Start mappen The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. De lijst met mappen/directories die geïndexeerd moeten worden. Submappen worden recursief verwerkt. Standaard: uw home. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Schijf vol drempelpercentage waarbij we stoppen met indexeren<br>(Bijv. 90 om te stoppen bij 90% vol, 0 of 100 betekent geen limiet) Browser add-on download folder Map voor het downloaden van browser-add-ons Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Stel dit alleen in als je de parameter "Downloads subdirectory" hebt ingesteld in de instellingen van de webbrowser-add-on. In dat geval moet het het volledige pad naar de map zijn (bijv. /home/[me]/Downloads/my-subdir) Store some GUI parameters locally to the index Sla enkele GUI-parameters lokaal op in de index. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index GUI-instellingen worden normaal gesproken opgeslagen in een globaal bestand, geldig voor alle indexen. Het instellen van deze parameter zal sommige instellingen, zoals de opmaak van de resultaattabel, specifiek maken voor de index. Suspend the real time indexer when running on battery Schakel de real-time indexeerder uit wanneer deze op batterijvoeding werkt. The indexer will wait for a return on AC and reexec itself when it happens De indexeerder zal wachten op een reactie op AC en zichzelf opnieuw uitvoeren wanneer dit gebeurt. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. De lijst met mappen/directories die recursief geïndexeerd moeten worden, inclusief hun submappen.<br> Het '~' karakter breidt uit naar uw thuismap, wat de standaard initiële waarde is. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Alleen mime types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Een exclusieve lijst van geïndexeerde typen mime. <br> Niets anders zal worden geïndexeerd. Normaal gesproken leeg en inactief Exclude mime types Sluit mime types uit Mime types not to be indexed Mime types die niet geindexeerd zullen worden Max. compressed file size (KB) Maximaal gecomprimeerd bestands formaat (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Deze waarde stelt een drempel waarboven gecomprimeerde bestanden niet zal worden verwerkt. Ingesteld op -1 voor geen limiet, op 0 voor geen decompressie ooit. Max. text file size (MB) Max. tekstbestand groote (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Deze waarde stelt een drempel waarboven tekstbestanden niet zal worden verwerkt. Ingesteld op -1 voor geen limiet. Dit is voor het uitsluiten van monster logbestanden uit de index. Text file page size (KB) Tekst bestand pagina grootte (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Als deze waarde is ingesteld (niet gelijk aan -1), zal tekstbestanden worden opgedeeld in blokken van deze grootte voor indexering. Dit zal helpen bij het zoeken naar zeer grote tekstbestanden (bijv: log-bestanden). Max. filter exec. time (s) Max. uitvoertijd filter (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Externe filters die langer dan dit werken worden afgebroken. Dit is voor het zeldzame geval (bijv: postscript) wanneer een document een filterlus zou kunnen veroorzaken. Stel in op -1 voor geen limiet. Global Globaal ConfigSwitchDLG Switch to other configuration Overschakelen naar een andere configuratie ConfigSwitchW Choose other Kies een andere Choose configuration directory Kies configuratiemap CronToolW Cron Dialog Cron dialoogvenster <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexeer schema (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Een enkele numerieke waarde, door komma's gescheiden lijsten (1,3,5) en reeksen (1-7). Meer in het algemeen zullen de velden worden gebruikt <span style=" font-style:italic;">als </span> in het crontab bestand, en het volledige crontab syntax kan worden gebruikt, zie crontab (5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Bijvoorbeeld invoeren <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Dagen, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Uren</span> en <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minuten</span> zal recollindex starten op elke dag om 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Een schema met zeer frequent activering is waarschijnlijk minder efficiënt dan real time indexeren.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Dagen van de week (* of 0-7, of 7 is Zondag) Hours (* or 0-23) Uren (*of 0-23 Minutes (0-59) Minuten (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Klik <span style=" font-style:italic;">Uitzetten</span> om automatisch batch indexeren uit te zetten, <span style=" font-style:italic;">Aanzetten</span> om het te activeren, <span style=" font-style:italic;">Annuleren</span> om niets te doen</p></body></html> Enable Aanzetten Disable Uitzetten It seems that manually edited entries exist for recollindex, cannot edit crontab Het lijkt erop dat met de hand bewerkt ingaves bestaan voor recollindex, kan niet crontab bewerken Error installing cron entry. Bad syntax in fields ? Fout bij het instellen van cron job. Slechte syntax in de ingave? EditDialog Dialog Dialoog EditTrans Source path bronpad Local path lokaal pad Config error Configuratie fout Original path Oorspronkelijk pad Path in index Pad in index Translated path Vertaald pad EditTransBase Path Translations Pad vertalingen Setting path translations for zet vertalingspad voor Select one or several file types, then use the controls in the frame below to change how they are processed Selecteer één of meerdere bestandstypen, gebruik dan de bediening in het kader hieronder om te veranderen hoe ze worden verwerkt Add toevoegen Delete Verwijderen Cancel Annuleer Save Bewaar FirstIdxDialog First indexing setup Setup van eerste indexering <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Het blijkt dat de index voor deze configuratie niet bestaat.</span><br /><br />Als u gewoon uw home directory wilt indexeren met een set van redelijke standaardinstellingen, drukt u op de<span style=" font-style:italic;">Start indexeer nu</span>knop. Je zult in staat zijn om de details later aan te passen.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Als u meer controle wil, gebruik dan de volgende links om de indexering configuratie en het schema aan te passen.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Deze tools kunnen later worden geopend vanuit het<span style=" font-style:italic;">Voorkeuren</span> menu.</p></body></html> Indexing configuration Configuratie inedexering This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Dit laat u de mappen die u wilt indexeren, en andere parameters aan passen, zoals uitgesloten bestandspaden of namen, standaard character sets, enz. Indexing schedule Indexerings schema This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Dit zal u laten kiezen tussen batch en real-time indexering, en het opzetten van een automatisch schema voor batch indexeren (met behulp van cron) Start indexing now Begin nu met indexering FragButs %1 not found. %1 niet gevonden. %1: %2 %1: %2 Fragment Buttons Fragment knoppen Query Fragments Zoekterm fragmenten IdxSchedW Index scheduling setup indexing schema setup <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span>indexering kan permanent draaien, het indexeren van bestanden als ze veranderen, of lopen op vaste intervallen.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Het lezen van de handleiding kan helpen om te beslissen tussen deze benaderingen (druk op F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Deze tool kan u helpen bij het opzetten van een schema om batch indexeren runs te automatiseren, of het starten van real time indexeren wanneer u zich aanmeldt (of beide, dat is echter zelden zinvol). </p></body></html> Cron scheduling Cron schema The tool will let you decide at what time indexing should run and will install a crontab entry. Deze tool zal u laten beslissen op welk tijdstip het indexeren moet worden uitgevoerd en zal een crontab installeren. Real time indexing start up Real time indexering opstart Decide if real time indexing will be started when you log in (only for the default index). Beslis of real time indexeren wordt gestart wanneer u inlogt (alleen voor de standaard-index). ListDialog Dialog Dialoog venster GroupBox GroepVenster Main No db directory in configuration Geen db bestand in configuratie Could not open database in Kon de database niet openen in . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Klik op Annuleren als u het configuratiebestand wilt bewerken voordat u het indexeren start, of Ok om het verder te laten gaan. Configuration problem (dynconf Configuratieprobleem (dynconf "history" file is damaged or un(read)writeable, please check or remove it: Het "Geschiedenis" bestand is beschadigd of on(lees)schrijfbaar geworden, graag controleren of verwijderen: "history" file is damaged, please check or remove it: "geschiedenis" bestand is beschadigd, controleer of verwijder het: Needs "Show system tray icon" to be set in preferences! Moet "Systeemvakpictogram weergeven" worden ingesteld in de voorkeuren! PTransEdit Path in index Pad in index Translated path Vertaald pad Config error Configuratie fout Original path Oorspronkelijk pad Local path lokaal pad PTransEditBase Path Translations Pad vertalingen Select one or several file types, then use the controls in the frame below to change how they are processed Selecteer één of meerdere bestandstypen, en gebruik vervolgens de bedieningselementen in het kader hieronder om te wijzigen hoe ze worden verwerkt. Add toevoegen Delete Verwijderen Cancel Annuleer Save Bewaar Preview &Search for: &Zoek naar: &Next &Volgende &Previous &Vorige Match &Case Hoofd/kleine letter Clear Wissen Creating preview text preview tekst aan het maken Loading preview text into editor Preview tekst in editor aan het laden Cannot create temporary directory Kan tijdelijke map niet aanmaken Cancel Annuleer Close Tab Sluit tab Missing helper program: Help programma ontbreekt Can't turn doc into internal representation for Kan doc omzetten in een interne representatie Cannot create temporary directory: Kan tijdelijke map niet aanmaken: Error while loading file Fout bij het laden van bestand Form Vorm Tab 1 Tab 1 Open Openen Canceled Geannuleerd Error loading the document: file missing. Fout bij het laden van het document: bestand ontbreekt. Error loading the document: no permission. Fout bij laden van document: geen toestemming Error loading: backend not configured. Fout laden: backend niet geconfigureerd. Error loading the document: other handler error<br>Maybe the application is locking the file ? Fout bij het laden van het document: andere handler-fout<br>Vergrendelt de applicatie het bestand? Error loading the document: other handler error. Fout bij het laden van het document: andere verwerkingsfout. <br>Attempting to display from stored text. <br>Probeert weer te geven van opgeslagen tekst. Could not fetch stored text Opgeslagen tekst kon niet worden opgehaald Previous result document Vorig resultaat document Next result document Volgend resultaat document Preview Window Voorbeeld venster Close Window Sluit venster Next doc in tab Volgende doc op tabblad Previous doc in tab Vorige verwijzing naar tabblad Close tab Tabblad sluiten Print tab Print tab Close preview window Voorbeeld sluiten Show next result Toon het volgende resultaat Show previous result Toon vorig resultaat Print Druk af PreviewTextEdit Show fields Toon veld Show main text Toon hoofd tekst Print Druk af Print Current Preview Druk huidige Preview af Show image Toon afbeelding Select All Selecteer alles Copy Kopieer Save document to file Bewaar document als bestand Fold lines Vouw lijnen Preserve indentation Behoud inspringing Open document Document openen Reload as Plain Text Herladen als platte tekst Reload as HTML Herladen als HTML QObject Global parameters Globale parameters Local parameters Lokale parameters <b>Customised subtrees <b>Aangepaste substructuur The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. De lijst van de submappen in de geïndexeerde hiërarchie <br> waar sommige parameters moeten worden geherdefinieerd. Standaard: leeg. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>De parameters die volgen zijn ingesteld, hetzij op het hoogste niveau, als er niets <br>of een lege regel is geselecteerd in de keuzelijst boven, of voor de geselecteerde submap.<br> U kunt mappen toevoegen of verwijderen door op de +/- knoppen te klikken. Skipped names Overgeslagen namen These are patterns for file or directory names which should not be indexed. Dit zijn patronen voor bestand of de mappen namen die niet mogen worden geïndexeerd. Default character set Standaard tekenset This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Dit is de tekenset die gebruikt wordt voor het lezen van bestanden die de tekenset intern niet identificeren, bijvoorbeeld zuivere tekstbestanden.<br>De standaardwaarde is leeg en de waarde van de NLS-omgeving wordt gebruikt. Follow symbolic links Volg symbolische links Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Volg symbolische links tijdens het indexeren. De standaard is niet volgen, om dubbele indexering te voorkomen Index all file names Indexeer alle bestandsnamen Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indexeer de namen van bestanden waarvan de inhoud niet kan worden geïdentificeerd of verwerkt (geen of niet-ondersteunde MIME-type). standaard true Beagle web history Artsen internetgeschiedenis Search parameters Zoek parameters Web history Web geschiedenis Default<br>character set Standaard<br>karakter set Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Tekenset die wordt gebruikt voor het lezen van bestanden die het intern tekenset niet worden herkend, bijvoorbeeld pure tekstbestanden. Ondernemingen De standaard waarde is leeg en de waarde van de NLS-omgeving wordt gebruikt. Ignored endings Genegeerde eindes These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Dit zijn eindpunten voor bestanden die alleen worden geïndexeerd door inhoud (geen MIME-type identificatiepoging, geen decompressie, geen indexering van inhoud. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Dit zijn bestandsnaam eindes voor bestanden die zullen worden geïndexeerd door alleen de naam (geen MIME-type identificatie poging, geen decompressie, geen inhoud indexering). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>De volgende parameters worden ingesteld op het bovenste niveau als niets of een lege regel is geselecteerd in de lijst hierboven, of voor de geselecteerde submap. Je kunt mappen toevoegen of verwijderen door te klikken op de +/- knoppen. These are patterns for file or directory names which should not be indexed. Dit zijn patronen voor bestands- of mapnamen die niet geïndexeerd moeten worden. QWidget Create or choose save directory Maak of kies een bestandsnaam om op te slaan Choose exactly one directory Kies exact een map Could not read directory: kon map niet lezen Unexpected file name collision, cancelling. Onverwachte bestandsnaam botsing, annuleren. Cannot extract document: Kan het document niet uitpakken &Preview Voorvertoning &Open &Openen Open With Open met Run Script Voer script uit Copy &File Name Kopieer &Bestands Naam Copy &URL Kopieer &URL &Write to File &Schijf naar Bestand Save selection to files Bewaar selektie naar bestanden Preview P&arent document/folder Preview B&ovenliggende document/map &Open Parent document/folder &Open Bovenliggend document/map Find &similar documents Vindt &gelijksoortige documenten Open &Snippets window Open &Knipsel venster Show subdocuments / attachments Toon subdocumenten / attachments &Open Parent document &Bovenliggend document openen &Open Parent Folder &Bovenliggende map openen Copy Text Kopieer tekst Copy &File Path Kopieer &Bestandspad Copy File Name Kopieer bestandsnaam QxtConfirmationMessage Do not show again. Niet nogmaals tonen RTIToolW Real time indexing automatic start Automatisch Starten realtime-indexeren <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span>indexering kan worden ingesteld om te draaien als een daemon, het bijwerken van de index als bestanden veranderen, in real time. Je krijgt dan een altijd up-to-date index, maar systeembronnen worden permanent gebruikt.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Start met indexeren bij mijn desktop-sessie Also start indexing daemon right now. start nu ook de indexatie daemon Replacing: Vervanging Replacing file Vervang bestand Can't create: Kan niet aanmaken Warning Waarschuwing Could not execute recollindex Kon recollindex niet starten Deleting: Verwijderen Deleting file Verwijder bestand Removing autostart Verwijder autostart Autostart file deleted. Kill current process too ? Autostart ongedaan gemaakt proces ook stoppen ? Configuration name Configuratienaam Short alphanumeric nickname for this config Korte alfanumerieke bijnaam voor deze configuratie Could not find Kon niet vinden RclCompleterModel Hits Resultaten Hits RclMain About Recoll Over Recoll Executing: [ Uitvoeren: [ Cannot retrieve document info from database kan info van het document uit database niet lezen Warning Waarschuwing Can't create preview window kan preview venster niet maken Query results Zoekresultaat Document history Document geschiedenis History data Geschiedenis data Indexing in progress: Indexering is bezig Files Bestanden Purge Wissen Stemdb Stemdb Closing Sluiten Unknown Onbekend This search is not active any more Deze zoekopdracht is niet meer aktief Can't start query: Kan'starten met zoekopdracht: Bad viewer command line for %1: [%2] Please check the mimeconf file Verkeerde viewer opdrachtregel voor %1: [%2] Controleer het mimeconf bestand Cannot extract document or create temporary file kan het document niet uitpakken of een tijdelijk bestand maken (no stemming) Geen taal (all languages) alle talen error retrieving stemming languages Fout bij het ophalen van de stam talen Update &Index Indexeren &bijwerken Indexing interrupted Indexering onderbroken Stop &Indexing Stop &indexeren All Alle media Media message bericht other anders presentation presentatie spreadsheet rekenblad text tekst sorted gesorteerd filtered gefilterd External applications/commands needed and not found for indexing your file types: Externe applicaties/commando's nodig en niet gevonden voor het indexeren van uw bestandstypen: No helpers found missing Alle hulpprogrammas zijn aanwezig Missing helper programs Missende hulp programmas Save file dialog Bestand dialoogvenster opslaan Choose a file name to save under Kies een bestandsnaam om onder op te slaan Document category filter Document categorie filter No external viewer configured for mime type [ Geen externe viewer voor dit mime type geconfigureerd [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? De viewer gespecificeerd in mimeview voor %1: %2 is niet gevonden Wilt u het dialoogvenster voorkeuren openen? Can't access file: Geen toegang tot het bestand Can't uncompress file: Kan het bestand niet uitpakken Save file Bestand opslaan Result count (est.) Telresultaat(est.) Query details Zoekopdracht details Could not open external index. Db not open. Check external index list. kon externe index niet openen. Db niet geopend. Controleer externe indexlijst No results found Geen resultaten gevonden None Geen Updating Bijwerken Done afgerond Monitor Monitoren Indexing failed Indexering mislukt The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Het huidige indexering proces werdt niet gestart vanaf deze interface. Klik Ok om het toch te stoppen, of annuleren om het zo te laten Erasing index Wis index Reset the index and start from scratch ? De index resetten en geheel opnieuw beginnen? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Bezig met opdracht <br>Vanwege beperkingen van de indexeerder zal bij,<br>stop het programma in zijn geheel sluiten! Error Fout Index not open Index is niet open Index query error Index vraag fout Indexed Mime Types Geïndexeerde MIME-types Content has been indexed for these MIME types: Inhoud is geïndexeerd voor deze MIME-types: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Index niet up to date voor dit bestand. Hergebruik om het risico te lopen de verkeerde invoer te tonen. Klik Ok om de index voor dit bestand bij te werken, en voer daarna de query opnieuw uit als indexering is voltooid. Oké, Annuleren. Can't update index: indexer running kan het index niet bijwerken:indexeren is al aktief Indexed MIME Types Geindexeerd MIME Types Bad viewer command line for %1: [%2] Please check the mimeview file Verkeerde command line voor viewer %1:[%2'] controleer mimeview van bestand Viewer command line for %1 specifies both file and parent file value: unsupported Viewer command line voor %1 specificeerd zowel het bestandtype als het parentfile type waarde: niet ondersteund Cannot find parent document kan parent van document niet vinden Indexing did not run yet Indexering is nog niet bezig External applications/commands needed for your file types and not found, as stored by the last indexing pass in Externe toepassingen / commandos die nodig zijn voor dit bestandstype en niet gevonden, zoals opgeslagen in de laatste indexerings poging Index not up to date for this file. Refusing to risk showing the wrong entry. Index niet up to date voor dit bestand. Hergebruik om het risico te lopen de verkeerde invoer te tonen. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Klik Ok om de index voor dit bestand bij te werken, en voer daarna de query opnieuw uit als indexering is voltooid. Oké, Annuleren. Indexer running so things should improve when it's done Indexeren draaien, dus dingen moeten verbeteren wanneer'is voltooid Sub-documents and attachments Sub-documenten en attachments Document filter Document filter Index not up to date for this file. Refusing to risk showing the wrong entry. Index voor dit bestand is niet op tu date. geweigerd om verkeerde inforamtie te tonen te riskeren Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Klik Ok om de index voor dit bestand bij te werken, daarna moet u de opdracht opnieuw uitvoeren na het indexeren The indexer is running so things should improve when it's done. De indexeerder is bezig dus er zou een verbetering moeten optreden als hij klaar is. The document belongs to an external indexwhich I can't update. Het document behoort tot een externe indexering die ik'kan bijwerken. Click Cancel to return to the list. Click Ignore to show the preview anyway. Klik op Annuleren om terug te keren naar de lijst. Klik op Negeren om de voorbeeldweergave toch weer te geven. Duplicate documents Vermenigvuldig documenten These Urls ( | ipath) share the same content: Deze Urls (ipath) hebben dezelfde inhoud: Bad desktop app spec for %1: [%2] Please check the desktop file Verkeerde desktop snelkoppeling for %1:[%2] Graag de desktop snelkoppeling controleren Bad paths Pad verkeerd Bad paths in configuration file: Verkeerd pad in configuratie bestand Selection patterns need topdir Patronen selecteren vraagt een begin folder Selection patterns can only be used with a start directory Patronen selecteren kan alleen gebruikt worden met een start folder No search Niets gezocht No preserved previous search Geen opgeslagen vorige zoekresultaten Choose file to save Kies bestand om op te slaan Saved Queries (*.rclq) Bewaarde Zoekopdrachten (*.rclq) Write failed Schrijf fout Could not write to file Kan niet schrijven naar bestand Read failed Lees fout Could not open file: Kan bestand niet openen Load error Laad fout Could not load saved query Kon bewaarde zoekopdracht niet laden Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Openen van tijdelijke kopie.Alle bewerkingen zullen verloren gaan als u ze niet opslaat naar een permanente lokatie Do not show this warning next time (use GUI preferences to restore). Laat deze waarschuwing niet meer zien (gebruik GUI voorkeuren om te herstellen) Disabled because the real time indexer was not compiled in. Uitgeschakeld omdat real-time indexering niet ingeschakeld is This configuration tool only works for the main index. Deze configuratie tool werkt alleen voor de hoofdindex The current indexing process was not started from this interface, can't kill it Het huidige indexerings proces werdt niet gestart vanaf deze interface, kan het niet stoppen The document belongs to an external index which I can't update. Het document hoort bij een externe index die niet up te daten is Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Klik op annuleren om terug te keren naar de lijst. <br>Klik negeren om het voorbeeld toch te tonen( en te onthouden voor deze sessie) Index scheduling Index schema Sorry, not available under Windows for now, use the File menu entries to update the index Het spijt ons, dit is nog niet beschikbaar voor het windows platform, gebruik het bestands ingave menu om de index te updaten Can't set synonyms file (parse error?) kan synomiemen bestand niet instellen ( parse error?) Index locked index geblokkeerd Unknown indexer state. Can't access webcache file. De staat van de indexer is onbekend. Kan geen toegang krijgen tot het webcache bestand. Indexer is running. Can't access webcache file. De indexeerder is bezig. Geen toegang tot webcache with additional message: met extra bericht: Non-fatal indexing message: Bericht bij niet-fatale indexering: Types list empty: maybe wait for indexing to progress? Types lijst leeg: wacht misschien tot indexering doorgaat? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Bekijken opdrachtregel voor %1 geeft het bovenliggende bestand aan, maar de URL is http[s]: niet ondersteund Tools Gereedschappen Results Resultaten (%d documents/%d files/%d errors/%d total files) (%d documenten/%d bestanden/%d fouten /%d totale bestanden) (%d documents/%d files/%d errors) (%d documenten/%d bestanden/%d fouten) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Lege of niet-bestaande paden in het configuratiebestand. Klik OK om te beginnen met indexeren (afwezige gegevens zullen niet verwijderd worden uit de indexering): Indexing done Indexeren voltooid Can't update index: internal error Kan'bij te werken index: interne fout Index not up to date for this file.<br> Index niet up-to-date voor dit bestand.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Ook lijkt het erop dat de laatste index update voor het bestand is mislukt.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Klik op Ok om de index voor dit bestand bij te werken. U moet de query opnieuw uitvoeren wanneer de indexering is voltooid.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Klik op Annuleren om terug te keren naar de lijst.<br>Klik op Negeren om het voorbeeld toch te tonen (en vergeet niet voor deze sessie). Het risico bestaat dat de verkeerde inzending wordt getoond.<br/> documents documenten document document files bestanden file bestand errors fouten error fout total files) totale bestanden) No information: initial indexing not yet performed. Geen informatie: initiële indexering nog niet uitgevoerd. Batch scheduling Batch planning The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. De tool laat u beslissen op welk tijdstip het indexeren moet worden uitgevoerd. Het gebruikt de taakplanner. Confirm Bevestigen Erasing simple and advanced search history lists, please click Ok to confirm Verwijder eenvoudige en geavanceerde zoekgeschiedenislijsten, klik op OK om te bevestigen Could not open/create file Kon bestand niet openen/aanmaken F&ilter F&ilter Could not start recollindex (temp file error) Kan recoldex niet starten (tijdelijke bestandsfout) Could not read: Kan niet lezen: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Dit zal de huidige inhoud van de lijst met koptekst en de GUI qss bestandsnaam vervangen. Doorgaan? You will need to run a query to complete the display change. U moet een query uitvoeren om de weergavewijziging te voltooien. Simple search type Eenvoudig zoektype Any term Elke term All terms Alle termen File name Bestandsnaam Query language Zoek taal Stemming language Stam taal Main Window Hoofd venster Focus to Search Focus om te zoeken Focus to Search, alt. Focus om te zoeken, alt. Clear Search Zoekopdracht wissen Focus to Result Table Focus op resultaat tabel Clear search Zoekopdracht wissen Move keyboard focus to search entry Verplaats toetsenbord focus om item te zoeken Move keyboard focus to search, alt. Verplaats toetsenbord focus om te zoeken, alt. Toggle tabular display Tabulaire weergave in-/uitschakelen Move keyboard focus to table Verplaats toetsenbord focus naar tabel Flushing Doorspoelen Show menu search dialog Toon het zoekmenuvenster Duplicates Duplicaten Filter directories Filter mappen Main index open error: Hoofdindex open fout: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. De index kan beschadigd zijn. Misschien moet u proberen xapian-check uit te voeren of de index opnieuw op te bouwen? This search is not active anymore Deze zoekopdracht is niet meer actief. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Viewer-opdrachtregel voor %1 geeft ouderbestand aan maar URL is geen file:// : niet ondersteund The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? De viewer gespecificeerd in mimeview voor %1: %2 is niet gevonden. Wilt u het voorkeurenvenster openen? Show advanced search dialog Toon geavanceerd zoekvenster with additional message: RclMainBase Previous page Vorige pagina Next page Volgende pagina &File &Bestand E&xit V&erlaten &Tools &Gereedschappen &Help &Hulp &Preferences &Voorkeuren Search tools Zoek gereedschappen Result list Resultaatslijst &About Recoll &Over Recoll Document &History Document & Geschiedenis Document History Document geschiedenis &Advanced Search &Geavanceerd Zoeken Advanced/complex Search Uitgebreid/ Geavanceerd Zoeken &Sort parameters &Sorteer parameters Sort parameters Sorteer parameters Next page of results Volgende resultaten pagina Previous page of results Vorige pagina met resultaten &Query configuration &Query configuratie &User manual &Gebruiks handleiding Recoll Herstellen Ctrl+Q Crtl+ Q Update &index Update &indexeerder Term &explorer Term &onderzoeker Term explorer tool Termen onderzoekers gereedschap External index dialog Extern index dialoog &Erase document history &Wis bestands geschiedenis First page Eerste pagina Go to first page of results Ga naar de eerste pagina van resultaten &Indexing configuration &Configuratie inedexering All Alle &Show missing helpers Ontbrekende helpers weergeven PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen &Volledig Scherm F11 F11 Full Screen Volledig Scherm &Erase search history &Wis zoekgeschiedenis sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Sorteer op datum van oud naar nieuw sortByDateDesc sorteerByDateDesc Sort by dates from newest to oldest Sorteer op datum van oud naar nieuw Show Query Details Toon zoek detials Show results as table Resultaten als tabel weergeven &Rebuild index &Vernieuw de gehele index &Show indexed types Geïndexeerde types weergeven Shift+PgUp Shift+PgUp &Indexing schedule &Indexerings schema E&xternal index dialog E&xternal index dialoog &Index configuration &Index configuratie &GUI configuration &GUI configuratie &Results &Resultaten Sort by date, oldest first Sorteer op datume, oudste eerst Sort by date, newest first Sorteer op datum, nieuwste eerst Show as table Toon als tabel Show results in a spreadsheet-like table Toon het resultaat in een spreadsheet achtig tabel Save as CSV (spreadsheet) file Bewaar als CVS ( spreadsheet) bestand Saves the result into a file which you can load in a spreadsheet Bewaar het resultaat naar een bestand die te laden is in een spreadsheet Next Page Volgende Pagina Previous Page Vorige Pagina First Page Eerste Pagina Query Fragments Zoek fragmenten With failed files retrying Opnieuw proberen met mislukte bestand Next update will retry previously failed files De volgende update zal de eerder mislukte bestanden opnieuw proberen Save last query Bewaar laatste zoekopdracht Load saved query Laad bewaarde zoekopdracht Special Indexing Speciale Indexering Indexing with special options Indexeren met speciale opties Indexing &schedule Indexing &schema Enable synonyms Schakel synoniemen in &View &Bekijken Missing &helpers Missend & Hulpprogrammas Indexed &MIME types Geindexeerd &MIME types Index &statistics Index & statistieken Webcache Editor Webcache Editor Trigger incremental pass Trigger incrementele pas E&xport simple search history E&xporteer eenvoudige zoekgeschiedenis Use default dark mode Gebruik standaard donkere modus Dark mode Donkere modus &Query &Query Increase results text font size Vergroot de lettergrootte van de zoekresultaten. Increase Font Size Vergroot lettergrootte Decrease results text font size Verminder de lettergrootte van de zoekresultaten. Decrease Font Size Verklein lettergrootte Start real time indexer Start real time indexer Start real time indexer Query Language Filters Zoektaal Filters Filter dates Filter datums Assisted complex search Ondersteunde complexe zoekopdracht Filter birth dates Filter geboortedata Switch Configuration... Schakel configuratie... Choose another configuration to run on, replacing this process Kies een andere configuratie om op uit te voeren, ter vervanging van dit proces. &User manual (local, one HTML page) Gebruikershandleiding (lokaal, één HTML-pagina) &Online manual (Recoll Web site) Online handleiding (Recoll-website) Path translations Padvertalingen With failed files retrying RclTrayIcon Restore Herstellen Quit Afsluiten RecollModel Abstract Uittreksel Author Auteur Document size Bestands grootte Document date Bestands datum File size Bestands grootte File name Bestands naam File date Bestands datum Ipath Ipad Keywords Sleutelwoorden Mime type Mime type Original character set Origineel karakter set Relevancy rating relevantiewaarde Title Titel URL URL Mtime Mtijd Date Datum Date and time Datum en tijd MIME type MIME-type Can't sort by inverse relevance Kan't sorteren op inverse relevantie ResList Result list Resultaatslijst Unavailable document Document niet beschikbaar Previous Vorige Next Volgende <p><b>No results found</b><br> <p><b>Geen resultaat gevonden</b><br> &Preview &Bekijken Copy &URL Kopieer &URL Find &similar documents Vindt &gelijksoortige documenten Query details Zoekopdracht details (show query) (toon zoekopdracht) Copy &File Name Kopieer &Bestands Naam filtered gefilterd sorted gesorteerd Document history Document historie Preview Bekijken Open Openen <p><i>Alternate spellings (accents suppressed): </i> <p><i>Alternatieve spellingen (accenten onderdrukken): </i> &Write to File &Schijf naar Bestand Preview P&arent document/folder Preview B&ovenliggende document/map &Open Parent document/folder &Open Bovenliggend document/map &Open &Openen Documents Documenten out of at least van tenminste for voor <p><i>Alternate spellings: </i> <p><i>Alternatieve spelling: </i> Open &Snippets window Open &Knipsel venster Duplicate documents Vermenigvuldig documenten These Urls ( | ipath) share the same content: Deze Urls (ipath) hebben dezelfde inhoud: Result count (est.) Resultaten telling (est.) Snippets Knipsel This spelling guess was added to the search: Deze spellingsuggestie is toegevoegd aan de zoekopdracht: These spelling guesses were added to the search: Deze spelling suggesties zijn toegevoegd aan de zoekopdracht: ResTable &Reset sort &Opnieuw sorteren &Delete column &Verwijder kolom Add " Toevoegen " " column " kolom Save table to CSV file Bewaar lijst als cvs bestand Can't open/create file: Kan bestand niet openen/ bewaren: &Preview &Bekijken &Open &Openen Copy &File Name Kopieer &Bestands Naam Copy &URL Kopieer &URL &Write to File &Schijf naar Bestand Find &similar documents Vindt &gelijksoortige documenten Preview P&arent document/folder Preview B&ovenliggende document/map &Open Parent document/folder &Open Bovenliggend document/map &Save as CSV &Bewaar als CVS Add "%1" column Voeg "%1" kolom toe Result Table Resultaat tabel Open Openen Open and Quit Openen en afsluiten Preview Bekijken Show Snippets Tekstfragmenten tonen Open current result document Open huidig resultaat document Open current result and quit Huidige resultaat openen en afsluiten Show snippets Tekstbouwstenen tonen Show header Toon koptekst Show vertical header Toon verticale koptekst Copy current result text to clipboard Kopieer huidige resultaattekst naar klembord Use Shift+click to display the text instead. Gebruik Shift+klik om de tekst weer te geven. %1 bytes copied to clipboard %1 bytes gekopieerd naar klembord Copy result text and quit Kopieer resultaattekst en sluit ResTableDetailArea &Preview &Bekijken &Open &Openen Copy &File Name Kopieer &Bestands Naam Copy &URL Kopieer &URL &Write to File &Schijf naar Bestand Find &similar documents Vindt &gelijksoortige documenten Preview P&arent document/folder Preview B&ovenliggende document/map &Open Parent document/folder &Open Bovenliggend document/map ResultPopup &Preview &Bekijken &Open &Openen Copy &File Name Kopieer &Bestands Naam Copy &URL Kopieer &URL &Write to File &Schijf naar Bestand Save selection to files Bewaar selektie naar bestanden Preview P&arent document/folder Preview B&ovenliggende document/map &Open Parent document/folder &Open Bovenliggend document/map Find &similar documents Vindt &gelijksoortige documenten Open &Snippets window Open &Knipsel venster Show subdocuments / attachments Toon subdocumenten / attachments Open With Open met Run Script Voer script uit SSearch Any term Elke term All terms Alle termen File name Bestandsnaam Completions Voltooiing Select an item: Selecteer een item: Too many completions Te veel aanvullingen Query language Zoek taal Bad query string Foute zoekterm Out of memory Geen geheugen meer Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Voer query taalexpressie in. Cheat sheet:<br> <i>term1 term2</i> : 'term1' en 'term2' in elk veld.<br> <i>field:term1</i> : 'term1' in veld 'veld'.<br> Standaard veldnamen/synoniemen:<br> titel/onderwerp/ondertiteling, auteur/van, ontvanger/tot, bestandsnaam, ext.<br> Pseudo-velden: dir, mime/format, type/rclcat, date.<br> Twee datum interval exemplaars: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 EN (term2 OR term3).<br> haakjes zijn niet toegestaan.<br> <i>"term1 term2"</i> : phrase (moet precies gebeuren). Mogelijke wijzigingen:<br> <i>"term1"per</i> : ongeordende nabijheidszoekopdracht met standaard afstand.<br> Gebruik <b>Toon Query</b> link bij twijfel over het resultaat en zie de handleiding (&lt; 1>) voor meer detail. Enter file name wildcard expression. Voer bestandsnaam wildcard uitdrukking in. Enter search terms here. Type ESC SPC for completions of current term. Voer zoekterm hier in. Type ESC SPC als aanvulling voor huidige term Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Zoekterm'taal expressie. Cheat sheet: <br> <i> term1 term2 </i>. 'Term1' en 'term2' op elk gebied <br> <i> veld: term1 </i>. 'Term1' in 'het veld' veld <br> Standaard veldnamen / synoniemen: <br> titel / onderwerp / titel, auteur / uit, ontvanger / to, filename, ext. <br> Pseudo-velden: dir, mime / format, het type / rclcat, datum, grootte <br>. Twee datuminterval Voorbeelden: 2009-03-01 / 2009-05-20 2009-03-01 / P2M <br>. <i> term1 term2 OR term3 </i>: term1 AND (term2 OR term3) <br>. U kunt haakjes gebruiken om dingen duidelijker te maken. <br> <i> "term1 term2" </i>: zin (moet precies gebeuren). Mogelijke modifiers: <br> <i> "term1 term2" p </i>. Ongeordende nabijheid zoeken met de standaard afstand <br> Gebruik <b> Toon Zoekterm </b> in geval van twijfel over de uitslag en zie handleiding (& lt; F1>) voor meer informatie. Stemming languages for stored query: Stam taal voor opgeslagen zoekopdrachten: differ from current preferences (kept) Afwijken van de uidig (bewaarde) voorkeuren Auto suffixes for stored query: Automatische aanvullingen voor opgeslagen zoeken External indexes for stored query: External indexen voor opgeslagen zoekopdrachten: Autophrase is set but it was unset for stored query Auto aanvullen is ingesteld, maar het was uitgeschakeld voor de opgeslagen zoekopdracht Autophrase is unset but it was set for stored query Automatisch aanvullen is uitgeschakeld maar was ingesteld voor opegeslagen zoekopdracht Enter search terms here. Vul hier zoektermen in. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border-collapse: instorten; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Query language cheat-sheet . Klik in twijfel: <b>Toon query</b>.&nbsp; You should really look at the manual (F1)</p> Je zou echt naar de handleiding moeten kijken (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Wat</th><th>Voorbeelden</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>En</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Of</td><td>een OF twee&nbsp;&nbsp;&nbsp;een vijand twee</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Complex Boolean. OF heeft prioriteit, gebruik haakjes&nbsp; where needed</td><td>(one AND two) OR three</td></tr> waar je</td><td>(één EN twee) OF 3</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Niet</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Zin</td><td>"trots en vooroordeel"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Ongeordende prox. (standaard slack=10)</td><td>"vooroordelen&nbsp;trots"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Geen stamexpansie: hoofdletter</td><td>vloer</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Velden-specifiek</td><td>auteur:austen&nbsp;&nbsp;titel:vooroor</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>EN binnen het veld (geen volgorde)</td><td>auteur:jane, austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OF binnen het veld</td><td>auteur:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>veldnamen</td><td>titel/onderwerp/onderschrift&nbsp;&nbsp;auteur/van<br>ontvanger/&nbsp;&nbsp;bestandsnaam&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Map pad filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME-type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Datumintervallen</td><td>datum:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> datum:2018&nbsp;&nbsp;datum:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Kan'de index openen Could not restore external indexes for stored query:<br> Externe indexen konden niet worden hersteld voor opgeslagen zoekopdracht:<br> ??? ??? Using current preferences. Gebruik huidige voorkeuren. Simple search Eenvoudig zoeken History Geschiedenis <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <p>Overzicht van querytaal. Bij twijfel: klik op <b>Toon Query Details</b>.&nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Hoofdletters om stamuitbreiding te onderdrukken</td><td>Vloer</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SZoekBasis Clear Wissen Ctrl+S Crtl+S Erase search entry Wis zoekopdracht Search Zoeken Start query Start zoekopdracht Enter search terms here. Type ESC SPC for completions of current term. Voer de zoekopdracht term hier in. Type ESC SPC om huidige termen aan te vullen Choose search type. Kies zoektype. Show query history Query geschiedenis weergeven Enter search terms here. Vul hier zoektermen in. Main menu Hoofd menu SearchClauseW SearchClauseW ClauseW zoeken Any of these Een van deze All of these Al deze None of these Geen van deze This phrase Deze zin Terms in proximity Voorwaarden in nabijheid File name matching Bestandsnaam komt overeen Select the type of query that will be performed with the words Selecteer het type zoekopdracht dat zal worden uitgevoerd met de woorden: Number of additional words that may be interspersed with the chosen ones Aantal extra woorden die kunnen worden ingevoegd met de gekozen woorden In field In veld No field Geen veld Any Elke All Alle None Geen Phrase Frase Proximity Ongeveer File name Bestandsnaam Snippets Snippets Knipsels X X Find: Vindt: Next Volgende Prev Vorige SnippetsW Search Zoek <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <P> Sorry, niet iets precies kunnen vinden. Waarschijnlijk is het document zeer groot en is de knipsels generator verdwaald in een doolhof ... </ p> Sort By Relevance Sorteren op relevantie Sort By Page Sorteren op pagina Snippets Window Snippets venster Find Vind Find (alt) Zoeken (alternatief) Find Next Volgende zoeken Find Previous Vorige zoeken Hide Verbergen Find next Volgende zoeken Find previous Vorige zoeken Close window Sluit venster Increase font size Vergroot lettergrootte Decrease font size Verklein lettergrootte SortForm Date Datum Mime type Mime type SortFormBase Sort Criteria Sorteer criteria Sort the Sorteer de most relevant results by: meest relevante resultaten door: Descending Aflopend Close sluit Apply Toepassen SpecIdxW Special Indexing Speciale indexering Do not retry previously failed files. Probeerniet nog eens de vorig niet gelukte bestanden Else only modified or failed files will be processed. Anders zullen alleen de veranderende of gefaalde bestanden verwerkt worden Erase selected files data before indexing. Wis de geselecteerde bestandens data voor de indexering Directory to recursively index Map naar recursieve index Browse Bladeren Start directory (else use regular topdirs): Begin Map (anders de normale hoofdmappen gebruiken) Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Laat dit leeg om alle bestanden te kunnen selecteren. U kunt meerdere spaties gescheiden shell-type patronen gebruiken. <br> Patronen met ingesloten ruimtes moeten aangeduid worden met dubbele aanhalingstekens. <br> Kan alleen worden gebruikt als het hoofddoel is ingesteld Selection patterns: Selecteer patronen Top indexed entity Hoofd index identiteit Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Map om recursief te indexeren. Dit moet binnen het reguliere geindexeerde gebied zijn<br>zoals ingesteld in het configuratiebestand (hoofdmappen) Retry previously failed files. Probeer eerder mislukte bestanden opnieuw Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Moet deel uitmaken van de geïndexeerde boom. We gebruiken topdaturen indien leeg. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Start directory. Moet deel uitmaken van de geïndexeerde boom. Gebruik volledig geïndexeerd gebied indien leeg. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnostisch uitvoerbestand. Zal worden afgekapt en ontvangt indexdiagnostiek (redenen waarom bestanden niet worden geïndexeerd). Diagnostics file Diagnostisch bestand SpellBase Term Explorer Term onderzoeker &Expand &Uitvouwen Alt+E Alt+E &Close &Sluiten Alt+C Alt+C Term Termijn No db info. Geen db info. Doc. / Tot. Doc./Tot. Match Gelijk Case Hoofdletter Accents Accenten SpellW Wildcards wildcards Regexp Regexp Spelling/Phonetic Spelling/Phonetisch Aspell init failed. Aspell not installed? Aspell init faalt. Is Aspell niet geinstalleerd? Aspell expansion error. Aspell expansie fout. Stem expansion Stam expansie error retrieving stemming languages Fout bij het ophalen van woordstam talen No expansion found Geen expansie gevonden Term Termijn Doc. / Tot. Doc./Tot. Index: %1 documents, average length %2 terms Index: %1 documenten, gemiddelde lengte %2 termen Index: %1 documents, average length %2 terms.%3 results Index: %1 documenten, wisselende lengte %2 termen.%3 resultaten %1 results %1 resultaten List was truncated alphabetically, some frequent De lijst is alfabetisch afgebroken, sommige frequenter terms may be missing. Try using a longer root. Er kunnen termen ontbreken. Probeer gebruik te maken van een langere root Show index statistics Toon indexeer statistieken Number of documents Aantal documenten Average terms per document Gemiddelde termen per document Smallest document length Kleinste documentlengte Longest document length Langste documentlengte Database directory size Database map grootte MIME types: MIME types Item Artikel Value Waarde Smallest document length (terms) Kleinste document lengte (termen) Longest document length (terms) Langste document lengte (termen) Results from last indexing: resultaten van vorige indexering Documents created/updated Documenten gemaakt/bijgewerkt Files tested Bestanden getest Unindexed files Ongeindexeerde bestanden List files which could not be indexed (slow) Bestanden weergeven die niet geïndexeerd konden worden (langzaam) Spell expansion error. Spel uitbreidingsfout. Spell expansion error. Spelfoutuitbreidingfout. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index De geselecteerde map schijnt geen Xapian index te zijn This is the main/local index! Dit is de hoofd/lokale index! The selected directory is already in the index list De geselecteerde map bestaat al in de index lijst Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Selecteer xapiaanse index map (bv: /home/buddy/.recoll/xapiandb) error retrieving stemming languages fout bij het ophalen van de stam talen Choose Kies Result list paragraph format (erase all to reset to default) Resultaten lijst paragrafen formaat (wist alles en reset naar standaard) Result list header (default is empty) Resultaten koppen lijst ( is standaard leeg) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Selecteer recoll config map of xapian index map (bijv.: /home/me/.recoll of /home/me/.recoll/xapian db) The selected directory looks like a Recoll configuration directory but the configuration could not be read De geselecteerde map ziet eruit als een Recoll configuratie map, maar de configuratie kon niet worden gelezen At most one index should be selected Tenminste moet er een index worden geselecteerd Cant add index with different case/diacritics stripping option Kan index met verschillende hoofdletters/ diakritisch tekens opties niet toevoegen Default QtWebkit font Standaard QtWebkit lettertype Any term Elke term All terms Alle termen File name Bestandsnaam Query language Zoek taal Value from previous program exit Waarde van vorige programma afsluiting Context Context Description Beschrijving Shortcut Snelkoppeling Default Standaard Choose QSS File Kies QSS-bestand Can't add index with different case/diacritics stripping option. Kan geen index toevoegen met een andere optie voor hoofdletter/diacritische tekens verwijderen. Light Licht Dark Donker System Systeem UIPrefsDialogBase User interface Gebruikers interface Number of entries in a result page Opgegeven aantal van weergaves per resultaten pagina Result list font Resultaten lijst lettertype Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Opent een dialoog om de resultaten lijst lettertype te selecteren Reset Herstel Resets the result list font to the system default Reset het resultaten lijst lettertype naar systeem standaardwaarde Auto-start simple search on whitespace entry. Autostart eenvoudige zoekopdracht bij ingave in de witruimte. Start with advanced search dialog open. Start met geavanceerd zoek dialog open. Start with sort dialog open. Start met open sorteerdialoogvenster. Search parameters Zoek parameters Stemming language Stam taal Dynamically build abstracts Dynamisch abstracten bouwen Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Moeten we proberen om abstracten voor resultatenlijst invoering op te bouwen met behulp van de context van de zoektermen? Kan traag zijn met grote documenten. Replace abstracts from documents Vervang abstracten van documenten Do we synthetize an abstract even if the document seemed to have one? Moeten we een abstract maken, zelfs als het document er al een blijkt te hebben? Synthetic abstract size (characters) Synthetische abstractie grootte (tekens) Synthetic abstract context words Synthetische abstract context woorden External Indexes Externe indexen Add index Index toevoegen Select the xapiandb directory for the index you want to add, then click Add Index Selecteer de xapiandb map voor de index die je wilt toevoegen, klik daarna op Index toevoegen. Browse Bladeren &OK &Oké Apply changes Veranderingen doorvoeren &Cancel &Annuleren Discard changes Veranderingen ongedaan maken Result paragraph<br>format string Resultaat alinea<br>opmaak tekenreeks Automatically add phrase to simple searches Automatisch aanvullen van eenvoudige zoekopdrachten A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Een zoekopdracht naar '[rollende stenen] (2 termen) wordt gewijzigd in [rollen of stenen of (rollende frase 2 stenen)]. Dit zou een hogere prioriteit moeten geven aan de resultaten, waar de zoektermen precies zoals ingevoerd moeten verschijnen. User preferences Gebruikers voorkeuren Use desktop preferences to choose document editor. Gebruik de desktopvoorkeuren om documentbewerker te kiezen. External indexes Externe indexen Toggle selected Toggle geselecteerde Activate All Alles Activeren Deactivate All Alles Deactiveren Remove selected Geselecteerde verwijderen Remove from list. This has no effect on the disk index. Verwijder van de lijst. Dit heeft geen effect op de schijf index. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definieert het formaat voor elke alinea met resultatenlijst. Gebruik qt html-formaat en printf-achtige vervangingen:<br>%A Abstract<br> %D Datum<br> %I Naam van pictogramafbeelding<br> %K Sleutelwoorden (indien aanwezig)<br> %LVoorbeeld bekijken en links bewerken<br> %M Mime type<br> %N Resultaat nummer<br> %R Relevantiepercentage<br> %S Maat informatie<br> %T Titel<br> %U Url<br> Remember sort activation state. Onthoud sorteer activatie status Maximum text size highlighted for preview (megabytes) Maximale tekst groote highlighted voor preview (megabytes) Texts over this size will not be highlighted in preview (too slow). Teksten groter dan dit zullen niet worden highlighted in previews (te langzaam). Highlight color for query terms Highlight kleur voor zoektermen Prefer Html to plain text for preview. Html voorkeur in plaats van gewoon tekst als preview If checked, results with the same content under different names will only be shown once. Indien aangevinkt, zullen de resultaten met dezelfde inhoud onder verschillende namen slecht eenmaal worden getoond. Hide duplicate results. Verberg duplicaat resultaten. Choose editor applications Kies editor toepassingen Display category filter as toolbar instead of button panel (needs restart). Toon categorie filter als werkbalk in plaats van knop paneel (vereist herstart). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. De woorden in de lijst zal automatisch omgezet worden naar ext:xxx clausules in de zoektaal ingave. Query language magic file name suffixes. Zoek taal magic bestandsnaam achtervoegsel Enable Aanzetten ViewAction Changing actions with different current values Acties met verschillende huidige waarden wijzigen Mime type Mime type Command Opdracht MIME type MIME-type Desktop Default Desktop Standaard Changing entries with different current values invoering van verschillende huidige waardes veranderd ViewActionBase File type Soort bestand Action actie Select one or several file types, then click Change Action to modify the program used to open them Selecteer een of meerdere bestandstypes en klik vervolgens op 'Wijzigen' actie om het programma te wijzigen dat wordt gebruikt om ze te openen Change Action Wijzig actie Close Afsluiten Native Viewers Standaard Viewers Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Selecteer een of meerdere MIME-types en klik vervolgens op "Actie wijzigen"<br>U kunt dit dialoogvenster ook sluiten en controleren "Gebruik desktopvoorkeuren"<br>in het hoofdvenster om deze lijst te negeren en uw bureaublad standaardwaarden te gebruiken. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Slecteer een of meerdere mime types gebruik vervolgens de instellingen onderin het venster om de verwerkingen aan te passen Use Desktop preferences by default Gebruik Desktop voorkeuren als standaard Select one or several file types, then use the controls in the frame below to change how they are processed Selecteer een of meerdere bestandstypes, gebruik vervolgens de instellingen onderin het venster hoe ze verwerkt worden Exception to Desktop preferences Uitzonderingen op Desktop voorkeuren Action (empty -> recoll default) Aktie (leeg -> recoll standaard) Apply to current selection Toepassen op huidige selectie Recoll action: Recoll acties current value huidige waarde Select same Selecteer dezelfde <b>New Values:</b> <b>Nieuwe Waardes:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. De waarde is een opdrachtregel die moet worden uitgevoerd. Vervangingen: %s: zoekreeks; %p: paginanummer; <br>%f: documentbestandsnaam. F1 voor meer hulp. Webcache Webcache editor Webcache bewerker Search regexp Zoek regexp TextLabel Tekstlabel WebcacheEdit Copy URL Kopieer URL Unknown indexer state. Can't edit webcache file. Status van indexer onbekend. Kan webcache bestand niet bewerken. Indexer is running. Can't edit webcache file. Indexer is aan het werken. Kan webcache bestand niet bewerken. Delete selection Verwijder selectie Webcache was modified, you will need to run the indexer after closing this window. Webcache is gewijzigd, u zult de indexer opnieuw moeten uitvoeren na het sluiten van dit venster Save to File Opslaan naar bestand File creation failed: Bestand aanmaken mislukt: Maximum size %1 (Index config.). Current size %2. Write position %3. Maximale grootte %1 (Index config.). Huidige grootte %2. Schrijfpositie %3. WebcacheModel MIME MIJN Url URL Date Datum Size Grootte URL URL WinSchedToolW Error Fout Configuration not initialized Configuratie niet geïnitialiseerd <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexeren van batchplanning</h3><p>We gebruiken hiervoor de standaard Windows taakplanner. Het programma wordt gestart wanneer je op de knop hieronder klikt.</p><p>U kunt ofwel de volledige interface gebruiken (<i>taak aanmaken</i> in het menu aan de rechterkant) of de vereenvoudigde <i>Maak de basistaak</i> wizard aan. In beide gevallen kopieer en plak je het bestandspad hieronder als de <i>actie</i> om uit te voeren.</p> Command already started Commando is al gestart Recoll Batch indexing Recoll batchindexering Start Windows Task Scheduler tool Start Windows Taakplanner tool Could not create batch file Kon geen batchbestand maken confgui::ConfBeaglePanelW Steal Beagle indexing queue Steel Beagle indexeer wachtrij Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Nou, waarom moet je dat NIET doen. Maakt het mogelijk om de rijen van Firefox de geschiedenis te indexeren.<br>(je zou ook de Firefox Beagle plugin moeten installeren) Web cache directory name Webcache map naam The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. De naam voor een map waar de cache opgeslagen moet worden voor bezochte webpagina's.<br>Een niet-absoluut pad is genomen relatief aan de configuratiemap. Max. size for the web cache (MB) Max. grootte voor de webcache (MB) Entries will be recycled once the size is reached Invoer zal worden gerecycled zodra de grootte is bereikt Web page store directory name Web pagina map naam om op te slaan The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. De naam voor een map waarin de kopieen van de bezochte webpaginas opgeslagen zullen worden.<br>Een niet absoluut pad zal worden gekozen ten opzichte van de configuratie map Max. size for the web store (MB) Max. grootte voor het web opslaan (MB) Process the WEB history queue Verwerk de WEB geschiedenis wachtrij Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Zet het indexeren van firefox bezochte paginas aan. <br> (hiervoor zal ook de Firefox Recoll plugin moeten worden geinstalleerd door uzelf) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Invoeringen zullen worden gerecycled zodra de groote is bereikt. <br> Het verhogen van de groote heeft zin omdat het beperken van de waarde de bestaande waardes niet zal afkappen ( er is alleen afval ruimte aan het einde). confgui::ConfIndexW Can't write configuration file Kan configuratie bestand niet lezen Recoll - Index Settings: Recoll - Index instellingen: confgui::ConfParamFNW Browse Bladeren Choose Kies confgui::ConfParamSLW + + - - Add entry Invoer toevoegen Delete selected entries Geselecteerde invoergegevens wissen ~ ~ Edit selected entries Geselecteerde items bewerken confgui::ConfSearchPanelW Automatic diacritics sensitivity Automatische diakritische tekens gevoeligheid <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <P> Automatisch activeren diakritische tekens gevoeligheid als de zoekterm tekens zijn geaccentueerd (niet in unac_except_trans). Wat je nodig hebt om de zoek taal te gebruiken en de <i> D</i> modifier om diakritische tekens gevoeligheid te specificeren. Automatic character case sensitivity Automatische karakter hoofdletter gevoeligheid <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <P> Automatisch activeren hoofdletters gevoeligheid als de vermelding hoofdletters heeft in elke, behalve de eerste positie. Anders moet u zoek taal gebruiken en de <i>C</i> modifier karakter-hoofdlettergevoeligheid opgeven. Maximum term expansion count Maximale term uitbreidings telling <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p> Maximale uitbreidingstelling voor een enkele term (bijv.: bij het gebruik van wildcards) Een standaard van 10.000 is redelijk en zal zoekpodrachten die lijken te bevriezen terwijl de zoekmachine loopt door de termlijst vermijden. Maximum Xapian clauses count Maximaal Xapian clausules telling <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p> Maximale aantal elementaire clausules die we kunnen toevoegen aan een enkele Xapian zoeken. In sommige gevallen kan het resultaatvan de term uitbreiding multiplicatief zijn, en we willen voorkomen dat er overmatig gebruik word gemaakt van het werkgeheugen. De standaard van 100.000 zou hoog genoeg moeten zijn in beidde gevallen en compatible zijn met moderne hardware configuraties. confgui::ConfSubPanelW Global Globaal Max. compressed file size (KB) Maximaal gecomprimeerd bestands formaat (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Deze waarde stelt een drempel waarboven gecomprimeerde bestanden niet zal worden verwerkt. Ingesteld op -1 voor geen limiet, op 0 voor geen decompressie ooit. Max. text file size (MB) Max. tekstbestand groote (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Deze waarde stelt een drempel waarboven tekstbestanden niet zal worden verwerkt. Ingesteld op -1 voor geen limiet. Dit is voor het uitsluiten van monster logbestanden uit de index. Text file page size (KB) Tekst bestand pagina grootte (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Als deze waarde is ingesteld (niet gelijk aan -1), zal tekstbestanden worden opgedeeld in blokken van deze grootte voor indexering. Dit zal helpen bij het zoeken naar zeer grote tekstbestanden (bijv: log-bestanden). Max. filter exec. time (S) Max. filter executie tijd (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Externe filters die langer werken dan dit zullen worden afgebroken. Dit is voor de zeldzame zaak (bijv.: postscript) waar een document een filter kan veroorzaken om te loopsen op -1 voor geen limiet. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Externe filters die langer dan dit werken worden afgebroken. Dit is voor het zeldzame geval (bijv: postscript) wanneer een document een filterlus zou kunnen veroorzaken. Stel in op -1 voor geen limiet. Only mime types Alleen mime types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Een exclusieve lijst van geïndexeerde typen mime. <br> Niets anders zal worden geïndexeerd. Normaal gesproken leeg en inactief Exclude mime types Sluit mime types uit Mime types not to be indexed Mime types die niet geindexeerd zullen worden Max. filter exec. time (s) Max. uitvoertijd filter (s) confgui::ConfTabsW Apply Toepassen confgui::ConfTopPanelW Top directories Top mappen The list of directories where recursive indexing starts. Default: your home. Een lijst van mappen waar de recursive indexering gaat starten. Standaard is de thuismap. Skipped paths Paden overgeslagen These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Dit zijn de namen van de mappen die indexering niet zal doorzoeken. <br> Kan wildcards bevatten. Moet overeenkomen met de paden gezien door de indexer (bijv: als topmappen zoals '/ home/me en '/ home' is eigenlijk een link naar '/usr/home', een correcte overgeslagen pad vermelding zou zijn '/home/me/tmp * ', niet' /usr/home/me/tmp * ') Stemming languages Stam talen The languages for which stemming expansion<br>dictionaries will be built. De talen waarvoor de stam uitbreidings<br>wooordenboeken voor zullen worden gebouwd. Log file name Log bestandsnaam The file where the messages will be written.<br>Use 'stderr' for terminal output Het bestand waar de boodschappen geschreven zullen worden.<br>Gebruik 'stderr' voor terminal weergave Log verbosity level Log uitgebreidheids nivo This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Deze waarde bepaald het aantal boodschappen,<br>van alleen foutmeldingen tot een hoop debugging data. Index flush megabytes interval Index verversings megabyte interval This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Deze waarde past de hoeveelheid data die zal worden geindexeerd tussen de flushes naar de schijf.<br> Dit helpt bij het controleren van het gebruik van geheugen. Standaad 10MB Max disk occupation (%) maximale schijf gebruik This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Dit is het precentage van schijfgebruike waar indexering zal falen en stoppen (om te vermijden dat uw schijf volraakt.<br>0 betekend geen limit (dit is standaard). No aspell usage Gebruik aspell niet Aspell language Aspell taal The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. De taal van het aspell woordenboek. Dit zou er als 'en' of 'fr' moeten uitzien. .<br>Als deze waarde niet is ingesteld, zal de NLS-omgeving worden gebruikt om het te berekenen, wat meestal werkt. o krijgt een idee van wat is geïnstalleerd op uw systeem, typ 'aspell config' en zoek naar . op bestanden in de map 'data-dir' Database directory name Database map naam The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. De naam voor een map waar het opslaan van de index<br>Een niet-absoluut pad is genomen ten opzichte van de configuratiemap. Standaard is 'xapiandb'. Use system's 'file' command Systeem's 'bestand' opdracht gebruiken Use the system's 'file' command if internal<br>mime type identification fails. Gebruik het systeem's 'bestand' opdracht als interne<br>MIME-type identificatie niet werkt. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Schakelt het gebruik van aspell uit om spellings gissingen in het term onderzoeker gereedschap te genereren. <br> Handig als aspell afwezig is of niet werkt. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Taal instelling voor het aspell woordenboek. Dit zou er uit moeten zien als 'en'of 'nl'...<br> als deze waarde niet is ingesteld, zal de NLS omgeving gebruikt worden om het te berekenen, wat meestal werkt. Om een idee te krijgen wat er op uw systeem staat, type 'aspell config' en zoek naar .dat bestanden binnen de 'data-dir'map. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. De naam voor een map om de index in op te slaan<br> Een niet absoluut pad ten opzichte van het configuratie bestand is gekozen. Standaard is het 'xapian db'. Unac exceptions Unac uitzonderingen <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Dit zijn uitzonderingen op het unac mechanisme dat, standaard, alle diakritische tekens verwijderd, en voert canonische ontbinding door. U kunt unaccenting voor sommige karakters veranderen, afhankelijk van uw taal, en extra decomposities specificeren, bijv. voor ligaturen. In iedere ruimte gescheiden ingave , waar het eerste teken is de bron is, en de rest de vertaling. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Dit zijn padnamen van mappen die niet zullen worden geïndexeerd.<br>Pad elementen kunnen wildcards bevatten. De items moeten overeenkomen met de paden die door de indexeerder worden gezien (bijv. als de uren op de voorgrond zijn '/home/me' en '/home' een link is naar '/usr/home'een juist skippedPath item zou '/home/me/tmp*'zijn, niet '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Max schijf bezetting (%, 0 betekent geen limiet) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Dit is het percentage van schijfgebruik - totaal schijfgebruik, niet indexgrootte - waarop de indexering zal mislukken en stoppen.<br>De standaardwaarde van 0 verwijdert elke limiet. uiPrefsDialogBase User preferences Gebruikers voorkeuren User interface Gebruikers interface Number of entries in a result page Opgegeven aantal van weergaves per resultaten pagina If checked, results with the same content under different names will only be shown once. Indien aangevinkt, zullen de resultaten met dezelfde inhoud onder verschillende namen slecht eenmaal worden getoond. Hide duplicate results. Verberg duplicaat resultaten. Highlight color for query terms Highlight kleur voor zoektermen Result list font Resultaten lijst lettertype Opens a dialog to select the result list font Opent een dialoog om de resultaten lijst lettertype te selecteren Helvetica-10 Helvetica-10 Resets the result list font to the system default Reset het resultaten lijst lettertype naar systeem standaardwaarde Reset Herstel Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definieert het formaat voor elke alinea met resultatenlijst. Gebruik qt html-formaat en printf-achtige vervangingen:<br>%A Abstract<br> %D Datum<br> %I Naam van pictogramafbeelding<br> %K Sleutelwoorden (indien aanwezig)<br> %LVoorbeeld bekijken en links bewerken<br> %M Mime type<br> %N Resultaat nummer<br> %R Relevantiepercentage<br> %S Maat informatie<br> %T Titel<br> %U Url<br> Result paragraph<br>format string Resultaat alinea<br>opmaak tekenreeks Texts over this size will not be highlighted in preview (too slow). Teksten groter dan dit zullen niet worden highlighted in previews (te langzaam). Maximum text size highlighted for preview (megabytes) Maximale tekst groote highlighted voor preview (megabytes) Use desktop preferences to choose document editor. Gebruik de desktopvoorkeuren om documentbewerker te kiezen. Choose editor applications Kies editor toepassingen Display category filter as toolbar instead of button panel (needs restart). Toon categorie filter als werkbalk in plaats van knop paneel (vereist herstart). Auto-start simple search on whitespace entry. Autostart eenvoudige zoekopdracht bij ingave in de witruimte. Start with advanced search dialog open. Start met geavanceerd zoek dialog open. Start with sort dialog open. Start met open sorteerdialoogvenster. Remember sort activation state. Onthoud sorteer activatie status Prefer Html to plain text for preview. Html voorkeur in plaats van gewoon tekst als preview Search parameters Zoek parameters Stemming language Stam taal A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Een zoekopdracht naar '[rollende stenen] (2 termen) wordt gewijzigd in [rollen of stenen of (rollende frase 2 stenen)]. Dit zou een hogere prioriteit moeten geven aan de resultaten, waar de zoektermen precies zoals ingevoerd moeten verschijnen. Automatically add phrase to simple searches Automatisch aanvullen van eenvoudige zoekopdrachten Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Moeten we proberen om abstracten voor resultatenlijst invoering op te bouwen met behulp van de context van de zoektermen? Kan traag zijn met grote documenten. Dynamically build abstracts Dynamisch abstracten bouwen Do we synthetize an abstract even if the document seemed to have one? Moeten we een abstract maken, zelfs als het document er al een blijkt te hebben? Replace abstracts from documents Vervang abstracten van documenten Synthetic abstract size (characters) Synthetische abstractie grootte (tekens) Synthetic abstract context words Synthetische abstract context woorden The words in the list will be automatically turned to ext:xxx clauses in the query language entry. De woorden in de lijst zal automatisch omgezet worden naar ext:xxx clausules in de zoektaal ingave. Query language magic file name suffixes. Zoek taal magic bestandsnaam achtervoegsel Enable Aanzetten External Indexes Externe indexen Toggle selected Toggle geselecteerde Activate All Alles Activeren Deactivate All Alles Deactiveren Remove from list. This has no effect on the disk index. Verwijder van de lijst. Dit heeft geen effect op de schijf index. Remove selected Geselecteerde verwijderen Click to add another index directory to the list Klik om een andere indexmap aan de lijst toe te voegen Add index Index toevoegen Apply changes Veranderingen doorvoeren &OK &Oké Discard changes Veranderingen ongedaan maken &Cancel &Annuleren Abstract snippet separator Abstract knipsel scheiding Use <PRE> tags instead of <BR>to display plain text as html. Gebruik <PRE> tags in plaats van <BR>om platte tekst als html weer te geven. Lines in PRE text are not folded. Using BR loses indentation. Regels in PRE tekst zijn niet gevouwen met behulp van BR inspringing. Style sheet Stijl blad Opens a dialog to select the style sheet file Opend een dialoog venster om style sheet te selecteren Choose Kies Resets the style sheet to default Reset de style sheet naar standaard Lines in PRE text are not folded. Using BR loses some indentation. Regels in PRE tekst zijn niet geplooid. Het gebruik van BR verliest wat inspringen. Use <PRE> tags instead of <BR>to display plain text as html in preview. Gebruik <PRE> tags in plaats van <BR>om platte tekst als html in het voorbeeld weer te geven. Result List Resultaten lijst Edit result paragraph format string Bewerk resultaten paragraaf formaat string Edit result page html header insert Bewerk resultaat pagina html header invoeg Date format (strftime(3)) Datum notatie (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Frequentie percentage drempel waarover wij geen termen gebruiken binnen autofrase. Frequente termen zijn een belangrijk prestatie probleem met zinnen en frases. Overgeslagen termen vergroten de zins verslapping, en verminderen de autofrase doeltreffendheid. De standaardwaarde is 2 (procent). Autophrase term frequency threshold percentage Autofrase term frequentie drempelwaarde percentage Plain text to HTML line style Platte tekst naar HTML lijn stijl Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Lijnen in PRE tekst worden niet gevouwen. Met behulp van BR kan inspringen verwijderen. PRE + Wrap stijl zou wenselijk kunnen zijn. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + pauze Exceptions Uitzonderingen Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Mime types die niet mogen worden doorgegeven aan xdg-open, zelfs niet wanneer "gebruik desktopvoorkeuren" is ingesteld.<br> Nuttig om paginanummer door te geven en om tekst-opties te zoeken, bijv. evince. Disable Qt autocompletion in search entry. Schakel Qt auto-aanvullen uit in zoek invoegveld Search as you type. Zoek terwijl u typed. Paths translations Paden vertalingen Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Klik hier om een andere index map toe te voegen aan de lijst. U kunt een Recoll configuratie map of een Xapian index te selecteren. Snippets window CSS file Knipsel venster CSS bestand Opens a dialog to select the Snippets window CSS style sheet file Opent een dailoog venster om het knipsel venster CSS stijl sheet bestand te selecteren Resets the Snippets window style Herstel de Knipsel venster stijl Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Bepaal of document mappen moeten worden weergegeven als keuzerondjes, gereedschap combinatiebox of menu. Document filter choice style: Document filter keuze stijl: Buttons Panel Knoppen Paneel Toolbar Combobox Gereedschaps-menu combinatiebox Menu Menu Show system tray icon. Toon pictogram in het systeemvak. Close to tray instead of exiting. Sluit naar systeemvak in plaats van sluiten. Start with simple search mode Start met een eenvoudige zoek modus Show warning when opening temporary file. Toon waarschuwing bij het openen van een temp bestand. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Gebruiker stijl toe te passen op het knipsel-venster <br>. Let op: het resultaat pagina header invoegen is ook opgenomen in het'kop knipsel-venster . Synonyms file Synoniemen bestand Highlight CSS style for query terms CSS-stijl voor zoektermen markeren Recoll - User Preferences Recoll - Gebruikersvoorkeuren Set path translations for the selected index or for the main one if no selection exists. Stel padvertalingen in voor de geselecteerde index of voor de hoofdindex als er geen selectie bestaat. Activate links in preview. Links activeren in preview. Make links inside the preview window clickable, and start an external browser when they are clicked. Maak links in het voorbeeld venster klikbaar en start een externe browser wanneer er op wordt geklikt. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Query termen markeren in resultaten. <br>Probeer iets als "color:red;background:yellow" voor iets levendigers dan het standaard blauw... Start search on completer popup activation. Start zoeken bij completer popup activering. Maximum number of snippets displayed in the snippets window Maximum aantal snippets weergegeven in het snippets venster Sort snippets by page number (default: by weight). Snippets sorteren op paginanummer (standaard: bij gewicht). Suppress all beeps. Onderdruk alle piepen. Application Qt style sheet Toepassing Qt style sheet Limit the size of the search history. Use 0 to disable, -1 for unlimited. Limiteer de grootte van de zoekgeschiedenis. Gebruik 0 om uit te schakelen, -1 voor onbeperkt. Maximum size of search history (0: disable, -1: unlimited): Maximale grootte van zoekgeschiedenis (0: uitschakelen, -1: ongelimiteerd): Generate desktop notifications. Bureaubladmeldingen genereren. Misc Diversen Work around QTBUG-78923 by inserting space before anchor text Om QTBUG-78923 te gebruiken voor ankertekst Display a Snippets link even if the document has no pages (needs restart). Toon een tekstbouwstenenslink zelfs als het document geen pagina's heeft (opnieuw opstarten vereist). Maximum text size highlighted for preview (kilobytes) Maximale tekstgrootte gemarkeerd voor preview (kilobytes) Start with simple search mode: Start met een eenvoudige zoek modus: Hide toolbars. Werkbalken verbergen. Hide status bar. Statusbalk verbergen. Hide Clear and Search buttons. Verberg leeg en zoek knoppen. Hide menu bar (show button instead). Menubalk verbergen (toon knop) Hide simple search type (show in menu only). Verberg eenvoudig zoektype (alleen in het menu weergeven). Shortcuts Snelkoppelingen Hide result table header. Resultatentabel header verbergen. Show result table row headers. Resultatentabel rij koppen weergeven. Reset shortcuts defaults Standaardinstellingen voor snelkoppelingen herstellen Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Schakel de Ctrl+[0-9]/[a-z] snelkoppelingen uit om naar tabelrijen te springen. Use F1 to access the manual Gebruik F1 voor toegang tot de handleiding Hide some user interface elements. Verberg enkele gebruikersinterface-elementen. Hide: Verberg: Toolbars Werkbalken Status bar Statusbalk Show button instead. Toon in plaats daarvan knop. Menu bar Menubalk Show choice in menu only. Toon alleen keuze in menu. Simple search type Eenvoudig zoektype Clear/Search buttons Wissen/Zoekknoppen Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Schakel de sneltoetsen Ctrl+[0-9]/Shift+[a-z] uit om naar tabelrijen te springen. None (default) Geen (standaard) Uses the default dark mode style sheet Gebruikt het standaard donkere modus stijlblad Dark mode Donkere modus Choose QSS File Kies QSS-bestand To display document text instead of metadata in result table detail area, use: Om documenttekst weer te geven in plaats van metadata in het detailgebied van de resultatentabel, gebruik: left mouse click linkermuisknop klik Shift+click Shift+klik Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Opent een dialoogvenster om het stylesheet-bestand te selecteren.<br>Bekijk /usr/share/recoll/examples/recoll[-dark].qss voor een voorbeeld. Result Table Resultaat tabel Do not display metadata when hovering over rows. Toon geen metagegevens wanneer u over rijen zweeft. Work around Tamil QTBUG-78923 by inserting space before anchor text Werk rond Tamil QTBUG-78923 door een spatie in te voegen voor de ankertekst The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. De bug zorgt ervoor dat vreemde cirkeltekens worden weergegeven binnen gemarkeerde Tamil-woorden. De tijdelijke oplossing voegt een extra spatiekarakter toe dat het probleem lijkt op te lossen. Depth of side filter directory tree Diepte van de zijfilter mapstructuur Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Zoomfactor voor de gebruikersinterface. Handig als de standaardinstelling niet juist is voor uw schermresolutie. Display scale (default 1.0): Weergaveschaal (standaard 1.0): Automatic spelling approximation. Automatische spellingbenadering. Max spelling distance Maximale spelfoutafstand Add common spelling approximations for rare terms. Voeg gangbare spellingbenaderingen toe voor zeldzame termen. Maximum number of history entries in completer list Maximale aantal geschiedenisvermeldingen in de voltooierlijst Number of history entries in completer: Aantal geschiedenisvermeldingen in de aanvuller: Displays the total number of occurences of the term in the index Toont het totale aantal voorkomens van de term in de index. Show hit counts in completer popup. Toon het aantal resultaten in de voltooiingspop-up. Prefer HTML to plain text for preview. Geef de voorkeur aan HTML boven platte tekst voor de voorbeeldweergave. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Bekijk de Qt QDateTimeEdit documentatie. Bijv. yyyy-MM-dd. Laat leeg om de standaard Qt/System indeling te gebruiken. Side filter dates format (change needs restart) Zijfilter datums formaat (wijziging vereist herstart) If set, starting a new instance on the same index will raise an existing one. Indien ingesteld, zal het starten van een nieuwe instantie op dezelfde index een bestaande omhoog brengen. Single application Enkele toepassing Set to 0 to disable and speed up startup by avoiding tree computation. Stel in op 0 om uit te schakelen en op te starten te versnellen door het vermijden van boom berekening. The completion only changes the entry when activated. De voltooiing verandert alleen de invoer wanneer deze geactiveerd is. Completion: no automatic line editing. Voltooiing: geen automatische regelbewerking. Interface language (needs restart): Interfacetaal (moet opnieuw opstarten): Note: most translations are incomplete. Leave empty to use the system environment. Let op: de meeste vertalingen zijn onvolledig. Laat leeg om het systeemomgeving te gebruiken. Preview Bekijken Set to 0 to disable details/summary feature Stel in op 0 om de details/samenvattingsfunctie uit te schakelen. Fields display: max field length before using summary: Velden weergeven: maximale veldlengte voordat samenvatting wordt gebruikt: Number of lines to be shown over a search term found by preview search. Aantal regels dat getoond moet worden boven een zoekterm die gevonden is door de voorbeeldzoekopdracht. Search term line offset: Zoekterm regelverschuiving: Wild card characters *?[] will processed as punctuation instead of being expanded Wilde kaartkarakters *?[] worden verwerkt als leestekens in plaats van te worden uitgebreid. Ignore wild card characters in ALL terms and ANY terms modes Negeer jokertekens in ALLE termen en ENIGE termen modi. Color scheme Kleurenschema When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Bij het weergeven van HTML in donkere modus, probeer een donkere achtergrond te gebruiken (en lichte kleur). Dit conflicteert met veel documenten die onze lichte instelling zullen overschrijven met hun eigen CSS (donkere) voorgrondkleur, resulterend in een onleesbaar document, dus het staat standaard uit. Use dark background when displaying HTML in dark mode. Gebruik een donkere achtergrond bij het weergeven van HTML in de donkere modus. recoll-1.43.12/qtgui/i18n/recoll_es.ts0000644000175000017500000076034015124431112016677 0ustar dockesdockes ActSearchDLG Menu search Búsqueda de menú AdvSearch All clauses Todas las cláusulas Any clause Cualquier cláusula texts textos spreadsheets hojas de cálculo presentations presentaciones media medios messages mensajes other otros Bad multiplier suffix in size filter Sufijo multiplicador incorrecto en filtro de tamaño text texto spreadsheet hoja de cálculo presentation presentación message mensaje Advanced Search Búsqueda avanzada History Next Historial siguiente History Prev Historial anterior Load next stored search Cargar la siguiente búsqueda almacenada Load previous stored search Cargar búsqueda almacenada anterior AdvSearchBase Advanced search Búsqueda avanzada Restrict file types Restringir tipos de archivo Save as default Guardar como predeterminado Searched file types Tipos de archivos buscados All ----> Todos ----> Sel -----> Sel -----> <----- Sel <----- Sel <----- All <----- Todos Ignored file types Tipos de archivos ignorados Enter top directory for search Ingrese directorio inicial para la búsqueda Browse Buscar Restrict results to files in subtree: Restringir resultados a archivos en subdirectorio: Start Search Iniciar búsqueda Search for <br>documents<br>satisfying: Buscar documentos<br>que satisfagan: Delete clause Borrar cláusula Add clause Añadir cláusula Check this to enable filtering on file types Marque esto para habilitar filtros en tipos de archivos By categories Por categorías Check this to use file categories instead of raw mime types Marque esto para usar categorías en lugar de tipos MIME Close Cerrar All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Todos los campos no vacíos a la derecha serán combinados con conjunciones AND (opción "Todas las cláusulas") o OR (opción "Cualquier cláusula").<br>Los campos "Cualquiera", "Todas" y "Ninguna" pueden aceptar una mezcla de palabras simples y frases dentro de comillas dobles.<br>Campos sin datos son ignorados. Invert Invertir Minimum size. You can use k/K,m/M,g/G as multipliers Tamaño mínimo. Puede utilizar k/K, m/M o g/G como multiplicadores Min. Size Tamaño Mínimo Maximum size. You can use k/K,m/M,g/G as multipliers Tamaño máximo. Puede utilizar k/K, m/M o g/G como multiplicadores Max. Size Tamaño máximo Select Seleccionar Filter Filtro From Desde To Hasta Check this to enable filtering on dates Marque esto para habilitar filtros en fechas Filter dates Filtrar fechas Find Buscar Check this to enable filtering on sizes Marque esto para habilitar filtros en tamaños Filter sizes Filtro de tamaños Filter birth dates Filtrar fechas de nacimiento. ConfIndexW Can't write configuration file No se puede escribir archivo de configuración Global parameters Parámetros globales Local parameters Parámetros locales Search parameters Parámetros de búsqueda Top directories Directorios primarios The list of directories where recursive indexing starts. Default: your home. La lista de directorios donde la indexación recursiva comienza. Valor por defecto: su directorio personal. Skipped paths Directorios omitidos These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Estos son los nombres de los directorios que no entrarán en la indexación.<br>Los elementos de ruta pueden contener comodines. Las entradas deben coincidir con las rutas vistas por el indexador (p. ej. si topdirs incluye '/home/me' y '/home' es en realidad un enlace a '/usr/home', una entrada correcta de skippedPath sería '/home/me/tmp*', no '/usr/home/me/tmp*') Stemming languages Lenguajes para raíces The languages for which stemming expansion<br>dictionaries will be built. Los lenguajes para los cuales los diccionarios de expansión de raíces serán creados. Log file name Nombre de archivo de registro The file where the messages will be written.<br>Use 'stderr' for terminal output El archivo donde los mensajes serán escritos.<br>Use 'stderr' para salida a la terminal Log verbosity level Nivel de verbosidad del registro This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Este valor ajusta la cantidad de mensajes,<br>desde solamente errores hasta montones de información de depuración. Index flush megabytes interval Intervalo en megabytes de escritura del índice This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Este valor ajusta la cantidad de datos indexados entre escrituras al disco.<br> Esto ayuda a controlar el uso de memoria del indexador. Valor estándar 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Este es el porcentaje de uso del disco - uso total del disco, no tamaño del índice- en el que la indexación fallará y se detendrá.<br>El valor predeterminado de 0 elimina cualquier límite. No aspell usage No utilizar aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Deshabilita el uso de aspell para generar aproximaciones ortográficas en la herramienta explorador de términos.<br>Útil si aspell no se encuentra o no funciona. Aspell language Lenguaje Aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. El lenguaje para el diccionario aspell. Esto debería ser algo como 'en' o 'fr' ...<br>Si no se establece este valor, el ambiente NLS será utilizado para calcularlo, lo cual usualmente funciona. Para tener una idea de lo que está instalado en sus sistema, escriba 'aspell-config' y busque archivos .dat dentro del directorio 'data-dir'. Database directory name Nombre del directorio de base de datos The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. El nombre de un directorio donde almacenar el índice.<br>Una ruta no absoluta se interpreta como relativa al directorio de configuración. El valor por defecto es 'xapiandb'. Unac exceptions Excepciones Unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Estas son excepciones al mecanismo unac, el cual, de forma predeterminada, elimina todos los diacríticos, y realiza una descomposición canónica. Es posible prevenir la eliminación de acentos para algunos caracteres, dependiendo de su lenguaje, y especificar descomposiciones adicionales, por ejemplo, para ligaturas. En cada entrada separada por espacios, el primer caracter es el origen, y el resto es la traducción. Process the WEB history queue Procesar la cola del historial WEB Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Habilita la indexación de páginas visitadas en Firefox.<br>(necesita también el plugin Recoll para Firefox) Web page store directory name Nombre del directorio del almacén para páginas web The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. El nombre del directorio dónde almacenar las copias de páginas web visitadas.<br>Una ruta de directorio no absoluta es utilizada, relativa al directorio de configuración. Max. size for the web store (MB) Tamaño máximo para el almacén web (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Las entradas serán recicladas una vez que se alcance el tamaño.<br>Solo aumentar el tamaño realmente tiene sentido porque reducir el valor no truncará un archivo existente (solo perder espacio al final). Automatic diacritics sensitivity Sensibilidad automática de diacríticos <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Habilitar automáticamente la sensibilidad de diacríticos si el término de búsqueda tiene caracteres acentuados (no presentes en unac_except_trans). De otra forma necesita usar el lenguage de búsqueda y el modificador <i>D</i> para especificar la sensibilidad de los diacríticos. Automatic character case sensitivity Sensibilidad automática a la distinción de mayúsculas/minúsculas de los caracteres <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Habilitar automáticamente la sensibilidad a las mayúsculas/minúsculas si la entrada tiene caracteres en mayúscula en una posición distinta al primer caracter. De otra forma necesita usar el lenguaje de búsqueda y el modificador <i>C</i> para especificar la sensibilidad a las mayúsculas y minúsculas. Maximum term expansion count Máximo conteo de expansión de términos <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Máxima expansión de conteo para un solo término (ej: cuando se usan comodines). El valor por defecto de 10000 es razonable y evitará consultas que parecen congelarse mientras el motor de búsqueda recorre la lista de términos. Maximum Xapian clauses count Máximo conteo de cláusulas de Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Número máximo de cláusulas elementales agregadas a una consulta de Xapian. En algunos casos, el resultado de la expansión de términos puede ser multiplicativo, y deseamos evitar el uso excesivo de memoria. El valor por defecto de 100000 debería ser lo suficientemente alto en la mayoría de los casos, y compatible con las configuraciones de hardware típicas en la actualidad. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... Los idiomas para los que se construirán los diccionarios de expansión de stemming.<br>Consulte la documentación del stemmer de Xapian para ver los valores posibles. Por ejemplo, glish, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. El idioma para el diccionario de aspell. Los valores son códigos de idioma de 2 letras, por ejemplo, 'es', 'fr' . .<br>Si no se establece este valor, se utilizará el entorno NLS para calcularlo, que normalmente funciona. Para obtener una idea de lo que está instalado en su sistema, escriba 'aspell config' y busque . en archivos dentro del directorio 'data-dir'. Indexer log file name Nombre del archivo de registro del indexador If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Si está vacío, se utilizará el valor del archivo de registro anterior. Puede ser útil tener un registro separado para fines de diagnóstico porque el registro común se borrará cuando<br>la interfaz de usuario se inicie. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Porcentaje de umbral completo de disco en el que dejamos de indexar<br>p.e. 90% para parar al 90% lleno, 0 o 100 significa que no hay límite) Web history Historial Web Process the Web history queue Procesar la cola de historial web (by default, aspell suggests mispellings when a query has no results). Por defecto, aspell sugiere errores ortográficos cuando una búsqueda no arroja resultados. Page recycle interval Intervalo de reciclaje de página <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Por defecto, solo se mantiene una instancia de una URL en la caché. Esto se puede cambiar configurándolo a un valor que determine con qué frecuencia mantenemos múltiples instancias ('día', 'semana', 'mes', 'año'). Tenga en cuenta que aumentar el intervalo no borrará las entradas existentes. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Nota: las páginas antiguas serán borradas para hacer espacio para las nuevas cuando se alcance el tamaño máximo. Tamaño actual: %1 Start folders Iniciar carpetas The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. La lista de carpetas/directorios a ser indexados. Las subcarpetas serán procesadas de forma recursiva. Por defecto: tu hogar. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Porcentaje umbral de disco lleno en el que dejamos de indexar (por ejemplo, 90 para detenerse al 90% lleno, 0 o 100 significa sin límite) Browser add-on download folder Carpeta de descarga de complementos del navegador Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Solo establezca esto si ha establecido el parámetro "Subdirectorio de descargas" en la configuración del complemento del navegador web. En este caso, debe ser la ruta completa al directorio (por ejemplo, /home/[yo]/Descargas/mi-subdirectorio) Store some GUI parameters locally to the index Almacene algunos parámetros de la GUI localmente en el índice. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index La configuración de la GUI se guarda normalmente en un archivo global, válido para todos los índices. Establecer este parámetro hará que algunas configuraciones, como la configuración de la tabla de resultados, sean específicas para el índice. Suspend the real time indexer when running on battery Suspender el indexador en tiempo real cuando se esté ejecutando con la batería. The indexer will wait for a return on AC and reexec itself when it happens El indexador esperará un retorno en AC y se volverá a ejecutar cuando suceda. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. La lista de carpetas/directorios a indexar, de forma recursiva con sus subcarpetas. El carácter '~' se expande a tu directorio de inicio, que es el valor inicial predeterminado. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Solo tipos mime An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Una lista exclusiva de tipos de mime indexados.<br>Nada más será indexado. Normalmente vacío e inactivo Exclude mime types Excluir tipos mime Mime types not to be indexed Tipos Mime que no deben ser indexados Max. compressed file size (KB) Tamaño máximo de archivo comprimido (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Este valor establece un umbral mas allá del cual los archivos<br>comprimidos no serán procesados. Escriba 1 para no tener límite,<br>o el número 0 para nunca hacer descompresión. Max. text file size (MB) Tamaño máximo para archivo de texto (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Este valor establece un umbral más allá del cual los archivos de texto no serán procesados.<br>Escriba 1 para no tener límites. Este valor es utilizado para excluir archivos de registro gigantescos del índice. Text file page size (KB) Tamaño de página para archivo de texto (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Si se utiliza este valor (diferente de -1), los archivos de texto serán separados en partes de este tamaño para ser indexados. Esto ayuda con las búsquedas de archivos de texto muy grandes (ej: archivos de registro). Max. filter exec. time (s) Máximo filtro exec. tiempo (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Filtros externos que se ejecuten por más tiempo del establecido serán detenidos. Esto es por el caso inusual (ej: postscript) dónde un documento puede causar que un filtro entre en un ciclo infinito. Establezca el número -1 para indicar que no hay límite. Global Global ConfigSwitchDLG Switch to other configuration Cambiar a otra configuración. ConfigSwitchW Choose other Elegir otro Choose configuration directory Elegir directorio de configuración. CronToolW Cron Dialog Ventana de Cron <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> horario de indexado por lotes (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cada campo puede contener un comodín (*), un valor numérico único, listas separadas por comas (1,3,5) y rangos (1-7). Más generalmente, los campos serán usados <span style=" font-style:italic;">tal como son</span> dentro del archivo crontab, y toda la sintaxis crontab puede ser usada, ver crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Por ejemplo, ingresar <span style=" font-family:'Courier New,courier';">*</span> en <span style=" font-style:italic;">Días, </span><span style=" font-family:'Courier New,courier';">12,19</span> en <span style=" font-style:italic;">Horas</span> y <span style=" font-family:'Courier New,courier';">15</span> en <span style=" font-style:italic;">Minutos</span> iniciaría recollindex cada día a las 12:15 AM y 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Un horario con activaciones frecuentes es probablemente menos eficiente que la indexación en tiempo real.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Días de la semana (* o 0-7, 0 o 7 es Domingo) Hours (* or 0-23) Horas (* o 0-23) Minutes (0-59) Minutos (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Presione <span style=" font-style:italic;">Deshabilitar</span> para detener la indexación automática por lotes, <span style=" font-style:italic;">Habilitar</span> para activarla, <span style=" font-style:italic;">Cancelar</span> para no cambiar nada.</p></body></html> Enable Habilitar Disable Deshabilitar It seems that manually edited entries exist for recollindex, cannot edit crontab Parece ser que existen entradas para recollindex editadas manualmente, no se puede editar crontab Error installing cron entry. Bad syntax in fields ? Error al instalar entrada de cron. Sintaxis incorrecta en los campos? EditDialog Dialog Ventana de diálogo EditTrans Source path Ruta de origen Local path Ruta local Config error Error de configuración Original path Ruta original Path in index Ruta en el índice Translated path Ruta traducida EditTransBase Path Translations Ruta de traducciones Setting path translations for Establecer ruta de traducciones para Select one or several file types, then use the controls in the frame below to change how they are processed Seleccione uno o más tipos de archivos, y use los controles en la caja abajo para cambiar cómo se procesan Add Añadir Delete Borrar Cancel Cancelar Save Guardar FirstIdxDialog First indexing setup Primera configuración de indexación <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Parece ser que el índice para esta configuración no existe.</span><br /><br />Si solamente desea indexar su directorio personal con un conjunto de valores iniciales razonables, presione el botón <span style=" font-style:italic;">Iniciar indexación ahora</span>. Es posible ajustar los detalles más tarde.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Si necesita más control, use los enlaces siguientes para ajustar la configuración de indexación y el horario.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Estas herramientas pueden ser accedidas luego desde el menú <span style=" font-style:italic;">Preferencias</span>.</p></body></html> Indexing configuration Configuración de indexación This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Esto le permite ajustar los directorios que quiere indexar y otros parámetros, como rutas de archivos o nombres excluidos, conjuntos de caracteres estándar, etc. Indexing schedule Horario de indexación This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Esto le permite escoger entre indexación en tiempo real y por lotes, y configurar un horario automático para indexar por lotes (utilizando cron). Start indexing now Iniciar indexación ahora FragButs %1 not found. %1 no encontrado. %1: %2 %1: %2 Fragment Buttons Botones de fragmentos Query Fragments Fragmentos de consulta IdxSchedW Index scheduling setup Configuración de horario de indexación <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La indexación de <span style=" font-weight:600;">Recoll</span> puede ejecutarse permanentemente, indexando archivos cuando cambian, o puede ejecutarse en intervalos discretos. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Leer el manual puede ayudarle a decidir entre estos dos métodos (presione F1).</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Esta herramienta puede ayudarle a configurar un horario para automatizar la ejecución de indexación por lotes, o iniciar la indexación en tiempo real cuando inicia la sesión (o ambos, lo cual rara vez tiene sentido).</p></body></html> Cron scheduling Horario de Cron The tool will let you decide at what time indexing should run and will install a crontab entry. Esta herramienta le permite decidir a qué hora la indexación se ejecutará e instalará una entrada en el crontab. Real time indexing start up Inicio de la indexación en tiempo real Decide if real time indexing will be started when you log in (only for the default index). Decida si la indexación en tiempo real será ejecutada cuando inicie la sesión (solo para el índice estándar). ListDialog Dialog Ventana de diálogo GroupBox Cuadro de grupo Main No db directory in configuration Directorio de base de datos no está configurado Could not open database in No se puede abrir base de datos en . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. Presione Cancelar si desea editar la configuración antes de indexar, o Ok para proceder. Configuration problem (dynconf Problema de configuración (dynconf "history" file is damaged or un(read)writeable, please check or remove it: El archivo de historial esta dañado o no se puede leer, por favor revíselo o bórrelo: "history" file is damaged, please check or remove it: "historial" archivo está dañado, por favor compruébalo o quite: Needs "Show system tray icon" to be set in preferences! ¡Necesita que se establezca "Mostrar icono de bandeja del sistema" en las preferencias! PTransEdit Path in index Ruta en el índice Translated path Ruta traducida Config error Error de configuración Original path Ruta original Local path Ruta local PTransEditBase Path Translations Ruta de traducciones Select one or several file types, then use the controls in the frame below to change how they are processed Seleccione uno o más tipos de archivos, y use los controles en la caja abajo para cambiar cómo se procesan Add Añadir Delete Borrar Cancel Cancelar Save Guardar Preview &Search for: &Buscar por: &Next &Siguiente &Previous &Previo Match &Case &Coincidir mayúsculas y minúsculas Clear Limpiar Creating preview text Creando texto de vista previa Loading preview text into editor Cargando texto de vista previa en el editor Cannot create temporary directory No se puede crear directorio temporal Cancel Cancelar Close Tab Cerrar Pestaña Missing helper program: Programa ayudante faltante: Can't turn doc into internal representation for No se puede convertir documento a representación interna para Cannot create temporary directory: No se puede crear directorio temporal: Error while loading file Error al cargar archivo Form Forma Tab 1 Tab 1 Open Abrir Canceled Cancelado Error loading the document: file missing. Error al cargar el documento: falta el archivo. Error loading the document: no permission. Error al cargar el documento: sin permiso. Error loading: backend not configured. Error al cargar: backend no configurado. Error loading the document: other handler error<br>Maybe the application is locking the file ? Error al cargar el documento: otro error de manejador<br>¿Tal vez la aplicación está bloqueando el archivo? Error loading the document: other handler error. Error al cargar el documento: otro error de manejador. <br>Attempting to display from stored text. <br>Intentando mostrar el texto almacenado. Could not fetch stored text No se pudo obtener el texto almacenado Previous result document Documento de resultado anterior Next result document Siguiente documento resultado Preview Window Vista previa Close Window Cerrar ventana Next doc in tab Siguiente documento en pestaña Previous doc in tab Doc anterior en pestaña Close tab Cerrar pestaña Print tab Print tab Close preview window Cerrar ventana de vista previa Show next result Mostrar siguiente resultado Show previous result Mostrar resultado anterior Print Imprimir PreviewTextEdit Show fields Mostrar campos Show main text Mostrar texto principal Print Imprimir Print Current Preview Imprimir vista previa actual Show image Mostrar imagen Select All Seleccionar todo Copy Copiar Save document to file Guardar documento en un archivo Fold lines Doblar líneas Preserve indentation Preservar indentación Open document Abrir documento Reload as Plain Text Recargar como texto sin formato. Reload as HTML Recargar como HTML. QObject Global parameters Parámetros globales Local parameters Parámetros locales <b>Customised subtrees <b>Subdirectorios personalizados The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. La lista de subdirectorios en la jerarquía indexada<br>dónde algunos parámetros necesitan ser definidos. Valor por defecto: vacío. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Los parámetros siguientes se aplican a nivel superior, si una línea vacía<br>o ninguna es seleccionada en el listado arriba, o para cada directorio seleccionado.<br>Puede añadir o remover directorios presionando los botones +/-. Skipped names Nombres omitidos These are patterns for file or directory names which should not be indexed. Estos son patrones de nombres de archivos o directorios que no deben ser indexados. Default character set Conjunto de caracteres por defecto This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Este es el conjunto de caracteres usado para leer archivos que no son identificados internamente, por ejemplo, archivos de texto puro.<br>El valor por defecto está vacío, y el valor del ambiente NLS es usado. Follow symbolic links Seguir enlaces simbólicos Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Seguir enlaces simbólicos al indexar. El valor por defecto es no, para evitar indexar duplicados Index all file names Indexar todos los nombres de archivos Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indexar los nombres de los archivos para los cuales los contenidos no pueden ser<br>identificados o procesados (tipo MIME inválido o inexistente). El valor por defecto es verdadero Beagle web history Historial web Beagle Search parameters Parámetros de búsqueda Web history Historial Web Default<br>character set Conjunto de caracteres<br>por defecto Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Juego de caracteres usado para leer archivos que no identifican el conjunto de caracteres internamente, por ejemplo archivos de texto puros.<br>El valor por defecto está vacío, y se utiliza el valor del entorno NLS. Ignored endings Finales ignorados These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Estos son los nombres de archivo finalizados para archivos que serán indexados solo por contenido (no intento de identificación de tipo MIME, sin descompresión, sin indexación de contenido. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Estos son los nombres de archivo finalizados para archivos que serán indexados solo por nombre (no intento de identificación de tipo MIME, sin descompresión, sin indexación de contenido). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>Los parámetros que siguen se establecen en el nivel superior, si nada o una línea vacía está seleccionada en el cuadro de lista de arriba, o para el subdirectorio seleccionado. Puede añadir o eliminar directorios haciendo clic en los botones +/- . These are patterns for file or directory names which should not be indexed. Estos son patrones para nombres de archivos o directorios que no deben ser indexados. QWidget Create or choose save directory Crear o elegir directorio de guardado Choose exactly one directory Elija exactamente un directorio Could not read directory: No se pudo leer el directorio: Unexpected file name collision, cancelling. Colisión de nombres de archivo inesperada, cancelando. Cannot extract document: No se puede extraer el documento: &Preview &Vista Previa &Open &Abrir Open With Abrir con Run Script Ejecutar Script Copy &File Name Copiar nombre de &fichero Copy &URL Copiar &URL &Write to File &Escribir a fichero Save selection to files Guardar selección a archivos Preview P&arent document/folder &Vista previa de documento/directorio ascendente &Open Parent document/folder &Abrir documento/directorio ascendente Find &similar documents Buscar documentos &similares Open &Snippets window Abrir ventana de &fragmentos Show subdocuments / attachments Mostrar subdocumentos / adjuntos &Open Parent document &Abrir documento padre &Open Parent Folder &Abrir carpeta padre Copy Text Copiar texto Copy &File Path Copiar Ruta de Archivo Copy File Name Copiar nombre del archivo QxtConfirmationMessage Do not show again. No mostrar de nuevo. RTIToolW Real time indexing automatic start Inicio automático de la indexación en tiempo real <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La indexación de <span style=" font-weight:600;">Recoll</span> puede configurarse para ejecutar como un demonio, actualizando el índice cuando los archivos cambian, en tiempo real. Obtiene un índice actualizado siempre, pero los recursos del sistema son utilizados permanentemente.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Iniciar el demonio de indexación con mi sesión de escritorio. Also start indexing daemon right now. También iniciar demonio de indexación ahora mismo. Replacing: Reemplazando: Replacing file Reemplazando archivo Can't create: No se puede crear: Warning Advertencia Could not execute recollindex No se puede ejecutar recollindex Deleting: Borrando: Deleting file Borrando archivo Removing autostart Eliminando autoinicio Autostart file deleted. Kill current process too ? Archivo de autoinicio borrado. Detener el proceso actual también? Configuration name Nombre de configuración Short alphanumeric nickname for this config Apodo corto alfanumérico para esta configuración. Could not find No se pudo encontrar RclCompleterModel Hits Resultados Hits RclMain About Recoll Acerca de Recoll Executing: [ Ejecutando: [ Cannot retrieve document info from database No se puede recuperar información del documento de la base de datos Warning Advertencia Can't create preview window No se puede crear ventana de vista previa Query results Resultados de búsqueda Document history Historial de documentos History data Datos de historial Indexing in progress: Indexación en progreso: Files Ficheros Purge Purge Stemdb Raízdb Closing Cerrando Unknown Desconocido This search is not active any more Esta búsqueda no está activa Can't start query: No se puede iniciar la consulta: Bad viewer command line for %1: [%2] Please check the mimeconf file Línea de comando incorrecta de visualizador para %1: [%2] Por favor revise el fichero mimeconf Cannot extract document or create temporary file No se puede extraer el documento o crear archivo temporal (no stemming) (sin raíces) (all languages) (todos los lenguajes) error retrieving stemming languages error al recuperar lenguajes para raíces Update &Index Actualizar &Índice Indexing interrupted Indexación interrumpida Stop &Indexing Detener &Indexación All Todo media medios message mensaje other otro presentation presentación spreadsheet hoja de cálculo text texto sorted ordenado filtered filtrado External applications/commands needed and not found for indexing your file types: Aplicaciones/comandos externos necesarios y no encontrados para indexar sus tipos de fichero: No helpers found missing No se encontraron ayudantes Missing helper programs Programas ayudantes faltantes Save file dialog Guardar diálogo de archivo Choose a file name to save under Elija un nombre de archivo en el que guardar Document category filter Filtro de categorías de documentos No external viewer configured for mime type [ No hay visualizador configurado para tipo MIME [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? El visor especificado en mimevimax para %1: %2 no se encuentra. ¿Desea iniciar el diálogo de preferencias? Can't access file: No se puede accesar el archivo: Can't uncompress file: No se puede descomprimir el archivo: Save file Guardar archivo Result count (est.) Conteo de resultados (est.) Query details Detalles de búsqueda Could not open external index. Db not open. Check external index list. No se puede abrir índice externo. Base de datos no abierta. Revise listado de índice externos. No results found No hay resultados None Ninguno Updating Actualizando Done Hecho Monitor Seguidor Indexing failed Indexación falló The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone El proceso de indexación actual no se inicio desde esta interfaz. Presione Ok para detenerlo, o Cancelar para dejarlo ejecutar Erasing index Borrando índice Reset the index and start from scratch ? Restaurar el índice e iniciar desde cero? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Consulta en progreso.<br>Debido a limitaciones en la librería de indexación,<br>cancelar terminará el programa Error Error Index not open Índice no está abierto Index query error Error de consulta del índice Indexed Mime Types Tipos MIME indexados Content has been indexed for these MIME types: El contenido ha sido indexado para estos tipos MIME: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Índice no actualizado para este fichero. No mostrado para evitar utilizar la entrada errónea. Presione Ok para actualizar el índice para este fichero, luego ejecute la consulta de nuevo cuando la indexación termine. En caso contrario, presione Cancelar. Can't update index: indexer running No se puede actualizar el índice: indexador en ejecución Indexed MIME Types Tipos MIME indexados Bad viewer command line for %1: [%2] Please check the mimeview file Línea de comando incorrecta de visualizador para %1: [%2] Por favor revise el archivo mimeconf Viewer command line for %1 specifies both file and parent file value: unsupported Línea de comandos del visualizador para %1 especifica valores para el archivo y el archivo padre: no soportado Cannot find parent document No se encuentra documento padre Indexing did not run yet La indexación no se ha ejecutado aún External applications/commands needed for your file types and not found, as stored by the last indexing pass in Aplicaciones/comandos externos requeridos por sus tipos de archivos y no encontrados, como se almacenaron en el último pase de indexación en Index not up to date for this file. Refusing to risk showing the wrong entry. El índice no está actualizado para este archivo. Rehusando mostrar la entrada equivocada. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Presione Ok para actualizar el índice para este archivo, y ejecute de nuevo la consulta cuando la indexación termine. En caso contrario, cancele. Indexer running so things should improve when it's done El indexador está en ejecución, así que las cosas deberían mejorar cuando termine Sub-documents and attachments Sub-documentos y adjuntos Document filter Filtro de documentos Index not up to date for this file. Refusing to risk showing the wrong entry. El índice no está actualizado para este archivo. Rehusando mostrar la entrada equivocada. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Haga clic en Aceptar para actualizar el índice de este archivo, entonces tendrá que volver a ejecutar la consulta cuando se termine la indexación. The indexer is running so things should improve when it's done. El indexador se está ejecutando así que las cosas deberían mejorar cuando's termine. The document belongs to an external indexwhich I can't update. El documento pertenece a un índice externo que puedo't actualizar. Click Cancel to return to the list. Click Ignore to show the preview anyway. Haga clic en Cancelar para volver a la lista. Haga clic en Ignorar para mostrar la vista previa de todos modos. Duplicate documents Documentos duplicados These Urls ( | ipath) share the same content: Estos URLs ( | ipath) comparten el mismo contenido: Bad desktop app spec for %1: [%2] Please check the desktop file Especificación de aplicación de escritorio incorrecta para %1: [%2] Por favor, compruebe el archivo de escritorio Bad paths Rutas incorrectas Bad paths in configuration file: Rutas incorrectas en el archivo de configuración: Selection patterns need topdir Los patrones de selección necesitan topdir Selection patterns can only be used with a start directory Los patrones de selección sólo pueden utilizarse con un directorio de inicio No search Sin búsqueda No preserved previous search Ninguna búsqueda anterior preservada Choose file to save Elegir archivo para guardar Saved Queries (*.rclq) Consultas guardadas (*.rclq) Write failed Error al escribir Could not write to file No se pudo escribir en el archivo Read failed Lectura fallida Could not open file: No se pudo abrir el archivo: Load error Error de carga Could not load saved query No se pudo cargar la consulta guardada Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Abriendo una copia temporal. Las ediciones se perderán si lo haces't guardarlas<br/>en una ubicación permanente. Do not show this warning next time (use GUI preferences to restore). No mostrar esta advertencia la próxima vez (utilice preferencias GUI para restaurar). Disabled because the real time indexer was not compiled in. Deshabilitado porque el indexador en tiempo real no fue compilado. This configuration tool only works for the main index. Esta herramienta de configuración sólo funciona para el índice principal. The current indexing process was not started from this interface, can't kill it El proceso de indexación actual no se inició desde esta interfaz, puede'no eliminarlo The document belongs to an external index which I can't update. El documento pertenece a un índice externo que puedo't actualizar. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Haga clic en Cancelar para volver a la lista. <br>Haga clic en Ignorar para mostrar la vista previa de todos modos (y recuerde para esta sesión). Index scheduling Programación de índices Sorry, not available under Windows for now, use the File menu entries to update the index Lo sentimos, no está disponible en Windows por ahora, utilice las entradas del menú Archivo para actualizar el índice Can't set synonyms file (parse error?) Puede't establecer archivo de sinónimos (¿analizar error?) Index locked Índice bloqueado Unknown indexer state. Can't access webcache file. Estado indexador desconocido. Puede'acceder al archivo de caché web. Indexer is running. Can't access webcache file. El indexador se está ejecutando. Puede'acceder al archivo de caché web. with additional message: con mensaje adicional: Non-fatal indexing message: Mensaje de indexación no fatal: Types list empty: maybe wait for indexing to progress? Lista de tipos vacíos: ¿tal vez esperar a indexar para progresar? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported La línea de comandos del visor para %1 especifica el archivo padre, pero la URL es http[s]: no soportada Tools Herramientas Results Resultados (%d documents/%d files/%d errors/%d total files) (%d documentos/%d archivos/%d errores/%d en total archivos) (%d documents/%d files/%d errors) (%d documentos/%d archivos /%d errores) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Rutas vacías o inexistentes en el archivo de configuración. Haga clic en Aceptar para comenzar a indexar de todos modos (los datos ausentes no serán borrados del índice): Indexing done Indexación hecha Can't update index: internal error Puede't actualizar el índice: error interno Index not up to date for this file.<br> El índice no está actualizado para este archivo.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Además, parece que la última actualización del índice falló.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Haga clic en Ok para intentar actualizar el índice de este archivo. Necesitará ejecutar la consulta de nuevo cuando finalice la indexación.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Haga clic en Cancelar para volver a la lista.<br>Haga clic en Ignorar para mostrar la vista previa de todos modos (y recuerde para esta sesión). Existe el riesgo de mostrar una entrada incorrecta.<br/> documents documentos document documento files ficheros file archivo errors errores error error total files) total de archivos) No information: initial indexing not yet performed. Sin información: índice inicial aún no realizado. Batch scheduling Programación por lotes The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. La herramienta le permitirá decidir en qué momento debe ejecutarse el indexado. Utiliza el planificador de tareas de Windows. Confirm Confirmar Erasing simple and advanced search history lists, please click Ok to confirm Borrando listas de historial de búsqueda simples y avanzadas, por favor haga clic en Aceptar para confirmar Could not open/create file No se pudo abrir/crear el archivo F&ilter &Filtro Could not start recollindex (temp file error) No se pudo iniciar recollindex (error de archivo temporal) Could not read: No se pudo leer: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Esto reemplazará el contenido actual de la cadena de cabecera de la lista de resultados y el nombre del archivo qsd. GUI ¿Continuar? You will need to run a query to complete the display change. Necesitará ejecutar una consulta para completar el cambio de pantalla. Simple search type Tipo de búsqueda simple Any term Cualquier término All terms Todos los términos File name Nombre de archivo Query language Lenguaje de consulta Stemming language Lenguaje de raíces Main Window Ventana principal Focus to Search Concéntrico en buscar Focus to Search, alt. Concéntrate en buscar, alto. Clear Search Limpiar búsqueda Focus to Result Table Concéntrate en la tabla de resultados Clear search Limpiar búsqueda Move keyboard focus to search entry Mover foco del teclado a la entrada de búsqueda Move keyboard focus to search, alt. Mover enfoque del teclado a la búsqueda, alto. Toggle tabular display Alternar pantalla tabular Move keyboard focus to table Mover foco del teclado a la tabla Flushing Actualizando Show menu search dialog Mostrar diálogo de búsqueda de menú Duplicates Duplicados Filter directories Filtrar directorios. Main index open error: Error al abrir el índice principal: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. El índice puede estar corrupto. ¿Quizás intentar ejecutar xapian-check o reconstruir el índice? This search is not active anymore Esta búsqueda ya no está activa. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported La línea de comandos del visor para %1 especifica un archivo padre pero la URL no es file:// : no compatible. The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? El visor especificado en mimeview para %1: %2 no se encuentra. ¿Desea iniciar el cuadro de diálogo de preferencias? Show advanced search dialog Mostrar cuadro de diálogo de búsqueda avanzada with additional message: RclMainBase Previous page Página anterior Next page Siguiente página &File &Archivo E&xit &Salir &Tools &Herramientas &Help &Ayuda &Preferences &Preferencias Search tools Herramientas de búsqueda Result list Lista de resultados &About Recoll &Acerca de Recoll Document &History Historial de &Documentos Document History Historial de Documentos &Advanced Search Búsqueda &Avanzada Advanced/complex Search Búsqueda avanzada/compleja &Sort parameters Parámetros de &ordenamiento Sort parameters Parámetros de ordenamiento Next page of results Página de resultados siguiente Previous page of results Página de resultados anterior &Query configuration Configuración de &consulta &User manual Manual de &Usuario Recoll Recoll Ctrl+Q Ctrl+Q Update &index Actualizar &índice Term &explorer &Explorador de términos Term explorer tool Herramienta de exploración de términos External index dialog Configuración de índices externos &Erase document history Borrar historial de &documentos First page Primera página Go to first page of results Ir a la primera página de resultados &Indexing configuration Configuración de &indexación All Todo &Show missing helpers &Mostrar ayudantes faltantes PgDown AvPág Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Mayús+Inicio, Ctrl+S, Ctrl+Q, Ctrl+S PgUp RePág &Full Screen Pantalla &Completa F11 F11 Full Screen Pantalla Completa &Erase search history Borrar historial de &búsqueda sortByDateAsc ordenarPorFechaAsc Sort by dates from oldest to newest Ordenar por fechas de la más antigua a la más reciente sortByDateDesc ordenarPorFechaDesc Sort by dates from newest to oldest Ordenar por fechas de la más reciente a la más antigua Show Query Details Mostrar resultados de la consulta Show results as table Mostrar resultados tabulados &Rebuild index &Reconstruir índice &Show indexed types &Mostrar tipos indexados Shift+PgUp Mayúsculas+RePág &Indexing schedule &Horario de indexación E&xternal index dialog &Configuración de índices externos &Index configuration &Configuración del Índice &GUI configuration Configuración de &GUI &Results &Resultados Sort by date, oldest first Ordenar por fecha, antiguos primero Sort by date, newest first Ordenar por fecha, recientes primero Show as table Mostrar como tabla Show results in a spreadsheet-like table Mostrar resultados en una tabla similar a una hoja de cálculo Save as CSV (spreadsheet) file Guardar como un archivo CSV (hoja de cálculo) Saves the result into a file which you can load in a spreadsheet Guardar el resultado en un archivo que se puede cargar en una hoja de cálculo Next Page Página Siguiente Previous Page Página Anterior First Page Primera Página Query Fragments Fragmentos de consulta With failed files retrying Con archivos fallidos reintentando Next update will retry previously failed files La próxima actualización reintentará archivos fallidos anteriormente Save last query Guardar última consulta Load saved query Cargar consulta guardada Special Indexing Indexación especial Indexing with special options Indexando con opciones especiales Indexing &schedule &Programa de indexación Enable synonyms Habilitar sinónimos &View &Ver Missing &helpers &Falta ayudantes Indexed &MIME types Tipos &MIME indexados Index &statistics &Estadísticas del índice Webcache Editor Editor de caché web Trigger incremental pass Activar paso incremental E&xport simple search history E&xportar historial de búsqueda simple Use default dark mode Usar modo oscuro por defecto Dark mode Modo oscuro &Query &Consulta Increase results text font size Aumentar el tamaño de la fuente del texto de los resultados. Increase Font Size Aumentar tamaño de fuente Decrease results text font size Disminuir el tamaño de la fuente del texto de los resultados. Decrease Font Size Disminuir tamaño de fuente Start real time indexer Iniciar indexador en tiempo real. Query Language Filters Filtros de lenguaje de consulta Filter dates Filtrar fechas Assisted complex search Búsqueda compleja asistida Filter birth dates Filtrar fechas de nacimiento. Switch Configuration... Configuración de interruptor... Choose another configuration to run on, replacing this process Elija otra configuración para ejecutar, reemplazando este proceso. &User manual (local, one HTML page) Manual del usuario (local, una página HTML) &Online manual (Recoll Web site) Manual en línea (sitio web de Recoll) Path translations Traducciones de ruta With failed files retrying RclTrayIcon Restore Restaurar Quit Salir RecollModel Abstract Resumen Author Autor Document size Tamaño del documento Document date Fecha del documento File size Tamaño del archivo File name Nombre del archivo File date Fecha del archivo Ipath Iván Keywords Palabras clave Mime type Tipo MIME Original character set Conjunto de caracteres original Relevancy rating Calificación de relevancia Title Título URL URL Mtime Fecha Mod Date Fecha Date and time Fecha y hora MIME type Tipo MIME Can't sort by inverse relevance Puede'ordenar por relevancia inversa ResList Result list Lista de resultados Unavailable document Documento no disponible Previous Anterior Next Siguiente <p><b>No results found</b><br> <p><b>No hay resultados</b></br> &Preview &Vista Previa Copy &URL Copiar &URL Find &similar documents Buscar documentos &similares Query details Detalles de búsqueda (show query) (mostrar consulta) Copy &File Name Copiar nombre de &fichero filtered filtrado sorted ordenado Document history Historial de documentos Preview Vista previa Open Abrir <p><i>Alternate spellings (accents suppressed): </i> <p><i>Ortografía alterna (acentos suprimidos): </i> &Write to File &Escribir a fichero Preview P&arent document/folder &Vista previa de documento/directorio ascendente &Open Parent document/folder &Abrir documento/directorio ascendente &Open &Abrir Documents Documentos out of at least de por lo menos for para <p><i>Alternate spellings: </i> <p><i>Escrituras Alternas: </i> Open &Snippets window Abrir ventana de &fragmentos Duplicate documents Documentos duplicados These Urls ( | ipath) share the same content: Estos URLs ( | ipath) comparten el mismo contenido: Result count (est.) Conteo de resultados (est.) Snippets Fragmentos This spelling guess was added to the search: Esta suposición de ortografía fue añadida a la búsqueda: These spelling guesses were added to the search: Estas suposiciones de ortografía fueron agregadas a la búsqueda: ResTable &Reset sort &Restaurar ordenamiento &Delete column &Borrar columna Add " Añadir " " column " columna Save table to CSV file Guardar tabla a archivo CSV Can't open/create file: No se puede abrir/crear archivo: &Preview &Vista previa &Open &Abrir Copy &File Name Copiar nombre de &fichero Copy &URL Copiar &URL &Write to File &Escribir a fichero Find &similar documents Buscar documentos &similares Preview P&arent document/folder &Vista previa de documento/directorio ascendente &Open Parent document/folder &Abrir documento/directorio ascendente &Save as CSV &Guardar como CSV Add "%1" column Agregar columna "%1" Result Table Tabla de Resultados Open Abrir Open and Quit Abrir y salir Preview Vista previa Show Snippets Mostrar Fragmentos Open current result document Abrir documento de resultado actual Open current result and quit Abrir el resultado actual y salir Show snippets Mostrar fragmentos Show header Mostrar cabecera Show vertical header Mostrar cabecera vertical Copy current result text to clipboard Copiar texto actual al portapapeles Use Shift+click to display the text instead. Utilice Shift+click para mostrar el texto en su lugar. %1 bytes copied to clipboard %1 bytes copiados al portapapeles Copy result text and quit Copiar texto de resultado y salir ResTableDetailArea &Preview &Vista previa &Open &Abrir Copy &File Name Copiar nombre de &fichero Copy &URL Copiar &URL &Write to File &Escribir a fichero Find &similar documents Buscar documentos &similares Preview P&arent document/folder &Vista previa de documento/directorio ascendente &Open Parent document/folder &Abrir documento/directorio ascendente ResultPopup &Preview &Previsualización &Open &Abrir Copy &File Name Copiar nombre de &archivo Copy &URL Copiar &URL &Write to File &Escribir a archivo Save selection to files Guardar selección a archivos Preview P&arent document/folder &Vista previa de documento o directorio ascendente &Open Parent document/folder &Abrir documento/directorio ascendente Find &similar documents Buscar documentos &similares Open &Snippets window Abrir ventana de &fragmentos Show subdocuments / attachments Mostrar subdocumentos / adjuntos Open With Abrir con Run Script Ejecutar Script SSearch Any term Cualquier término All terms Todos los términos File name Nombre de archivo Completions Finalizaciones Select an item: Seleccione un ítem: Too many completions Demasiadas finalizaciones Query language Lenguaje de consulta Bad query string Consulta inválida Out of memory No hay memoria Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Ingrese expresión de lenguaje de consulta. Hoja de trucos:<br> <i>term1 term2</i> : 'term1' y 'term2' en cualquier campo.<br> <i>campo:term1</i> : 'term1' en campo 'campo'. <br> Nombres de campos estándar/sinónimos:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-campos: dir, mime/format, type/rclcat, date.<br> Dos ejemplos de intervalo de fechas: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> Los paréntesis no están permitidos en realidad.<br> <i>"term1 term2"</i> : frase (debe aparecer exactamente). Modificadores posibles:<br> <i>"term1 term2"p</i> : busca de proximidad sin orden con distancia estándar.<br> Use el enlace <b>Mostrar Consulta</b> en caso de duda sobre el resultado y vea el manual (&lt;F1>) para más detalles. Enter file name wildcard expression. Ingrese expresión de comodín para nombre de archivo. Enter search terms here. Type ESC SPC for completions of current term. Ingrese términos de búsqueda aquí. Presione ESC ESPACIO para completar el término actual. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Introduzca la expresión del idioma de la consulta. Hoja de trucos:<br> <i>term1 term2</i> : 'term1' y 'term2' en cualquier campo.<br> <i>campo:term1</i> : 'término1' en el campo 'campo'.<br> Nombre/sinónimos de campos estándar:<br> título/sujeto/caption, autor/de, destinatario/to, nombre de archivo, ext.<br> Pseudo-campos: dir, mime/format, type/rclcat, fecha, tamaño.<br> Ejemplos de dos intervalos de fecha: 2009-03-01/2009-05.U2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> Puedes usar paréntesis para hacer las cosas más claras.<br> <i>"término 1 término 2"</i> : frase (debe ocurrir exactamente). Posibles modificadores:<br> <i>"term1 term2"p</i> : búsqueda de proximidad desordenada con distancia predeterminada.<br> Usar <b>Mostrar consulta</b> enlace cuando haya dudas sobre el resultado y ver manual (&lt; 1>) para más detalles. Stemming languages for stored query: Idiomas para la consulta almacenada: differ from current preferences (kept) difiere de las preferencias actuales (Izquierda) Auto suffixes for stored query: Sufijos automáticos para la consulta almacenada: External indexes for stored query: Índices externos para la consulta almacenada: Autophrase is set but it was unset for stored query La frase automática está definida pero no está establecida para la consulta almacenada Autophrase is unset but it was set for stored query La frase automática no está definida pero ha sido establecida para la consulta almacenada Enter search terms here. Introduzca los términos de búsqueda aquí. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; borde: 1px negro sólido; border-collapse: collapse; colapsar la frontera: colapsar; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Consulta la hoja de trampas. En duda: haga clic en <b>Mostrar consulta</b>.&nbsp; You should really look at the manual (F1)</p> Realmente deberías mirar el manual (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Qué</th><th>Ejemplos</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Y</td><td>uno de dos&nbsp;&nbsp;&nbsp;uno AND dos&nbsp;&nbsp;&nbsp;uno y dos</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>O</td><td>uno o dos&nbsp;&nbsp;&nbsp;uno || dos</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Booleano complejo. O tiene prioridad, use paréntesis&nbsp; where needed</td><td>(one AND two) OR three</td></tr> donde sea necesario</td><td>(uno Y dos) O tres</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>No</td><td></td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Frase</td><td>"orgullo y prejuzga"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Prox sin ordenar. (por defecto slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Sin expansión de tallo: capitalizar</td><td>Planta</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>Y dentro del campo (sin orden)</td><td>autor:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>O dentro del campo</td><td>autor:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Nombre de campo</td><td>título/tema/título&nbsp;&nbsp;autor/de<br>destinatario/a&nbsp;&nbsp;nombre de archivo&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Filtro de ruta de directorio</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME filtro de tipo</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Intervalos de fecha</td><td>fecha:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> fecha:2018&nbsp;&nbsp;fecha:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Puede't abrir el índice Could not restore external indexes for stored query:<br> No se pudieron restaurar índices externos para la consulta almacenada:<br> ??? ??? Using current preferences. Utilizando las preferencias actuales. Simple search Búsqueda simple History Historial <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Hoja de trucos del lenguaje de consulta. En caso de duda: haz clic en <b>Mostrar detalles de la consulta</b>. <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> Capitalizar para suprimir la expansión del tallo. differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Limpiar Ctrl+S Ctrl+S Erase search entry Borrar entrada de búsqueda Search Búsqueda Start query Iniciar consulta Enter search terms here. Type ESC SPC for completions of current term. Ingrese términos de búsqueda aquí. Presione ESC ESP para completar el término actual. Choose search type. Elija tipo de búsqueda. Show query history Mostrar historial de consultas Enter search terms here. Introduzca los términos de búsqueda aquí. Main menu Menú principal SearchClauseW SearchClauseW Buscar clavija Any of these Cualquiera All of these Todas None of these Ninguna This phrase Frase Terms in proximity Términos en proximidad File name matching Nombre de fichero Select the type of query that will be performed with the words Elija el tipo de consulta que será realizada con las palabras Number of additional words that may be interspersed with the chosen ones Número de palabras adicionales que pueden ser intercaladas con las escogidas In field En campo No field Ningún campo Any Cualquiera All Todo None Ninguno Phrase Frase Proximity Proximidad File name Nombre de archivo Snippets Snippets Fragmentos X X Find: Buscar: Next Siguiente Prev Anterior SnippetsW Search Buscar <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Lo sentimos, no se encontró una coincidencia exacta dentro de los límites. Probablemente el documento es muy grande y el generador de fragmentos se perdió en un laberinto...</p> Sort By Relevance Ordenar por relevancia Sort By Page Ordenar por página Snippets Window Ventana de fragmentos Find Buscar Find (alt) Buscar (alto) Find Next Buscar Siguiente Find Previous Buscar Anterior Hide Ocultar Find next Buscar siguiente Find previous Buscar anterior Close window Cerrar ventana Increase font size Aumentar tamaño de fuente Decrease font size Disminuir tamaño de fuente SortForm Date Fecha Mime type Tipo MIME SortFormBase Sort Criteria Ordenar criterios Sort the Ordenar most relevant results by: resultados más relevantes por: Descending Descendente Close Cerrar Apply Aplicar SpecIdxW Special Indexing Indexación especial Do not retry previously failed files. No vuelva a intentar archivos fallidos previamente. Else only modified or failed files will be processed. De lo contrario, sólo se procesarán los archivos modificados o fallidos. Erase selected files data before indexing. Borrar los datos de los archivos seleccionados antes de indexar. Directory to recursively index Directorio a índice recursivo Browse Buscar Start directory (else use regular topdirs): Directorio de inicio (si no usa topdirs normales): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Dejar en blanco para seleccionar todos los archivos. Puede utilizar varios patrones de tipo shell separados por espacios.<br>Los patrones con espacios incrustados deben ser comillados con comillas dobles.<br>Sólo se puede usar si el objetivo inicial está establecido. Selection patterns: Patrones de selección: Top indexed entity Entidad índice superior Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Directorio para el índice recursivo. Debe estar dentro del área indexada regular<br> como se define en el archivo de configuración (topdirs). Retry previously failed files. Reintentar archivos fallidos previamente. Start directory. Must be part of the indexed tree. We use topdirs if empty. Directorio de inicio. Debe ser parte del árbol indexado. Utilizamos topdirs si está vacío. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Directorio de inicio. Debe ser parte del árbol índice. Utilice el área índice completa si está vacía. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Archivo de salida de diagnóstico. Se truncará y recibirá diagnósticos de indexación (razones por las cuales los archivos no se están indexando). Diagnostics file Archivo de diagnóstico SpellBase Term Explorer Explorador de términos &Expand &Expandir Alt+E Alt + E &Close &Cerrar Alt+C Alt+C Term Término No db info. No hay información de bd. Doc. / Tot. Doc./Tot. Match Lenguaje Case Distinción de mayúsculas Accents Acentos SpellW Wildcards Comodines Regexp Expresión regular Spelling/Phonetic Ortografía/fonética Aspell init failed. Aspell not installed? Inicialización de Aspell falló. Está instalado Aspell? Aspell expansion error. Error de expansión de Aspell. Stem expansion Expansión de raíces error retrieving stemming languages error al recuperar lenguajes para raíces No expansion found Expansión no encontrada Term Término Doc. / Tot. Doc./Tot. Index: %1 documents, average length %2 terms Índice: %1 documentos, largo promedio %2 términos Index: %1 documents, average length %2 terms.%3 results Índice: %1 documentos, largo promedio %2 términos. %3 resultados %1 results %1 resultados List was truncated alphabetically, some frequent La lista fue separada alfabéticamente, algunos términos terms may be missing. Try using a longer root. frecuentes pueden no aparecer. Intente usar una raíz más larga. Show index statistics Mostrar estadísticas del índice Number of documents Número de documentos Average terms per document Términos promedio por documento Smallest document length Tamaño del documento más pequeño Longest document length Tamaño del documento más grande Database directory size Tamaño del directorio de la base de datos MIME types: Tipos MIME: Item Elemento Value Valor Smallest document length (terms) Longitud más pequeña del documento (términos) Longest document length (terms) Longitud más larga del documento (términos) Results from last indexing: Resultados de la última indexación: Documents created/updated Documentos creados/actualizados Files tested Archivos probados Unindexed files Archivos indexados List files which could not be indexed (slow) Listar archivos que no pudieron ser indexados (lentos) Spell expansion error. Error de expansión ortografía. Spell expansion error. Error de expansión de hechizo. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index El directorio seleccionado no parece ser un índice Xapian This is the main/local index! Este es el índice local o principal! The selected directory is already in the index list El directorio seleccionado ya está en la lista de índices Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Seleccione el directorio para el índice Xapian (ej: /home/buddy/.recoll/xapiandb) error retrieving stemming languages error al recuperar lenguajes para raíces Choose Elegir Result list paragraph format (erase all to reset to default) Formato de párrafo para la lista de resultados (borre todo para volver al valor por defecto) Result list header (default is empty) Encabezado de la lista de resultados (valor por defecto es vacío) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Seleccionar el directorio de configuración de recoll o el directorio para el índice xapian (ej: /home/me/.recoll o /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read El directorio seleccionado parecer ser un directorio de configuración de Recoll pero la configuración no puede ser leída At most one index should be selected Al menos un índice debe ser seleccionado Cant add index with different case/diacritics stripping option No se puede agregar un índice con diferente opción para remover mayúsculas/minúsculas/diacríticos Default QtWebkit font Default QtWebkit font Any term Cualquier término All terms Todos los términos File name Nombre de archivo Query language Lenguaje de consulta Value from previous program exit Valor de salida del programa anterior Context Contexto Description Descripción Shortcut Acceso directo Default Por defecto Choose QSS File Elegir archivo QSS Can't add index with different case/diacritics stripping option. No se puede agregar un índice con una opción de eliminación de mayúsculas/diacríticos diferente. Light Luz Dark Oscuro System Sistema UIPrefsDialogBase User interface Interfaz de usuario Number of entries in a result page Número de elementos en la página de resultados Result list font Tipo de letra para lista de resultados Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Abre una ventana para seleccionar el tipo de letra para la lista de resultados Reset Restaurar Resets the result list font to the system default Restaurar el tipo de letra de la lista de resultados al valor por defecto del sistema Auto-start simple search on whitespace entry. Auto iniciar búsqueda simple al entrar espacios en blanco. Start with advanced search dialog open. Iniciar con la ventana de búsqueda avanzada abierta. Start with sort dialog open. Comenzar con el diálogo de ordenar abierto. Search parameters Parámetros de búsqueda Stemming language Lenguaje de raíces Dynamically build abstracts Construir resúmenes dinámicamente Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. ¿Intentar construir resúmenes para elementos en la lista de resultados utilizando el contexto de los términos de búsqueda? Puede ser lento para documentos grandes. Replace abstracts from documents Reemplazar resúmenes de los documentos Do we synthetize an abstract even if the document seemed to have one? ¿Sintetizar un resumen aunque el documento parece tener uno? Synthetic abstract size (characters) Tamaño del resumen sintetizado (caracteres) Synthetic abstract context words Palabras de contexto del resumen sintetizado External Indexes Índices Externos Add index Añadir índice Select the xapiandb directory for the index you want to add, then click Add Index Seleccione el directorio xapiandb para el índice que desea añadir, luego haga clic en Agregar índice Browse Buscar &OK &Aceptar Apply changes Aplicar cambios &Cancel &Cancelar Discard changes Descartar cambios Result paragraph<br>format string Texto de formato para<br>párrafo de resultados Automatically add phrase to simple searches Automáticamente añadir frases a búsquedas simples A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Una búsqueda por [rolling stones] (2 términos) será cambiada por [rolling or stones or (rolling phrase 2 stones)]. Esto dará mayor precedencia a los resultados en los cuales los términos de búsqueda aparecen exactamente como fueron escritos. User preferences Preferencias de usuario Use desktop preferences to choose document editor. Usar preferencias del escritorio para seleccionar editor de documentos. External indexes Índice externo Toggle selected Cambiar selección Activate All Activar Todos Deactivate All Desactivar Todos Remove selected Eliminar selección Remove from list. This has no effect on the disk index. Eliminar de la lista. Esto no tiene efecto en el índice en disco. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Define el formato para cada párrafo de resultados. Utilice formato qt-html y reemplazos estilo printf:<br>%A Resumen<br> %D Fecha<br> %I Nombre del ícono<br> %K Palabras clave (si existen)<br> %L Enlaces de vista previa y edición<br> %M Tipo MIME<br> %Número de resultado<br> %R Porcentaje de relevancia<br> %S Información de tamaño<br> %T Título<br> %U Url<br> Remember sort activation state. Recordar estado de activación de ordenamiento. Maximum text size highlighted for preview (megabytes) Tamaño máximo de texto resaltado para vista previa (megabytes) Texts over this size will not be highlighted in preview (too slow). Textos más allá de este tamaño no serán resaltados (muy lento). Highlight color for query terms Color de resaltado para términos de búsqueda Prefer Html to plain text for preview. Preferir HTML a texto simple para vista previa. If checked, results with the same content under different names will only be shown once. Si está marcado, los resultados con el mismo contenido bajo nombres diferentes serán mostrados solo una vez. Hide duplicate results. Esconder resultados duplicados. Choose editor applications Escoger aplicaciones para edición Display category filter as toolbar instead of button panel (needs restart). Mostrar filtros de categorías como barra de herramientas en lugar de panel de botones (necesita reinicio). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Las palabras en la lista serán convertidas automáticamente a cláusulas ext:xxx en el ingreso de lenguaje de consulta. Query language magic file name suffixes. Sufijos para nombres mágicos de archivos en el lenguaje de consulta. Enable Habilitar ViewAction Changing actions with different current values Cambiando acciones con valores actuales diferentes Mime type Tipo MIME Command Comando MIME type Tipo MIME Desktop Default Valor predeterminado del ambiente de escritorio Changing entries with different current values Cambiando entradas con diferentes valores actuales ViewActionBase File type Tipo de archivo Action Accin Select one or several file types, then click Change Action to modify the program used to open them Seleccione uno o varios tipos de fichero, luego presione Cambiar Acción para modificar el programa usado para abrirlos Change Action Cambiar Acción Close Cerrar Native Viewers Visualizadores Nativos Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Seleccione uno o varios tipos MIME y presione "Cambiar Acción"<br>Puede también cerrar esta ventana y marcar "Usar preferencias del escritorio"<br>en el panel principal para ignorar esta lista y usar los valores estándar de su escritorio. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Seleccione uno o más tipos mime, y use los controles en la caja abajo para cambiar cómo se procesan. Use Desktop preferences by default Usar preferencias del escritorio como estándar Select one or several file types, then use the controls in the frame below to change how they are processed Seleccione uno o más tipos de archivos, y use los controles en la caja abajo para cambiar cómo se procesan Exception to Desktop preferences Excepción de las preferencias del escritorio Action (empty -> recoll default) Acción (vacío -> valor por defecto de recoll) Apply to current selection Aplicar a la selección actual Recoll action: Acción current value valor Select same Seleccionar misma <b>New Values:</b> <b>Nuevos valores</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. El valor es una línea de comando que se ejecutará. Sustituciones: %s: cadena de búsqueda; %p: número de página; <br>%f: nombre de archivo del documento. Presiona F1 para obtener más ayuda. Webcache Webcache editor Editor de caché web Search regexp Buscar regexp TextLabel Etiqueta de texto WebcacheEdit Copy URL Copiar URL Unknown indexer state. Can't edit webcache file. Estado indexador desconocido. Puede'editar archivo de caché web. Indexer is running. Can't edit webcache file. El indexador se está ejecutando. Puede't editar archivo de caché web. Delete selection Eliminar selección Webcache was modified, you will need to run the indexer after closing this window. La caché web fue modificada, necesitarás ejecutar el indexador después de cerrar esta ventana. Save to File Guardar en archivo File creation failed: La creación del archivo falló: Maximum size %1 (Index config.). Current size %2. Write position %3. Tamaño máximo %1 (Configuración de índice). Tamaño actual %2. Posición de escritura %3. WebcacheModel MIME MIME Url Url Date Fecha Size Tamaño URL URL WinSchedToolW Error Error Configuration not initialized Configuración no inicializada <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexing batch scheduling</h3><p>Utilizamos el planificador de tareas estándar de Windows para esto. El programa se iniciará cuando haga clic en el botón de abajo.</p><p>Puede utilizar la interfaz completa (<i>Crear tarea</i> en el menú de la derecha), o el asistente de <i>Crear tarea básica</i> . En ambos casos Copiar/Pegar la ruta del archivo por lotes que aparece a continuación como la <i>Acción</i> a realizar.</p> Command already started Comando ya iniciado Recoll Batch indexing Indexación de Lote Recoll Start Windows Task Scheduler tool Iniciar la herramienta Planificador de tareas de Windows Could not create batch file No se pudo crear el archivo por lotes. confgui::ConfBeaglePanelW Steal Beagle indexing queue Robar cola de indexado de Beagle Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle NO DEBE estar ejecutándose. Habilita procesar la cola para indexar el historial web de Firefox de Beagle.<br>(debe también instalar el plugin Beagle para Firefox) Web cache directory name Nombre del directorio de caché web The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. El nombre de un directorio donde almacenar la caché para las páginas web visitadas.<br>Se toma una ruta no absoluta relativa al directorio de configuración. Max. size for the web cache (MB) Tamaño máximo para la caché web (MB) Entries will be recycled once the size is reached Las entradas serán recicladas una vez que el tamaño es alcanzado Web page store directory name Nombre del directorio del almacén para páginas web The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. El nombre del directorio dónde almacenar las copias de páginas web visitadas.<br>Una ruta de directorio no absoluta es utilizada, relativa al directorio de configuración. Max. size for the web store (MB) Tamaño máximo para el almacén web (MB) Process the WEB history queue Procesar la cola del historial WEB Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Habilita la indexación de páginas visitadas en Firefox.<br>(necesita también el plugin Recoll para Firefox) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Las entradas serán recicladas una vez que se alcance el tamaño.<br>Solo aumentar el tamaño realmente tiene sentido porque reducir el valor no truncará un archivo existente (solo perder espacio al final). confgui::ConfIndexW Can't write configuration file No se puede escribir archivo de configuración Recoll - Index Settings: Recoll - Configuración de índice: confgui::ConfParamFNW Browse Buscar Choose Elegir confgui::ConfParamSLW + + - - Add entry Añadir entrada Delete selected entries Eliminar entradas seleccionadas ~ ~ Edit selected entries Editar entradas seleccionadas confgui::ConfSearchPanelW Automatic diacritics sensitivity Sensibilidad automática de diacríticos <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Habilitar automáticamente la sensibilidad de diacríticos si el término de búsqueda tiene caracteres acentuados (no presentes en unac_except_trans). De otra forma necesita usar el lenguage de búsqueda y el modificador <i>D</i> para especificar la sensibilidad de los diacríticos. Automatic character case sensitivity Sensibilidad automática a la distinción de mayúsculas/minúsculas de los caracteres <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Habilitar automáticamente la sensibilidad a las mayúsculas/minúsculas si la entrada tiene caracteres en mayúscula en una posición distinta al primer caracter. De otra forma necesita usar el lenguaje de búsqueda y el modificador <i>C</i> para especificar la sensibilidad a las mayúsculas y minúsculas. Maximum term expansion count Máximo conteo de expansión de términos <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Máxima expansión de conteo para un solo término (ej: cuando se usan comodines). El valor por defecto de 10000 es razonable y evitará consultas que parecen congelarse mientras el motor de búsqueda recorre la lista de términos. Maximum Xapian clauses count Máximo conteo de cláusulas de Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Número máximo de cláusulas elementales agregadas a una consulta de Xapian. En algunos casos, el resultado de la expansión de términos puede ser multiplicativo, y deseamos evitar el uso excesivo de memoria. El valor por defecto de 100000 debería ser lo suficientemente alto en la mayoría de los casos, y compatible con las configuraciones de hardware típicas en la actualidad. confgui::ConfSubPanelW Global Global Max. compressed file size (KB) Tamaño máximo de archivo comprimido (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Este valor establece un umbral mas allá del cual los archivos<br>comprimidos no serán procesados. Escriba 1 para no tener límite,<br>o el número 0 para nunca hacer descompresión. Max. text file size (MB) Tamaño máximo para archivo de texto (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Este valor establece un umbral más allá del cual los archivos de texto no serán procesados.<br>Escriba 1 para no tener límites. Este valor es utilizado para excluir archivos de registro gigantescos del índice. Text file page size (KB) Tamaño de página para archivo de texto (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Si se utiliza este valor (diferente de -1), los archivos de texto serán separados en partes de este tamaño para ser indexados. Esto ayuda con las búsquedas de archivos de texto muy grandes (ej: archivos de registro). Max. filter exec. time (S) Tiempo máximo de ejecución de filtros (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Filtros externos que se ejecuten por más tiempo del establecido serán abortados.<br>Esto ocurre en los raros casos (ej: postscript) cuando un documento hace que un filtro entre en un ciclo.<br>Establezca un valor de -1 para no tener límite. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Filtros externos que se ejecuten por más tiempo del establecido serán detenidos. Esto es por el caso inusual (ej: postscript) dónde un documento puede causar que un filtro entre en un ciclo infinito. Establezca el número -1 para indicar que no hay límite. Only mime types Solo tipos mime An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Una lista exclusiva de tipos de mime indexados.<br>Nada más será indexado. Normalmente vacío e inactivo Exclude mime types Excluir tipos mime Mime types not to be indexed Tipos Mime que no deben ser indexados Max. filter exec. time (s) Máximo filtro exec. tiempo (s) confgui::ConfTabsW Apply Aplicar confgui::ConfTopPanelW Top directories Directorios primarios The list of directories where recursive indexing starts. Default: your home. La lista de directorios donde la indexación recursiva comienza. Valor por defecto: su directorio personal. Skipped paths Directorios omitidos These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Estos son los nombres de directorios los cuales no se indexan.<br>Puede contener comodines. Debe corresponder a las rutas vistas por el indexador (ej: si los directorios primarios incluyen '/home/me' y '/home' es en realidad un enlace a '/usr/home', la entrada correcta para directorios omitidos sería '/home/me/tmp*', no '/usr/home/me/tmp*') Stemming languages Lenguajes para raíces The languages for which stemming expansion<br>dictionaries will be built. Los lenguajes para los cuales los diccionarios de expansión de raíces serán creados. Log file name Nombre de archivo de registro The file where the messages will be written.<br>Use 'stderr' for terminal output El archivo donde los mensajes serán escritos.<br>Use 'stderr' para salida a la terminal Log verbosity level Nivel de verbosidad del registro This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Este valor ajusta la cantidad de mensajes,<br>desde solamente errores hasta montones de información de depuración. Index flush megabytes interval Intervalo en megabytes de escritura del índice This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Este valor ajusta la cantidad de datos indexados entre escrituras al disco.<br> Esto ayuda a controlar el uso de memoria del indexador. Valor estándar 10MB Max disk occupation (%) Utilización máxima de disco (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Este es el porcentaje de utilización de disco donde la indexación fallará y se detendrá (para evitar llenarle el disco).<br>0 significa sin límites (valor por defecto). No aspell usage No utilizar aspell Aspell language Lenguaje Aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. El lenguaje para el diccionario aspell. Esto debe ser algo como 'en' o 'fr'...<br>Si este valor no se especifica, el ambiente NLS será usado para averiguarlo, lo cual usualmente funciona. Para tener una idea de qué esta instalado en su sistema escriba 'aspell-config' y busque por ficheros .dat dentro del directorio 'data-dir'. Database directory name Nombre del directorio de base de datos The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Nombre del directorio donde almacenar el índice.<br>Un valor no absoluto para la ruta de directorio es usado, relativo al directorio de configuración. El valor estándar es 'xapiandb'. Use system's 'file' command Utilizar el comando 'file' del sistema Use the system's 'file' command if internal<br>mime type identification fails. Utilizar el comando 'file' del sistema si la identificación interna de tipos MIME falla. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Deshabilita el uso de aspell para generar aproximaciones ortográficas en la herramienta explorador de términos.<br>Útil si aspell no se encuentra o no funciona. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. El lenguaje para el diccionario aspell. Esto debería ser algo como 'en' o 'fr' ...<br>Si no se establece este valor, el ambiente NLS será utilizado para calcularlo, lo cual usualmente funciona. Para tener una idea de lo que está instalado en sus sistema, escriba 'aspell-config' y busque archivos .dat dentro del directorio 'data-dir'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. El nombre de un directorio donde almacenar el índice.<br>Una ruta no absoluta se interpreta como relativa al directorio de configuración. El valor por defecto es 'xapiandb'. Unac exceptions Excepciones Unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Estas son excepciones al mecanismo unac, el cual, de forma predeterminada, elimina todos los diacríticos, y realiza una descomposición canónica. Es posible prevenir la eliminación de acentos para algunos caracteres, dependiendo de su lenguaje, y especificar descomposiciones adicionales, por ejemplo, para ligaturas. En cada entrada separada por espacios, el primer caracter es el origen, y el resto es la traducción. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Estos son los nombres de los directorios que no entrarán en la indexación.<br>Los elementos de ruta pueden contener comodines. Las entradas deben coincidir con las rutas vistas por el indexador (p. ej. si topdirs incluye '/home/me' y '/home' es en realidad un enlace a '/usr/home', una entrada correcta de skippedPath sería '/home/me/tmp*', no '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Máxima ocupación de disco (%, 0 significa sin límite) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Este es el porcentaje de uso del disco - uso total del disco, no tamaño del índice- en el que la indexación fallará y se detendrá.<br>El valor predeterminado de 0 elimina cualquier límite. uiPrefsDialogBase User preferences Preferencias de usuario User interface Interfaz de usuario Number of entries in a result page Número de elementos en la página de resultados If checked, results with the same content under different names will only be shown once. Si está marcado, los resultados con el mismo contenido bajo nombres diferentes serán mostrados solo una vez. Hide duplicate results. Esconder resultados duplicados. Highlight color for query terms Color de resaltado para términos de búsqueda Result list font Tipo de letra para lista de resultados Opens a dialog to select the result list font Abre una ventana para seleccionar el tipo de letra para la lista de resultados Helvetica-10 Helvetica-10 Resets the result list font to the system default Restaurar el tipo de letra de la lista de resultados al valor por defecto del sistema Reset Restaurar Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Define el formato para cada párrafo de resultados. Utilice formato qt-html y reemplazos estilo printf:<br>%A Resumen<br> %D Fecha<br> %I Nombre del ícono<br> %K Palabras clave (si existen)<br> %L Enlaces de vista previa y edición<br> %M Tipo MIME<br> %Número de resultado<br> %R Porcentaje de relevancia<br> %S Información de tamaño<br> %T Título<br> %U Url<br> Result paragraph<br>format string Texto de formato para<br>párrafo de resultados Texts over this size will not be highlighted in preview (too slow). Textos más allá de este tamaño no serán resaltados (muy lento). Maximum text size highlighted for preview (megabytes) Tamaño máximo de texto resaltado para vista previa (megabytes) Use desktop preferences to choose document editor. Usar preferencias del escritorio para seleccionar editor de documentos. Choose editor applications Escoger aplicaciones para edición Display category filter as toolbar instead of button panel (needs restart). Mostrar filtros de categorías como barra de herramientas en lugar de panel de botones (necesita reinicio). Auto-start simple search on whitespace entry. Auto iniciar búsqueda simple al entrar espacios en blanco. Start with advanced search dialog open. Iniciar con la ventana de búsqueda avanzada abierta. Start with sort dialog open. Comenzar con el diálogo de ordenar abierto. Remember sort activation state. Recordar estado de activación de ordenamiento. Prefer Html to plain text for preview. Preferir HTML a texto simple para vista previa. Search parameters Parámetros de búsqueda Stemming language Lenguaje de raíces A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Una búsqueda por [rolling stones] (2 términos) será cambiada por [rolling or stones or (rolling phrase 2 stones)]. Esto dará mayor precedencia a los resultados en los cuales los términos de búsqueda aparecen exactamente como fueron escritos. Automatically add phrase to simple searches Automáticamente añadir frases a búsquedas simples Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. ¿Intentar construir resúmenes para elementos en la lista de resultados utilizando el contexto de los términos de búsqueda? Puede ser lento para documentos grandes. Dynamically build abstracts Construir resúmenes dinámicamente Do we synthetize an abstract even if the document seemed to have one? ¿Sintetizar un resumen aunque el documento parece tener uno? Replace abstracts from documents Reemplazar resúmenes de los documentos Synthetic abstract size (characters) Tamaño del resumen sintetizado (caracteres) Synthetic abstract context words Palabras de contexto del resumen sintetizado The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Las palabras en la lista serán convertidas automáticamente a cláusulas ext:xxx en el ingreso de lenguaje de consulta. Query language magic file name suffixes. Sufijos para nombres mágicos de archivos en el lenguaje de consulta. Enable Habilitar External Indexes Índices Externos Toggle selected Cambiar selección Activate All Activar Todos Deactivate All Desactivar Todos Remove from list. This has no effect on the disk index. Eliminar de la lista. Esto no tiene efecto en el índice en disco. Remove selected Eliminar selección Click to add another index directory to the list Presione para añadir otro directorio de índice a la lista Add index Añadir índice Apply changes Aplicar cambios &OK &Aceptar Discard changes Descartar cambios &Cancel &Cancelar Abstract snippet separator Separador de fragmentos de resumen Use <PRE> tags instead of <BR>to display plain text as html. Utilizar etiquetas <PRE> en lugar de <BR> para mostrar texto simple como html. Lines in PRE text are not folded. Using BR loses indentation. Líneas en texto PRE no se parten. Al usar BR se pierde indentación. Style sheet Hoja de estilo Opens a dialog to select the style sheet file Abre una ventana de diálogo para seleccionar la hoja de estilos Choose Elegir Resets the style sheet to default Restablecer la hoja de estilo al valor por defecto Lines in PRE text are not folded. Using BR loses some indentation. Líneas en texto PRE no se parten. Al usar BR se pierde indentación. Use <PRE> tags instead of <BR>to display plain text as html in preview. Use etiquetas <PRE> en lugar de <BR> para desplegar texto corriente como html en la vista previa. Result List Lista de resultados Edit result paragraph format string Editar texto de formato para el párrafo de resultados Edit result page html header insert Editar encabezado html insertado en página de resultados Date format (strftime(3)) Formato de fecha (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Umbral de porcentaje de frecuencia sobre el cuál no utilizamos términos dentro de la autofrase. Los términos frequentes son un problema importante de desempeño con las frases. Términos omitidos aumenta la holgura de la frase, y reducen la eficiencia de la autofrase. El valor por defecto es 2 (por ciento). Autophrase term frequency threshold percentage Porcentaje del umbral de frecuencia de términos de autofrase Plain text to HTML line style Texto común a estilo de línea HTML Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Las líneas en texto PRE no son dobladas. Al usar BR se pierde indentación. El estilo PRE + Wrap probablemente es lo que está buscando. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + envoltura Exceptions Excepciones Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Tipos Mime que no deben pasarse a xdg-open incluso cuando "Usar preferencias de escritorio" está establecido.<br> Útil para pasar número de página y opciones de cadena de búsqueda para, por ejemplo, evince. Disable Qt autocompletion in search entry. Deshabilitar autocompletar de Qt en la entrada de búsqueda. Search as you type. Buscar al escribir. Paths translations Rutas de traducciones Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Haga clic para agregar otro directorio de índice a la lista. Puede seleccionar un directorio de configuración de Recoll o un índice Xapian. Snippets window CSS file Archivo CSS para la ventana de fragmentos Opens a dialog to select the Snippets window CSS style sheet file Abre una ventana de diálogo para el archivo de estilos CSS de la ventana de fragmentos Resets the Snippets window style Establece el valor por defecto para el estilo de la ventana de Fragmentos Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Decide si los filtros de documentos se muestran como botones de radio, combobox, barra de herramientas o menú. Document filter choice style: Estilo de selección de filtro de documentos: Buttons Panel Panel de botones Toolbar Combobox Combobox barra de herramientas Menu Menú Show system tray icon. Mostrar icono de la bandeja del sistema. Close to tray instead of exiting. Cerrar la bandeja en lugar de salir. Start with simple search mode Empezar con el modo de búsqueda simple Show warning when opening temporary file. Mostrar advertencia al abrir el archivo temporal. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Estilo de usuario para aplicar a la ventana de fragmentos.<br> Nota: la inserción del encabezado de página de resultado también está incluida en el encabezado de la ventana de fragmentos. Synonyms file Archivo de sinónimos Highlight CSS style for query terms Resaltar el estilo CSS para los términos de consulta Recoll - User Preferences Recoll - Preferencias de usuario Set path translations for the selected index or for the main one if no selection exists. Establece traducciones de rutas para el índice seleccionado o para el principal si no existe selección. Activate links in preview. Activar enlaces en vista previa. Make links inside the preview window clickable, and start an external browser when they are clicked. Haga clic en los enlaces dentro de la ventana de vista previa e inicie un navegador externo cuando se haga clic en ellos. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Resaltado de términos de consulta en resultados. <br>Tal vez intente algo como "color:red;fondo:amarillo" para algo más animado que el azul predeterminado... Start search on completer popup activation. Empezar la búsqueda al activar la ventana emergente. Maximum number of snippets displayed in the snippets window Número máximo de fragmentos mostrados en la ventana de fragmentos Sort snippets by page number (default: by weight). Ordenar fragmentos por número de página (por defecto: por peso). Suppress all beeps. Suprimir todos los pitidos. Application Qt style sheet Hoja de estilo Qt de aplicación Limit the size of the search history. Use 0 to disable, -1 for unlimited. Limita el tamaño del historial de búsqueda. Usa 0 para desactivar, -1 para ilimitado. Maximum size of search history (0: disable, -1: unlimited): Tamaño máximo del historial de búsqueda (0: deshabilitable, -1: ilimitado): Generate desktop notifications. Generar notificaciones de escritorio. Misc Misc Work around QTBUG-78923 by inserting space before anchor text Trabaje alrededor de QTBUG-78923 insertando espacio antes del texto del anclaje Display a Snippets link even if the document has no pages (needs restart). Mostrar un enlace de Snippets incluso si el documento no tiene páginas (necesita reiniciar). Maximum text size highlighted for preview (kilobytes) Tamaño máximo de texto resaltado para la previsualización (kilobytes) Start with simple search mode: Empezar con el modo de búsqueda simple: Hide toolbars. Ocultar barras de herramientas. Hide status bar. Ocultar barra de estado. Hide Clear and Search buttons. Ocultar botones de Borrar y Buscar. Hide menu bar (show button instead). Ocultar barra de menú (mostrar botón en su lugar). Hide simple search type (show in menu only). Ocultar tipo de búsqueda simple (mostrar sólo en el menú). Shortcuts Atajos Hide result table header. Ocultar la cabecera de tabla de resultados. Show result table row headers. Mostrar las cabeceras de fila de la tabla de resultados. Reset shortcuts defaults Restablecer accesos directos por defecto Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Deshabilita los accesos directos Ctrl+[0-9]/[a-z] para saltar a filas de la tabla. Use F1 to access the manual Usar F1 para acceder al manual Hide some user interface elements. Ocultar algunos elementos de la interfaz de usuario. Hide: Ocultar: Toolbars Barras de herramientas Status bar Barra de estado Show button instead. Mostrar botón en su lugar. Menu bar Barra de menú Show choice in menu only. Mostrar solo la opción en el menú. Simple search type Tipo de búsqueda simple Clear/Search buttons Botones Limpiar/Buscar Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Deshabilitar los atajos Ctrl+[0-9]/Shift+[a-z] para saltar a las filas de la tabla. None (default) Ninguno (predeterminado) Uses the default dark mode style sheet Utiliza la hoja de estilo predeterminada de modo oscuro. Dark mode Modo oscuro Choose QSS File Elegir archivo QSS To display document text instead of metadata in result table detail area, use: Para mostrar el texto del documento en lugar de los metadatos en el área de detalle de la tabla de resultados, use: left mouse click clic izquierdo del ratón Shift+click Shift+click - Shift+hacer clic Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Abre un diálogo para seleccionar el archivo de hoja de estilos. Mira en /usr/share/recoll/examples/recoll[-dark].qss para un ejemplo. Result Table Tabla de Resultados Do not display metadata when hovering over rows. No mostrar metadatos al pasar el cursor sobre las filas. Work around Tamil QTBUG-78923 by inserting space before anchor text Solucione el problema de Tamil QTBUG-78923 insertando un espacio antes del texto del ancla. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. El error provoca que caracteres de círculo extraños se muestren dentro de las palabras en tamil resaltadas. La solución alternativa inserta un carácter de espacio adicional que parece solucionar el problema. Depth of side filter directory tree Profundidad del árbol de directorios del filtro lateral Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Factor de zoom para la interfaz de usuario. Útil si el valor predeterminado no es el adecuado para la resolución de pantalla. Display scale (default 1.0): Mostrar escala (por defecto 1.0): Automatic spelling approximation. Aproximación automática de la ortografía. Max spelling distance Distancia máxima de ortografía Add common spelling approximations for rare terms. Agregar aproximaciones de ortografía comunes para términos raros. Maximum number of history entries in completer list Número máximo de entradas de historial en la lista de autocompletado. Number of history entries in completer: Número de entradas de historial en el autocompletado: Displays the total number of occurences of the term in the index Muestra el número total de ocurrencias del término en el índice. Show hit counts in completer popup. Mostrar el número de resultados en el menú desplegable del autocompletado. Prefer HTML to plain text for preview. Prefiera HTML en lugar de texto plano para la vista previa. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Ver la documentación de Qt QDateTimeEdit. Por ejemplo, yyyy-MM-dd. Dejar vacío para usar el formato predeterminado de Qt/System. Side filter dates format (change needs restart) Formato de fechas del filtro lateral (el cambio requiere reiniciar) If set, starting a new instance on the same index will raise an existing one. Si está configurado, iniciar una nueva instancia en el mismo índice generará una existente. Single application Aplicación única Set to 0 to disable and speed up startup by avoiding tree computation. Establecer en 0 para desactivar y acelerar el inicio evitando el cálculo del árbol. The completion only changes the entry when activated. El autocompletado solo cambia la entrada cuando se activa. Completion: no automatic line editing. Completado: no hay edición automática de líneas. Interface language (needs restart): Idioma de la interfaz (requiere reinicio): Note: most translations are incomplete. Leave empty to use the system environment. Nota: la mayoría de las traducciones están incompletas. Deje vacío para usar el entorno del sistema. Preview Vista previa Set to 0 to disable details/summary feature Establecer en 0 para desactivar la función de detalles/resumen. Fields display: max field length before using summary: Campos que se muestran: longitud máxima del campo antes de usar el resumen: Number of lines to be shown over a search term found by preview search. Número de líneas a mostrar sobre un término de búsqueda encontrado por la búsqueda previa. Search term line offset: Desplazamiento de línea de término de búsqueda: Wild card characters *?[] will processed as punctuation instead of being expanded Los caracteres comodín *?[] serán procesados como signos de puntuación en lugar de ser expandidos. Ignore wild card characters in ALL terms and ANY terms modes Ignorar los caracteres comodín en los modos de TODOS los términos y CUALQUIER término. Color scheme Esquema de color When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Al mostrar HTML en modo oscuro, intenta usar un fondo oscuro (y color claro). Esto entra en conflicto con muchos documentos que anularán nuestra configuración clara con su propio color de primer plano CSS (oscuro), lo que resulta en un documento ilegible, por lo que está desactivado de forma predeterminada. Use dark background when displaying HTML in dark mode. Usar un fondo oscuro al mostrar HTML en modo oscuro. recoll-1.43.12/qtgui/i18n/recoll_it.ts0000644000175000017500000075773015124431112016715 0ustar dockesdockes ActSearchDLG Menu search Ricerca nel menu AdvSearch All clauses Tutti i termini Any clause Qualsiasi termine texts testi spreadsheets fogli di calcolo presentations presentazioni media multimediali messages messaggi other altri Bad multiplier suffix in size filter Suffisso moltiplicatore errato nel filtro di dimensione text testo spreadsheet foglio di calcolo presentation presentazione message messaggio Advanced Search Ricerca Avanzata History Next Cronologia Successiva History Prev Storia Precedente Load next stored search Carica la ricerca successiva memorizzata Load previous stored search Carica la ricerca precedente memorizzata AdvSearchBase Advanced search Ricerca avanzata Restrict file types Limita i tipi di file Save as default Salva come default Searched file types Ricerca tipo file All ----> Tutti ----> Sel -----> Sel -----> <----- Sel <----- Sel <----- All <----- Tutti Ignored file types Ignora i file di questo tipo Enter top directory for search Scrivi la directory base per la ricerca Browse Esplora Restrict results to files in subtree: Limita i risultati alla sotto-directory: Start Search Cerca Search for <br>documents<br>satisfying: Cerca i documenti<br>che contengono: Delete clause Elimina condizione Add clause Aggiungi condizione Check this to enable filtering on file types Contrassegna per abilitare la ricerca sul tipo di file By categories Per categorie Check this to use file categories instead of raw mime types Contrassegna per usare le categorie al posto dei tipi mime Close Chiudi All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Tutti i campi non vuoti a destra saranno combinati con AND ("Tutte le clausole" choice) o OR ("Qualsiasi clausola" choice) congiunture. <br>"Qualsiasi" "Tutti" e "Nessuno" tipi di campo può accettare un mix di parole semplici, e frasi racchiuse in virgolette doppie.<br>I campi senza dati vengono ignorati. Invert Invert Minimum size. You can use k/K,m/M,g/G as multipliers Dimensione minima. È possibile utilizzare k/K,m/M,g/G come moltiplicatori Min. Size Min. Size Maximum size. You can use k/K,m/M,g/G as multipliers Dimensione massima. È possibile utilizzare k/K,m/M,g/G come moltiplicatori Max. Size Dimensione Massima Select Seleziona Filter Filtro From Da To A Check this to enable filtering on dates Seleziona questa opzione per abilitare il filtro alle date Filter dates Date del filtro Find Trova Check this to enable filtering on sizes Seleziona questa opzione per abilitare il filtraggio sulle dimensioni Filter sizes Dimensioni filtro Filter birth dates Filtrare le date di nascita ConfIndexW Can't write configuration file Impossibile scrivere il file di configurazione Global parameters Parametri globali Local parameters Parametri locali Search parameters Parametri per la ricerca Top directories Cartella superiore The list of directories where recursive indexing starts. Default: your home. Lista delle cartelle in cui inizia lìindicizzazione recorsiva. Di default è la tua home. Skipped paths Indirizzi saltati These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Questi sono i pathname delle directory che l'indicizzazione non entrerà.<br>Gli elementi del tracciato possono contenere caratteri jolly. Le voci devono corrispondere ai percorsi visti dall'indicizzatore (ad es. if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', una corretta voce skippedPath sarebbe '/home/me/tmp*', non '/usr/home/me/tmp*') Stemming languages Lingue per la radice The languages for which stemming expansion<br>dictionaries will be built. Lingue per le quali verrà costruito<br>il dizionario delle espansioni radicali. Log file name Nome del file di log The file where the messages will be written.<br>Use 'stderr' for terminal output Il file dove verranno scritti i messaggi.<br>Usa 'stderr' per il terminale Log verbosity level Livello di verbosità del log This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Questo valore regola il numero dei messaggi,>br>dai soli errori a mole indicazioni per il debug. Index flush megabytes interval Intervallo in megabite per il salvataggio intermedio dell'indice This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Questo valore regola il volume di dati da indicizzare tra un salvataggio e l'altro.<br>Aiuta a controllare l'uso della memoria. Di default è post uguale a 10Mb This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Questa è la percentuale di utilizzo del disco - utilizzo totale del disco, dimensione non indice - alla quale l'indicizzazione fallirà e si fermerà.<br>Il valore predefinito di 0 rimuove ogni limite. No aspell usage Non usare aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Disabilita l'uso di aspell per generare approssimazione ortografica nel termine strumento esploratore.<br> Utile se aspell è assente o non funziona. Aspell language Lingua di aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. La lingua per il dizionario aspell. Dovrebbe apparire 'it' o 'fr' . .<br>Se questo valore non è impostato, l'ambiente NLS verrà utilizzato per calcolarlo, che di solito funziona. Per avere un'idea di ciò che è installato sul vostro sistema, digita 'aspell config' e cercare . ai file all'interno della 'data-dir' directory. Database directory name Nome della cartella del database The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Il nome di una directory dove memorizzare l'indice<br>Un percorso non assoluto viene preso rispetto alla directory di configurazione. Il valore predefinito è 'xapiandb'. Unac exceptions Eccezioni di Unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Queste sono eccezioni al meccanismo unac che, per impostazione predefinita, rimuove tutti i diacritici ed esegue decomposizione canonica. È possibile sovrascrivere l'enfasi per alcuni caratteri, a seconda della lingua, e specificare decomposizioni aggiuntive, e. . per le legature. In ogni voce separata da spazio, il primo carattere è quello sorgente, e il resto è la traduzione. Process the WEB history queue Elabora la coda di cronologia WEB Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Abilita l'indicizzazione delle pagine visitate da Firefox.<br>(è necessario installare anche il plugin Firefox Recoll) Web page store directory name Nome directory negozio pagina web The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Il nome di una directory dove archiviare le copie delle pagine web visitate.<br>Un percorso non assoluto è preso rispetto alla directory di configurazione. Max. size for the web store (MB) Dimensione massima per il web store (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Le voci saranno riciclate una volta raggiunta la dimensione.<br>Aumentare la dimensione ha senso solo perché la riduzione del valore non troncerà un file esistente (solo lo spazio di scarto alla fine). Automatic diacritics sensitivity Sensibilità automatica dei diacritici <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Attiva automaticamente la sensibilità dei diacritici se il termine di ricerca ha caratteri accentati (non in unac_except_trans). Altrimenti è necessario utilizzare il linguaggio di query e il modificatore <i>D</i> per specificare la sensibilità dei diacritici. Automatic character case sensitivity Sensibilità automatica delle maiuscole <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Attiva automaticamente la sensibilità delle lettere maiuscole se la voce ha caratteri maiuscoli in qualsiasi ma la prima posizione. Altrimenti è necessario utilizzare la lingua di query e il modificatore <i>C</i> per specificare la sensibilità delle maiuscole e minuscole. Maximum term expansion count Numero massimo di espansione a termine <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Numero massimo di espansione per un singolo termine (ad esempio: quando si usano caratteri jolly). Il valore predefinito di 10 000 è ragionevole ed eviterà le interrogazioni che appaiono congelate mentre il motore sta camminando la lista dei termini. Maximum Xapian clauses count Numero massimo di clausole Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Numero massimo di clausole elementari che aggiungiamo a una singola query Xapiana. In alcuni casi, il risultato di espansione del termine può essere moltiplicativo e vogliamo evitare di usare la memoria eccessiva. Nella maggior parte dei casi il valore predefinito di 100 000 dovrebbe essere sufficientemente elevato e compatibile con le attuali configurazioni hardware tipiche. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... I linguaggi per i quali saranno costruiti dizionari di espansione.<br>Vedi la documentazione degli stemmer di Xapian per i possibili valori. Per esempio inglese, francese, tedesco... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. La lingua per il dizionario aspell. I valori sono codici linguistici a 2 lettere, ad esempio 'it', 'fr' . .<br>Se questo valore non è impostato, l'ambiente NLS verrà utilizzato per calcolarlo, che di solito funziona. Per avere un'idea di ciò che è installato sul vostro sistema, digita 'aspell config' e cercare . ai file all'interno della 'data-dir' directory. Indexer log file name Nome del file log indicizzatore If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Se vuoto, verrà utilizzato il valore del nome del file di registro di cui sopra. Potrebbe essere utile avere un registro separato per scopi diagnostici perché il registro comune verrà cancellato quando<br>verrà avviata la GUI. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Percentuale soglia totale del disco alla quale smettiamo di indicizzare<br>Per esempio il 90% per fermarsi al 90% pieno, 0 o 100 significa nessun limite) Web history Cronologia web Process the Web history queue Elaborare la coda della cronologia Web (by default, aspell suggests mispellings when a query has no results). Per impostazione predefinita, aspell suggerisce errori di ortografia quando una query non restituisce risultati. Page recycle interval Intervallo di riciclo pagina <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Per impostazione predefinita, viene mantenuta solo un'istanza di un URL nella cache. Questo può essere modificato impostando questo valore per determinare con quale frequenza manteniamo più istanze ('giorno', 'settimana', 'mese', 'anno'). Si noti che aumentare l'intervallo non cancellerà le voci esistenti. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Nota: le pagine vecchie verranno cancellate per fare spazio a quelle nuove quando si raggiunge la dimensione massima. Dimensione attuale: %1 Start folders Iniziare cartelle The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. La lista delle cartelle/directory da indicizzare. Le sottocartelle verranno elaborate in modo ricorsivo. Predefinito: la tua home. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Percentuale di soglia di spazio su disco pieno al quale interrompiamo l'indicizzazione (es. 90 per fermarsi al 90% di spazio pieno, 0 o 100 significa nessun limite) Browser add-on download folder Cartella di download dell'estensione del browser Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Imposta solo se hai impostato il parametro "Sottodirectory dei download" nelle impostazioni dell'estensione del browser Web. In tal caso, dovrebbe essere il percorso completo della directory (ad esempio /home/[me]/Downloads/my-subdir) Store some GUI parameters locally to the index Memorizzare alcuni parametri GUI localmente all'indice. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index Le impostazioni della GUI sono normalmente memorizzate in un file globale, valido per tutti gli indici. Impostando questo parametro, alcune impostazioni, come la configurazione della tabella dei risultati, saranno specifiche per l'indice. Suspend the real time indexer when running on battery Sospendere l'indicizzatore in tempo reale quando si utilizza la batteria. The indexer will wait for a return on AC and reexec itself when it happens L'indicizzatore aspetterà un ritorno su AC e si ri-eseguirà quando ciò accadrà. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. L'elenco delle cartelle/directory da indicizzare, in modo ricorsivo con le loro sottocartelle.<br>Il carattere '~' si espande nella tua cartella home, che è il valore iniziale predefinito. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Solo tipi mime An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Una lista esclusiva di tipi di mime indicizzati.<br>Niente altro sarà indicizzato. Normalmente vuoto e inattivo Exclude mime types Escludi tipi mime Mime types not to be indexed Tipi MIME da non indicizzare Max. compressed file size (KB) Dimensione massima del file compresso (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Questo valore imposta una soglia oltre la quale i file compressi non saranno elaborati. Impostare a -1 per nessun limite, a 0 per nessuna decompressione mai. Max. text file size (MB) Dimensione massima del file di testo (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Questo valore imposta una soglia oltre la quale i file di testo non saranno elaborati. Impostare a -1 per nessun limite. Questo è per escludere i file di registro mostri dall'indice. Text file page size (KB) Dimensione pagina del file di testo (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Se questo valore è impostato (non uguale a -1), i file di testo saranno divisi in pezzi di questa dimensione per l'indicizzazione. Questo aiuterà a cercare file di testo molto grandi (ie: file di registro). Max. filter exec. time (s) Max. filtro tempo esecuzione (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. I filtri esterni che funzionano più a lungo di questo verranno interrotti. Questo è il raro caso (cioè: postscript) in cui un documento potrebbe causare il caricamento di un filtro. Impostare a -1 per nessun limite. Global Globale ConfigSwitchDLG Switch to other configuration Passa ad un'altra configurazione ConfigSwitchW Choose other Scegli un altro Choose configuration directory Scegli la directory di configurazione CronToolW Cron Dialog Cron Dialog <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> pianificazione di indicizzazione batch (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ogni campo può contenere un carattere jolly (*), un unico valore numerico, elenchi separati da virgole (1,3,5) e intervalli (1-7). Più in generale, i campi saranno utilizzati <span style=" font-style:italic;">come è</span> all'interno del file crontab e la sintassi crontab completa può essere utilizzata, vedere crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Per esempio, inserendo <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Giorni, </span><span style=" font-family:'Courier New,courier';">12, 9</span> in <span style=" font-style:italic;">Ore</span> e <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minuti</span> inizierebbe recollindex ogni giorno alle 12:15 e alle 19:15</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Un programma con attivazioni molto frequenti è probabilmente meno efficiente dell'indicizzazione in tempo reale.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Giorni della settimana (* o 0-7, 0 o 7 è la domenica) Hours (* or 0-23) Ore (* o 0-23) Minutes (0-59) Minuti (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Clicca su <span style=" font-style:italic;">Disabilita</span> per fermare l'indicizzazione automatica del batch, <span style=" font-style:italic;">Abilita</span> per attivarlo, <span style=" font-style:italic;">Annulla</span> per non cambiare nulla.</p></body></html> Enable Abilita Disable Disabilita It seems that manually edited entries exist for recollindex, cannot edit crontab Sembra che le voci modificate manualmente esistano per recollindex, non è possibile modificare crontab Error installing cron entry. Bad syntax in fields ? Errore durante l'installazione della voce cron. Sintassi errata nei campi? EditDialog Dialog Dialogo EditTrans Source path Percorso sorgente Local path Percorso locale Config error Errore di configurazione Original path Percorso originale Path in index Percorso nell'indice Translated path Percorso tradotto EditTransBase Path Translations Traduzioni Tracciato Setting path translations for Impostazione delle traduzioni del percorso per Select one or several file types, then use the controls in the frame below to change how they are processed Selezionare uno o più tipi di file, quindi utilizzare i controlli nel riquadro sottostante per modificare come vengono elaborati Add Aggiungi Delete Elimina Cancel Annulla Save Salva FirstIdxDialog First indexing setup Prima configurazione di indicizzazione <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Sembra che l'indice per questa configurazione non esista.</span><br /><br />Se vuoi solo indicizzare la tua directory home con un insieme di valori predefiniti ragionevoli, premi il pulsante <span style=" font-style:italic;">Inizia l'indicizzazione ora</span> . Sarete in grado di regolare i dettagli più tardi. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Se vuoi più controllo, utilizzare i seguenti link per regolare la configurazione di indicizzazione e la pianificazione.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Questi strumenti possono essere consultati successivamente dal menu <span style=" font-style:italic;">Preferenze</span> .</p></body></html> Indexing configuration Configurazione indicizzazione This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Questo ti permetterà di regolare le directory che vuoi indicizzare, e altri parametri come percorsi di file o nomi esclusi, set di caratteri predefiniti, ecc. Indexing schedule Schema indicizzazione This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Questo ti permetterà di scegliere tra l'indicizzazione batch e in tempo reale e di impostare una pianificazione automatica per l'indicizzazione batch (usando cron). Start indexing now Inizia l'indicizzazione ora FragButs %1 not found. %1 non trovato. %1: %2 %1: %2 Fragment Buttons Pulsanti Frammento Query Fragments Frammenti Di Interrogazione IdxSchedW Index scheduling setup Configurazione pianificazione indice <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> L'indicizzazione può essere eseguita in modo permanente, l'indicizzazione dei file quando cambiano, o eseguono a intervalli discreti. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Leggere il manuale può aiutarti a decidere tra questi approcci (premere F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Questo strumento può aiutarti a impostare un programma per automatizzare l'esecuzione dell'indicizzazione batch, o inizia l'indicizzazione in tempo reale quando accedi (o entrambi, che raramente ha senso). </p></body></html> Cron scheduling Pianificazione cron The tool will let you decide at what time indexing should run and will install a crontab entry. Lo strumento ti permetterà di decidere in quale momento l'indicizzazione dovrebbe essere eseguita e installerà una voce crontab . Real time indexing start up Indicizzazione in tempo reale avvio Decide if real time indexing will be started when you log in (only for the default index). Decidi se l'indicizzazione in tempo reale verrà avviata quando accedi (solo per l'indice predefinito). ListDialog Dialog Dialogo GroupBox GroupBox Main No db directory in configuration Nessuna directory per il DB di base nella configurazione Could not open database in Impossibile aprire il database in . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. Clicca 'Annulla' se vuoi editare il file di configurazione prima di iniziare l'indicizzazione, oppure 'OK' se vuoi procedere. Configuration problem (dynconf Problema di configurazione (dynconf "history" file is damaged or un(read)writeable, please check or remove it: "cronologia" il file è danneggiato o non (letto) scrivibile, si prega di controllare o rimuoverlo: "history" file is damaged, please check or remove it: "cronologia" file danneggiato, si prega di controllare o rimuoverlo: Needs "Show system tray icon" to be set in preferences! Necessita che "Mostra icona nella barra di sistema" sia impostato nelle preferenze! PTransEdit Path in index Percorso nell'indice Translated path Percorso tradotto Config error Errore di configurazione Original path Percorso originale Local path Percorso locale PTransEditBase Path Translations Traduzioni Tracciato Select one or several file types, then use the controls in the frame below to change how they are processed Selezionare uno o più tipi di file, quindi utilizzare i controlli nel riquadro sottostante per modificare come vengono elaborati Add Aggiungi Delete Elimina Cancel Annulla Save Salva Preview &Search for: &Cerca: &Next &Successivo &Previous &Precedente Match &Case Rispetta &Maiuscole/minuscole Clear Cancella Creating preview text Creazione del testo per l'anteprima Loading preview text into editor Caricamento anteprima del testo nell'editor Cannot create temporary directory Impossibile creare directory temporanea Cancel Annulla Close Tab Chiudi Tab Missing helper program: Manca il programma di filtro esterno: Can't turn doc into internal representation for Impossibile tradurre il documento per la rappresentazione interna Cannot create temporary directory: Impossibile creare la directory temporanea: Error while loading file Errore durante il caricamento del file Form Modulo Tab 1 Tab 1 Open Apri Canceled Annullato Error loading the document: file missing. Errore nel caricare il documento: file mancante. Error loading the document: no permission. Errore nel caricamento del documento: nessun permesso. Error loading: backend not configured. Errore nel caricamento: backend non configurato. Error loading the document: other handler error<br>Maybe the application is locking the file ? Errore durante il caricamento del documento: altro errore del gestore<br>Forse l'applicazione sta bloccando il file ? Error loading the document: other handler error. Errore nel caricamento del documento: altro errore del gestore. <br>Attempting to display from stored text. <br>Tentativo di visualizzazione dal testo memorizzato. Could not fetch stored text Impossibile recuperare il testo memorizzato Previous result document Documento di risultato precedente Next result document Prossimo documento di risultato Preview Window Finestra Di Anteprima Close Window Chiudi Finestra Next doc in tab Prossimo documento nella scheda Previous doc in tab Documento precedente nella scheda Close tab Chiudi scheda Print tab Print tab Close preview window Chiudi finestra di anteprima Show next result Mostra il risultato successivo Show previous result Mostra il risultato precedente Print Stampa PreviewTextEdit Show fields Mostra campi Show main text Mostra testo principale Print Stampa Print Current Preview Anteprima Di Stampa Corrente Show image Mostra immagine Select All Seleziona Tutto Copy Copia Save document to file Salva documento su file Fold lines Linee pieghevoli Preserve indentation Preserva rientro Open document Apri documento Reload as Plain Text Ricarica come testo semplice Reload as HTML Ricarica come HTML QObject Global parameters Parametri globali Local parameters Parametri locali <b>Customised subtrees <b>Ramificazioni personalizzate The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Lista delle sottocartelle nella gerarchia indicizzata<br>ove alcuni parametri devono essere ridefiniti. Predefinita: vuota. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>I parametri che seguono sono postii al livello superiore, se niente <br> o una linea vuota è selezionata nella casella sovrastante, oppure al livello della cartella selezionata.<br> Puoi aggiungere/rimuovere cartelle cliccando i bottoni +/-. Skipped names Nomi saltati These are patterns for file or directory names which should not be indexed. Questi sono modelli per i nomi delle cartelle e/o dei files che non devono vebire indicizzati. Default character set Set di caratteri di default This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Questa è la codifica caratteri usata per leggere i file che non contengono indicazioni interne sulla codifica usata, ad esempio file di testo semplice.<br>Il valore predefinito è vuoto, in modo che venga usata l'impostazione locale del sistema. Follow symbolic links Segue il link simbolico Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Segue il link simbolico durante l'indicizzazione. Di default è no, per evitare la duplicazione dell'indice Index all file names Indicizza tutti i nomi dei files Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indicizza il nome di quei files il cui contenuto non può essere identificato o processato (tipo mime non supportato). Di default è impostato a vero Beagle web history Cronologia web Beagle Search parameters Parametri per la ricerca Web history Cronologia web Default<br>character set Set di caratteri predefinito<br> Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Set di caratteri utilizzato per la lettura di file che non identificano internamente il set di caratteri, ad esempio i file di testo puro.<br>Il valore predefinito è vuoto e viene utilizzato il valore dall'ambiente NLS. Ignored endings Terminazioni ignorate These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Si tratta di terminazioni del nome file per i file che saranno indicizzati solo in base al contenuto (nessun tentativo di identificazione del tipo MIME, nessuna decompressione, nessun indicizzazione del contenuto. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Si tratta di terminazioni del nome del file per i file che saranno indicizzati solo per nome (nessun tentativo di identificazione del tipo MIME, nessuna decompressione, nessun indicizzazione del contenuto). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>I parametri che seguono sono impostati al livello superiore, se non viene selezionata niente o una riga vuota nella lista qui sopra, o per la sottocartella selezionata. È possibile aggiungere o rimuovere directory facendo clic sui pulsanti +/. These are patterns for file or directory names which should not be indexed. Questi sono schemi per i nomi di file o directory che non dovrebbero essere indicizzati. QWidget Create or choose save directory Crea o scegli la directory di salvataggio Choose exactly one directory Scegli esattamente una directory Could not read directory: Impossibile leggere la directory: Unexpected file name collision, cancelling. Collisione del nome del file inattesa, annullamento. Cannot extract document: Impossibile estrarre il documento: &Preview &Anteprima &Open &Apri Open With Apri Con Run Script Esegui Script Copy &File Name Copia il nome del &File Copy &URL Copia l'&Url &Write to File &Scrivi su file Save selection to files Salva la selezione sui file Preview P&arent document/folder Anteprima documento/cartella P&arent &Open Parent document/folder &Apri documento/cartella padre Find &similar documents Trova documenti &simili Open &Snippets window Apri finestra &snippet Show subdocuments / attachments Mostra sotto-documenti / allegati &Open Parent document &Apri documento padre &Open Parent Folder &Apri Cartella Padre Copy Text Copia testo Copy &File Path Copia Percorso File Copy File Name Copia nome file QxtConfirmationMessage Do not show again. Non mostrare di nuovo. RTIToolW Real time indexing automatic start Indicizzazione automatica in tempo reale <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict. td"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> L'indicizzazione può essere impostata per essere eseguita come demone, aggiornare l'indice come i file cambiano, in tempo reale. Guadagni un indice sempre aggiornato, ma le risorse del sistema vengono utilizzate in modo permanente.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Avvia l'indicizzazione del demone con la sessione del desktop. Also start indexing daemon right now. Inizia anche l'indicizzazione del demone in questo momento. Replacing: Sostituendo: Replacing file Sostituzione del file Can't create: Può't creare: Warning Attenzione Could not execute recollindex Impossibile eseguire recollindex Deleting: Eliminazione: Deleting file Eliminazione file Removing autostart Rimozione avvio automatico Autostart file deleted. Kill current process too ? Avvio automatico eliminato. Uccidi anche il processo corrente? Configuration name Nome della configurazione Short alphanumeric nickname for this config Breve soprannome alfanumerico per questa configurazione Could not find Impossibile trovare RclCompleterModel Hits Risultati Hits RclMain About Recoll Informazioni su Recoll Executing: [ Esecuzione di: [ Cannot retrieve document info from database Impossibile caricare informazioni del documento dal database Warning Attenzione Can't create preview window Non posso creare la finestra di anteprima Query results Risultati della ricerca Document history Cronologia dei documenti History data Cronologia dei dati Indexing in progress: Indicizzazione in corso: Files File Purge Pulisco Stemdb Database espansioni Closing Chiusura Unknown Sconosciuto This search is not active any more Questa ricerca non e' piu' attiva Can't start query: Non posso iniziare la ricerca: Bad viewer command line for %1: [%2] Please check the mimeconf file Errata linea di comando per %1: [%2] Verifica il file mimeconf Cannot extract document or create temporary file Non posso estrarre il documento o creare il file temporaneo (no stemming) (nessuna espansione) (all languages) (tutte le lingue) error retrieving stemming languages errore nel recupero delle lingue per l'espansione Update &Index Aggiorna Indice Indexing interrupted Indicizzazione interrotta Stop &Indexing Ferma &Indicizzazione All Tutti media multimediali message messaggio other altri presentation presentazione spreadsheet foglio di calcolo text testo sorted ordinati filtered filtrato External applications/commands needed and not found for indexing your file types: Applicazioni/comandi esterni necessari e non trovati per indicizzare i tipi di file: No helpers found missing Nessun aiutante trovato mancante Missing helper programs Programmi helper mancanti Save file dialog Finestra di salvataggio file Choose a file name to save under Scegli un nome file in cui salvare Document category filter Filtro categoria documento No external viewer configured for mime type [ Nessun visualizzatore esterno configurato per il tipo mime [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Il visualizzatore specificato in mimeview per %1: %2 non è stato trovato. Vuoi avviare la finestra di dialogo delle preferenze? Can't access file: Può't file di accesso: Can't uncompress file: Può't decomprimere il file: Save file Salva file Result count (est.) Conteggio dei risultati (est.) Query details Dettagli ricerca Could not open external index. Db not open. Check external index list. Impossibile aprire l'indice esterno. Db non è aperto. Controlla l'elenco degli indici esterni. No results found Nessun risultato trovato None Nessuno Updating Aggiornamento Done Fatto Monitor Monitor Indexing failed Indicizzazione fallita The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Il processo di indicizzazione corrente non è stato avviato da questa interfaccia. Fare clic su Ok per ucciderlo comunque, o Annulla per lasciarlo da solo Erasing index Cancellazione indice Reset the index and start from scratch ? Ripristinare l'indice e iniziare da zero ? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Interrogazione in corso.<br>A causa delle limitazioni della libreria di indicizzazione,<br>l'annullamento esce dal programma Error Errore Index not open Indice non aperto Index query error Errore di query dell'indice Indexed Mime Types Tipi Mime Indicizzati Content has been indexed for these MIME types: Il contenuto è stato indicizzato per questi tipi MIME: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Indice non aggiornato per questo file. Rifiutare il rischio di mostrare la voce sbagliata. Fare clic su Ok per aggiornare l'indice per questo file, quindi rieseguire la query quando l'indicizzazione è finita. Altrimenti, annulla. Can't update index: indexer running Can't update index: indexer in esecuzione Indexed MIME Types Tipi Mime Indicizzati Bad viewer command line for %1: [%2] Please check the mimeview file Linea di comando visualizzatore errata per %1: [%2] Si prega di controllare il file mimeview Viewer command line for %1 specifies both file and parent file value: unsupported Il visualizzatore riga di comando per %1 specifica sia il valore del file che il valore del file superiore: non supportato Cannot find parent document Impossibile trovare il documento genitore Indexing did not run yet L'indicizzazione non è ancora stata eseguita External applications/commands needed for your file types and not found, as stored by the last indexing pass in Applicazioni/comandi esterni necessari per i tipi di file e non trovati, come memorizzati dall'ultimo pass di indicizzazione in Index not up to date for this file. Refusing to risk showing the wrong entry. Indice non aggiornato per questo file. Rifiutare il rischio di mostrare la voce sbagliata. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Fare clic su Ok per aggiornare l'indice per questo file, quindi rieseguire la query quando l'indicizzazione è finita. Altrimenti, annulla. Indexer running so things should improve when it's done Indexer in esecuzione così le cose dovrebbero migliorare quando's fatto Sub-documents and attachments Sotto-documenti e allegati Document filter Filtro documento Index not up to date for this file. Refusing to risk showing the wrong entry. Indice non aggiornato per questo file. Rifiutare il rischio di mostrare la voce sbagliata. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Clic Ok per aggiornare l'indice per questo file, quindi sarà necessario ri-eseguire la query quando l'indicizzazione è fatto. The indexer is running so things should improve when it's done. L'indicizzatore è in esecuzione quindi le cose dovrebbero migliorare quando's fatto. The document belongs to an external indexwhich I can't update. Il documento appartiene ad un indice esterno che posso't aggiornare. Click Cancel to return to the list. Click Ignore to show the preview anyway. Fare clic su Annulla per tornare all'elenco. Fare clic su Ignora per visualizzare comunque l'anteprima. Duplicate documents Duplica documenti These Urls ( | ipath) share the same content: Questi URL (<unk> ipath) condividono lo stesso contenuto: Bad desktop app spec for %1: [%2] Please check the desktop file Specc app desktop errata per %1: [%2] Si prega di controllare il file desktop Bad paths Percorsi errati Bad paths in configuration file: Percorsi errati nel file di configurazione: Selection patterns need topdir I motivi di selezione richiedono topdir Selection patterns can only be used with a start directory I modelli di selezione possono essere usati solo con una directory iniziale No search Nessuna ricerca No preserved previous search Nessuna ricerca precedente conservata Choose file to save Scegli il file da salvare Saved Queries (*.rclq) Query Salvate (*.rclq) Write failed Scrittura fallita Could not write to file Impossibile scrivere sul file Read failed Lettura fallita Could not open file: Impossibile aprire il file: Load error Errore di caricamento Could not load saved query Impossibile caricare la query salvata Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Aprire una copia temporanea. Le modifiche andranno perse se non le salvate't<br/>in una posizione permanente. Do not show this warning next time (use GUI preferences to restore). Non mostrare questo avviso la prossima volta (usa le preferenze GUI per ripristinare). Disabled because the real time indexer was not compiled in. Disabilitato perché l'indicizzatore in tempo reale non è stato compilato. This configuration tool only works for the main index. Questo strumento di configurazione funziona solo per l'indice principale. The current indexing process was not started from this interface, can't kill it Il processo di indicizzazione corrente non è stato avviato da questa interfaccia, può't ucciderlo The document belongs to an external index which I can't update. Il documento appartiene ad un indice esterno che posso't aggiornare. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Fare clic su Annulla per tornare alla lista. <br>Fare clic su Ignora per mostrare comunque l'anteprima (e ricordarsi per questa sessione). Index scheduling Indice di programmazione Sorry, not available under Windows for now, use the File menu entries to update the index Siamo spiacenti, non disponibile in Windows per ora, utilizzare le voci del menu File per aggiornare l'indice Can't set synonyms file (parse error?) Può't impostare il file sinonimi (errore di interpretazione?) Index locked Indice bloccato Unknown indexer state. Can't access webcache file. Stato indicizzatore sconosciuto. Può't accedere al file webcache. Indexer is running. Can't access webcache file. Indexer è in esecuzione. Può't accedere al file webcache. with additional message: con messaggio aggiuntivo: Non-fatal indexing message: Messaggio di indicizzazione non fatale: Types list empty: maybe wait for indexing to progress? Tipi di lista vuota: forse attendere l'indicizzazione per progredire? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Il visualizzatore riga di comando per %1 specifica il file genitore ma l'URL è http[s]: non supportato Tools Strumenti Results Risultati (%d documents/%d files/%d errors/%d total files) (%d documenti/%d file/%d errori/%d file totali) (%d documents/%d files/%d errors) (%d documenti/%d file/%d errori) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Percorsi vuoti o inesistenti nel file di configurazione. Fare clic su Ok per iniziare comunque l'indicizzazione (i dati assenti non verranno eliminati dall'indice): Indexing done Indicizzazione eseguita Can't update index: internal error Può't aggiornare l'indice: errore interno Index not up to date for this file.<br> Indice non aggiornato per questo file.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Inoltre, sembra che l'ultimo aggiornamento dell'indice per il file non sia riuscito.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Fare clic su Ok per provare ad aggiornare l'indice di questo file. Sarà necessario eseguire nuovamente la query quando l'indicizzazione è fatta.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Fare clic su Annulla per tornare alla lista.<br>Fare clic su Ignora per mostrare comunque l'anteprima (e ricordarsi per questa sessione). C'è il rischio di mostrare la voce sbagliata.<br/> documents documenti document documento files file file file errors errori error errore total files) file totali) No information: initial indexing not yet performed. Nessuna informazioni: indicizzazione iniziale non ancora eseguita. Batch scheduling Programmazione lotti The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Lo strumento ti permetterà di decidere in quale momento l'indicizzazione dovrebbe essere eseguita. Utilizza il programma delle attività di Windows. Confirm Conferma Erasing simple and advanced search history lists, please click Ok to confirm Cancellare liste di cronologia di ricerca semplici ed avanzate, fare clic su Ok per confermare Could not open/create file Impossibile aprire/creare il file F&ilter F&ilter Could not start recollindex (temp file error) Impossibile avviare recollindex (errore del file temp) Could not read: Impossibile leggere: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Questo sostituirà il contenuto corrente della stringa dell'intestazione della lista dei risultati e il nome del file qss. Continuare? You will need to run a query to complete the display change. È necessario eseguire una query per completare il cambiamento del display. Simple search type Tipo di ricerca semplice Any term Qualsiasi All terms Tutti File name Nome file Query language Linguaggio di interrogazione Stemming language Linguaggio per l'espansione Main Window Finestra Principale Focus to Search Focus alla ricerca Focus to Search, alt. Concentrati su Ricerca, alt. Clear Search Cancella Ricerca Focus to Result Table Focus alla tabella dei risultati Clear search Cancella ricerca Move keyboard focus to search entry Sposta il focus della tastiera nella voce di ricerca Move keyboard focus to search, alt. Sposta il focus della tastiera per cercare, alt. Toggle tabular display Attiva/Disattiva visualizzazione tabellare Move keyboard focus to table Sposta il focus della tastiera nella tabella Flushing Cancellando Show menu search dialog Mostra il menu della finestra di ricerca. Duplicates Duplicati Filter directories Filtrare le directory Main index open error: Errore nell'apertura dell'indice principale: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. L'indice potrebbe essere corrotto. Forse prova a eseguire xapian-check o ricostruire l'indice? This search is not active anymore Questa ricerca non è più attiva. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported La riga di comando del visualizzatore per %1 specifica il file padre ma l'URL non è file:// : non supportato. The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Il visualizzatore specificato in mimeview per %1: %2 non è stato trovato. Vuoi avviare il dialogo delle preferenze? Show advanced search dialog Mostra la finestra di ricerca avanzata with additional message: RclMainBase Previous page Pagina precedente Next page Pagina seguente &File &File E&xit &Esci &Tools &Strumenti &Help &Aiuto &Preferences &Preferenze Search tools Strumenti di ricerca Result list Lista risultati &About Recoll &Informazioni su Recoll Document &History C&ronologia documenti Document History Visualizza la cronologia dei documenti &Advanced Search Ricerca &Avanzata Advanced/complex Search Mostra la finestra di Ricerca avanzata &Sort parameters &Parametri ordinamento Sort parameters Configurazione dei parametri di ordinamento Next page of results Pagina seguente Previous page of results Pagina precedente &Query configuration &Configurazione ricerca &User manual &Manuale utente Recoll Ricoll Ctrl+Q Ctrl+Q Update &index Aggiorna &indice Term &explorer &Esplora l'indice Term explorer tool Strumento di esplorazione indice External index dialog Configurazione indici esterni &Erase document history &Cancella la cronologia dei documenti First page Prima pagina Go to first page of results Vai alla prima pagina dei risultati &Indexing configuration Conf&igurazione indicizzazione All Tutti &Show missing helpers &Mostra gli aiutanti mancanti PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Maiusc+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen &Schermo Intero F11 F11 Full Screen Schermo Intero &Erase search history &Cancella cronologia di ricerca sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Ordina per date dal più vecchio al più recente sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Ordina per date dal più recente al più vecchio Show Query Details Mostra Dettagli Query Show results as table Mostra i risultati come tabella &Rebuild index &Ricostruisci indice &Show indexed types &Mostra tipi indicizzati Shift+PgUp Maiusc+PgUp &Indexing schedule &Indicizzazione pianificazione E&xternal index dialog Finestra dell'indice &xternal &Index configuration &Configurazione indice &GUI configuration &Configurazione GUI &Results &Risultati Sort by date, oldest first Ordina per data, prima più vecchio Sort by date, newest first Ordina per data, prima più recente Show as table Mostra come tabella Show results in a spreadsheet-like table Mostra risultati in una tabella simile a foglio di calcolo Save as CSV (spreadsheet) file Salva come file CSV (foglio di calcolo) Saves the result into a file which you can load in a spreadsheet Salva il risultato in un file che puoi caricare in un foglio di calcolo Next Page Pagina Successiva Previous Page Pagina Precedente First Page Prima Pagina Query Fragments Frammenti Di Interrogazione With failed files retrying Riprova con i file falliti Next update will retry previously failed files Il prossimo aggiornamento riproverà i file precedentemente falliti Save last query Salva l'ultima query Load saved query Carica query salvata Special Indexing Indicizzazione Speciale Indexing with special options Indicizzazione con opzioni speciali Indexing &schedule &Pianificazione Indicizzazione Enable synonyms Abilita sinonimi &View &Visualizza Missing &helpers &Aiutanti Mancanti Indexed &MIME types Tipi &MIME indicizzati Index &statistics &Statistiche Indice Webcache Editor Editor Webcache Trigger incremental pass Passaggio incrementale innesco E&xport simple search history E&mporta una semplice cronologia di ricerca Use default dark mode Usa la modalità scura predefinita Dark mode Modalità scura &Query &Interroga Increase results text font size Aumentare la dimensione del carattere del testo dei risultati. Increase Font Size Aumenta la dimensione del carattere Decrease results text font size Ridurre la dimensione del carattere del testo dei risultati. Decrease Font Size Riduci la dimensione del carattere Start real time indexer Avvia l'indicizzatore in tempo reale. Query Language Filters Filtri del linguaggio di query Filter dates Date del filtro Assisted complex search Ricerca complessa assistita Filter birth dates Filtrare le date di nascita Switch Configuration... Configurazione Interruttore... Choose another configuration to run on, replacing this process Scegli un'altra configurazione su cui eseguire, sostituendo questo processo. &User manual (local, one HTML page) Manuale utente (locale, una pagina HTML) &Online manual (Recoll Web site) Manuale online (sito web di Recoll) Path translations Traduzioni dei percorsi With failed files retrying RclTrayIcon Restore Ripristina Quit Esci RecollModel Abstract Astratto Author Autore Document size Dimensione del documento Document date Data documento File size Dimensione file File name Nome file File date Data del file Ipath Ipath Keywords Parole Chiave Mime type Tipo MIME Original character set Set di caratteri originale Relevancy rating Valutazione di pertinenza Title Titolo URL URL Mtime Mtime Date Data Date and time Data e ora MIME type Tipo MIME Can't sort by inverse relevance Può't ordinare per rilevanza inversa ResList Result list Lista dei risultati Unavailable document Documento inaccessible Previous Precedente Next Successivo <p><b>No results found</b><br> <p><b>Nessun risultato</b><br> &Preview &Anteprima Copy &URL Copia l'&Url Find &similar documents Trova documenti &simili Query details Dettagli ricerca (show query) (mostra dettagli di ricerca) Copy &File Name Copia il nome del &File filtered filtrato sorted ordinati Document history Cronologia dei documenti Preview Anteprima Open Apri <p><i>Alternate spellings (accents suppressed): </i> <p><i>Alternativi ortografia (accenti soppressi): </i> &Write to File &Scrivi su file Preview P&arent document/folder Anteprima documento/cartella P&arent &Open Parent document/folder &Apri documento/cartella padre &Open &Apri Documents Risultati out of at least totale di almeno for per <p><i>Alternate spellings: </i> <p><i>Ortografia alternativa: </i> Open &Snippets window Apri finestra &snippet Duplicate documents Duplica documenti These Urls ( | ipath) share the same content: Questi URL (<unk> ipath) condividono lo stesso contenuto: Result count (est.) Conteggio dei risultati (est.) Snippets Snippet This spelling guess was added to the search: Questa ipotesi di ortografia è stata aggiunta alla ricerca: These spelling guesses were added to the search: Queste ipotesi di ortografia sono state aggiunte alla ricerca: ResTable &Reset sort &Ripristina ordinamento &Delete column &Elimina colonna Add " Aggiungi " " column " colonna Save table to CSV file Salva tabella su file CSV Can't open/create file: Può't aprire/creare il file: &Preview &Anteprima &Open &Apri Copy &File Name Copia il nome del &File Copy &URL Copia l'&Url &Write to File &Scrivi su file Find &similar documents Trova documenti &simili Preview P&arent document/folder Anteprima documento/cartella P&arent &Open Parent document/folder &Apri documento/cartella padre &Save as CSV &Salva come CSV Add "%1" column Aggiungi "%1" colonna Result Table Tabella Dei Risultati Open Apri Open and Quit Apri ed esci Preview Anteprima Show Snippets Mostra Snippet Open current result document Apre il documento di risultato corrente Open current result and quit Apri il risultato corrente ed esci Show snippets Mostra snippet Show header Mostra intestazione Show vertical header Mostra intestazione verticale Copy current result text to clipboard Copia il testo del risultato corrente negli appunti Use Shift+click to display the text instead. Usa Shift+click per visualizzare il testo invece. %1 bytes copied to clipboard %1 byte copiato negli appunti Copy result text and quit Copia il testo del risultato e esci. ResTableDetailArea &Preview &Anteprima &Open &Apri Copy &File Name Copia il nome del &File Copy &URL Copia l'&Url &Write to File &Scrivi su file Find &similar documents Trova documenti &simili Preview P&arent document/folder Anteprima documento/cartella P&arent &Open Parent document/folder &Apri documento/cartella padre ResultPopup &Preview &Anteprima &Open &Apri Copy &File Name Copia il nome del &File Copy &URL Copia l'&Url &Write to File &Scrivi su file Save selection to files Salva la selezione sui file Preview P&arent document/folder Anteprima documento/cartella P&arent &Open Parent document/folder &Apri documento/cartella padre Find &similar documents Trova documenti &simili Open &Snippets window Apri finestra &snippet Show subdocuments / attachments Mostra sotto-documenti / allegati Open With Apri Con Run Script Esegui Script SSearch Any term Qualsiasi All terms Tutti File name Nome file Completions Espansione Select an item: Seleziona una voce: Too many completions Troppe possibilita' di espansione Query language Linguaggio di interrogazione Bad query string Stringa di ricerca malformata Out of memory Memoria esaurita Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Inserisci l'espressione della lingua di interrogazione. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in qualsiasi campo.<br> <i>campo:term1</i> : 'term1' nel campo 'campo'.<br> Nomi di campo standard/sinonimi:<br> titolo/soggetto/didascalia, autore/da, destinatario/a, nome file, estro.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Due date range: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> Nessuna parentesi consentita.<br> <i>"term1 term2"</i> : frase (deve avvenire esattamente). Possibili modificatori:<br> <i>"term1 term2"p</i> : ricerca di prossimità non ordinata con distanza predefinita.<br> Usa <b>Mostra il link Query</b> quando hai dubbi sul risultato e vedi il manuale (&lt; 1>) per maggiori dettagli. Enter file name wildcard expression. Inserisci il nome del file espressione. Enter search terms here. Type ESC SPC for completions of current term. Inserisci qui i termini di ricerca. Premi ESC Spazio per il completamento automatico dei termini. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Inserisci l'espressione della lingua di interrogazione. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in qualsiasi campo.<br> <i>campo:term1</i> : 'term1' nel campo 'campo'.<br> Nomi di campo standard/sinonimi:<br> titolo/soggetto/didascalia, autore/da, destinatario/a, nome file, estro.<br> Pseudo-fields: dir, mime/format, type/rclcat, data, dimensione.<br> Esempi di intervallo di due date: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> Puoi usare le parentesi per rendere le cose più chiare.<br> <i>"term1 term2"</i> : frase (deve avvenire esattamente). Possibili modificatori:<br> <i>"term1 term2"p</i> : ricerca di prossimità non ordinata con distanza predefinita.<br> Usa <b>Mostra il link Query</b> quando hai dubbi sul risultato e vedi il manuale (&lt; 1>) per maggiori dettagli. Stemming languages for stored query: Lingue di stemming per la query memorizzata: differ from current preferences (kept) differiscono dalle preferenze correnti (mantenute) Auto suffixes for stored query: Suffissi automatici per la query memorizzata: External indexes for stored query: Indici esterni per la query memorizzata: Autophrase is set but it was unset for stored query Autophrase è impostata ma non è stata impostata per la query memorizzata Autophrase is unset but it was set for stored query Autophrase non è impostata ma è stata impostata per la query memorizzata Enter search terms here. Inserisci qui i termini di ricerca. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border-collapse: collasso; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Query lingua cheat-sheet. In dubbio: clicca <b>Mostra Query</b>.&nbsp; You should really look at the manual (F1)</p> Dovresti davvero guardare il manuale (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Che</th><th>Esempi</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>E</td><td>uno due&nbsp;&nbsp;&nbsp;uno E due&nbsp;&nbsp;&nbsp;uno && due</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>O</td><td>uno o due&nbsp;&nbsp;&nbsp;uno <unk> due</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Complesso booleano. O ha la priorità, usa parentesi&nbsp; where needed</td><td>(one AND two) OR three</td></tr> se necessario</td><td>(uno E due) O tre</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Non</td><td>termine</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Frase</td><td>"orgoglio e pregiudizio"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Prox non ordinato. (default slack=10)</td><td>"prejudice&nbsp;orgoglio"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Nessuna espansione dello stelo: capitalizza</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Nomi dei campi</td><td>titolo/soggetto/didascalia&nbsp;&nbsp;autore/da<br>destinatario/a&nbsp;&nbsp;nome_file&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Filtro percorso directory</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Filtro tipo MIME</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Intervalli di data</td><td>data:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Can't open index Could not restore external indexes for stored query:<br> Impossibile ripristinare gli indici esterni per la query memorizzata:<br> ??? ??? Using current preferences. Usare le preferenze correnti. Simple search Ricerca semplice History Cronologia <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Foglio di trucchi del linguaggio di query. In caso di dubbio: clicca <b>Mostra dettagli della query</b>. <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Capitalizzare per sopprimere l'espansione del gambo</td><td>Pavimento</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Cancella Ctrl+S Ctrl+S Erase search entry Cancella voce di ricerca Search Cerca Start query Inizia ricerca Enter search terms here. Type ESC SPC for completions of current term. Inserisci qui i termini di ricerca. Premi ESC Spazio per il completamento automatico dei termini. Choose search type. Scegli il tipo di ricerca. Show query history Mostra cronologia query Enter search terms here. Inserisci qui i termini di ricerca. Main menu Menu principale SearchClauseW SearchClauseW SearchClauseW Any of these Qualsiasi parola All of these Tutte le parole None of these Nessuna di queste This phrase Questa frase Terms in proximity Parole in prossimita' File name matching Nome del file Select the type of query that will be performed with the words Seleziona il tipo di ricerca da effettuare con i termini indicati Number of additional words that may be interspersed with the chosen ones Numero di parole che possono frapporsi tra i termini di ricerca indicati In field In campo No field Nessun campo Any Qualsiasi All Tutti None Nessuno Phrase Frase Proximity Prossimità File name Nome file Snippets Snippets Snippet X X Find: Trova: Next Successivo Prev Precedente SnippetsW Search Cerca <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Siamo spiacenti, nessuna corrispondenza esatta è stata trovata entro i limiti. Probabilmente il documento è molto grande e il generatore di snippet si è perso in un labirinto...</p> Sort By Relevance Ordina Per Rilevanza Sort By Page Ordina Per Pagina Snippets Window Finestra Snippet Find Trova Find (alt) Trova (Alto) Find Next Trova Successivo Find Previous Trova Precedente Hide Nascondi Find next Trova successivo Find previous Trova precedente Close window Chiudi finestra Increase font size Aumenta la dimensione del carattere Decrease font size Riduci la dimensione del carattere SortForm Date Data Mime type Tipo MIME SortFormBase Sort Criteria Criterio di ordinamento Sort the Ordina i most relevant results by: risultati piu' rilevanti per: Descending Discendente Close Chiudi Apply Applica SpecIdxW Special Indexing Indicizzazione Speciale Do not retry previously failed files. Non riprovare i file precedentemente falliti. Else only modified or failed files will be processed. Verranno elaborati solo i file modificati o non riusciti. Erase selected files data before indexing. Cancella i dati dei file selezionati prima dell'indicizzazione. Directory to recursively index Directory all'indice ricorsivo Browse Esplora Start directory (else use regular topdirs): Directory iniziale (altrimenti usa topdirs regolari): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Lasciare vuoto per selezionare tutti i file. È possibile utilizzare più modelli di tipo shell separati da spazio.<br>I modelli con spazi incorporati devono essere citati con virgolette doppie.<br>Può essere usato solo se è impostato l'obiettivo iniziale. Selection patterns: Modelli di selezione: Top indexed entity Principale entità indicizzata Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Directory all'indice ricorsivo. Deve essere all'interno dell'area indicizzata regolare<br> come definita nel file di configurazione (topdir). Retry previously failed files. Riprova i file precedentemente falliti. Start directory. Must be part of the indexed tree. We use topdirs if empty. Cartella di avvio. Deve essere parte dell'albero indicizzato. Usiamo le topdirs se vuote. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Directory di avvio. Deve essere parte dell'albero indicizzato. Usare l'area indicizzata completa se vuota. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). File di output diagnostico. Sarà troncato e riceverà diagnostica di indicizzazione (motivi per cui i file non vengono indicizzati). Diagnostics file File di diagnostica SpellBase Term Explorer Esplorazione dei termini &Expand &Espandi Alt+E Alt+E &Close &Chiudi Alt+C Alt+C Term Termine No db info. Nessuna informazione db. Doc. / Tot. Doc. / Tot. Match Partita Case Caso Accents Accenti SpellW Wildcards Caratteri jolly Regexp Espressione regolare Spelling/Phonetic Ortografia/Fonetica Aspell init failed. Aspell not installed? Errore di inizializzazione aspell. Aspell e' installato? Aspell expansion error. Errore di espansione di Aspell. Stem expansion Espansione grammaticale error retrieving stemming languages Impossibile formare la lista di espansione per la lingua No expansion found Nessun epansione trovata Term Termine Doc. / Tot. Doc. / Tot. Index: %1 documents, average length %2 terms Indice: %1 documenti, lunghezza media %2 termini Index: %1 documents, average length %2 terms.%3 results Indice: %1 documenti, lunghezza media %2 termini.%3 risultati %1 results %1 risultati List was truncated alphabetically, some frequent La lista è stata troncata alfabeticamente, alcuni frequenti terms may be missing. Try using a longer root. i termini potrebbero mancare. Prova ad usare una radice più lunga. Show index statistics Mostra statistiche indice Number of documents Numero di documenti Average terms per document Termini medi per documento Smallest document length Lunghezza del documento più piccola Longest document length Lunghezza più lunga del documento Database directory size Dimensione directory database MIME types: Tipi MIME: Item Elemento Value Valore Smallest document length (terms) Lunghezza del documento più piccola (termini) Longest document length (terms) Lunghezza del documento più lunga (termini) Results from last indexing: Risultati dell'ultima indicizzazione: Documents created/updated Documenti creati/aggiornati Files tested File testati Unindexed files File non indicizzati List files which could not be indexed (slow) Elenca i file che non possono essere indicizzati (lento) Spell expansion error. Errore di espansione ortografica. Spell expansion error. Errore di espansione della parola. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index La directory selezionata non sembra essera un indice Xapian This is the main/local index! Questo e' l'indice principale! The selected directory is already in the index list La directory selezionata e' gia' nella lista Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Seleziona la directory indice Xapian (es.: /home/ciccio/.recoll/xapiandb) error retrieving stemming languages Impossibile formare la lista delle lingue per l'espansione grammaticale Choose Scegli Result list paragraph format (erase all to reset to default) Formato del paragrafo dell'elenco dei risultati (cancella tutto per resettare al predefinito) Result list header (default is empty) Intestazione della lista dei risultati (predefinita vuota) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Seleziona la directory di configurazione di recoll o la directory di indice xapian (es.: /home/me/.recoll o /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read La directory selezionata sembra una directory di configurazione Recoll ma la configurazione non può essere letta At most one index should be selected Al massimo un indice dovrebbe essere selezionato Cant add index with different case/diacritics stripping option Cant add index with different case/diacritics stripping option Default QtWebkit font Default QtWebkit font Any term Qualsiasi All terms Tutti File name Nome file Query language Linguaggio di interrogazione Value from previous program exit Valore dall'uscita del programma precedente Context Contesto Description Descrizione Shortcut Scorciatoia Default Predefinito Choose QSS File Scegliere il file QSS Can't add index with different case/diacritics stripping option. Impossibile aggiungere l'indice con opzione di rimozione di maiuscole/accettini diversa. Light Luce Dark Scuro System Sistema UIPrefsDialogBase User interface Interfaccia utente Number of entries in a result page Numero di risultati per pagina Result list font Fonts per la lista dei risultati Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Apre una finestra di dialogo per selezionare i fonts della lista dei risultati Reset Ripristina Resets the result list font to the system default Ripristina i font della lista dei risultati Auto-start simple search on whitespace entry. Inizia automaticamente una ricerca semplice digitando uno spazio. Start with advanced search dialog open. Inizia aprendo la finestra di ricerca avanzata. Start with sort dialog open. Inizia con la finestra di ordinamento aperta. Search parameters Parametri per la ricerca Stemming language Linguaggio per l'espansione Dynamically build abstracts Costruisci dinamicamente i riassunti Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Devo cercare di costruire i riassunti per le voci nell'elenco dei risultati usando il contesto dei termini di ricerca? Puo' essere lento per grossi documenti.. Replace abstracts from documents Sostituisci i riassunti dei documenti Do we synthetize an abstract even if the document seemed to have one? Devo sintetizzare un riassunto anche se il documento sembra ne abbia uno? Synthetic abstract size (characters) Numero caratteri per il riassunto Synthetic abstract context words Numero di parole di contesto per il riassunto External Indexes Indici esterni Add index Aggiungi indice Select the xapiandb directory for the index you want to add, then click Add Index Seleziona nella directory Xapiandb l'indice che vuoi aggiungere e clicca su 'Aggiungi indice' Browse Esplora &OK &OK Apply changes Applica modifiche &Cancel &Annulla Discard changes Annulla modifiche Result paragraph<br>format string Stringa di formattazione<br>dei risultati Automatically add phrase to simple searches Aggiungi automaticamente frase alle ricerche semplici A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Una ricerca per [vino rosso] (2 parole) sara' completata come [vino O rosso O (vino FRASE 2 rosso)]. Questo dovrebbe dare la precedenza ai risultati che contengono i termini esattamente come sono stati scritti. User preferences Preferenze utente Use desktop preferences to choose document editor. Usa le preferenze del desktop per scegliere l'editor dei documenti. External indexes Indici esterni Toggle selected Commuta selezionati Activate All Seleziona tutti Deactivate All Deseleziona tutti Remove selected Rimuovi selezionati Remove from list. This has no effect on the disk index. Rimuovi dalla lista. Non ha effetto sull'indice del disco. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definisce il formato per ogni paragrafo dell'elenco dei risultati. Usare il formato qt html e le sostituzioni tipo printf:<br>%A Riassunto<br> %D Data<br> %I Icona<br> %K Parole chiave (se esistono)<br> %L Link per anteprima e modifica<br> %M Tipo MIME<br> %N Numero del risultato<br> %R Percentuale di rilevanza<br> %S Informazioni sulla dimensione<br> %T Titolo<br> %U Url<br> Remember sort activation state. Ricorda lo stato dell'impostazione di ordinamento. Maximum text size highlighted for preview (megabytes) Dimensione massima del testo da evidenziare nell'anteprima (megabytes) Texts over this size will not be highlighted in preview (too slow). Testi di lunghezza superiore a questa non vengono evidenziati nella preview (troppo lento). Highlight color for query terms Evidenzia il colore per i termini della query Prefer Html to plain text for preview. Preferisci HTML al testo semplice per l'anteprima. If checked, results with the same content under different names will only be shown once. Se selezionato, i risultati con lo stesso contenuto sotto nomi diversi verranno visualizzati solo una volta. Hide duplicate results. Nascondi i risultati duplicati. Choose editor applications Scegli le applicazioni dell'editor Display category filter as toolbar instead of button panel (needs restart). Mostra il filtro categoria come barra degli strumenti invece del pannello dei pulsanti (richiede il riavvio). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Le parole nella lista saranno automaticamente trasformate in clausole ext:xxx nella voce di lingua di interrogazione. Query language magic file name suffixes. Suffissi del nome del file magico della lingua dell'interrogazione. Enable Abilita ViewAction Changing actions with different current values Modifica di azioni con valori differenti da quelli attuali Mime type Tipo MIME Command Comando MIME type Tipo MIME Desktop Default Desktop Predefinito Changing entries with different current values Cambiare voci con valori correnti diversi ViewActionBase File type Tipo di file Action Azione Select one or several file types, then click Change Action to modify the program used to open them Seleziona uno o piu' tipi di file e poi clicca su 'Cambia Azione' per modificare il programma usato per aprirli Change Action Cambia Azione Close Chiudi Native Viewers Applicazione di visualizzazione Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Selezionare uno o più tipi mime quindi fare clic su "Cambia azione"<br>È anche possibile chiudere questa finestra di dialogo e controllare "Usa preferenze desktop"<br>nel pannello principale per ignorare questa lista e utilizzare le impostazioni predefinite del desktop. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Selezionare uno o più tipi mime quindi utilizzare i controlli nel riquadro inferiore per cambiare come vengono elaborati. Use Desktop preferences by default Usa le preferenze del desktop per impostazione predefinita Select one or several file types, then use the controls in the frame below to change how they are processed Selezionare uno o più tipi di file, quindi utilizzare i controlli nel riquadro sottostante per modificare come vengono elaborati Exception to Desktop preferences Eccezione alle preferenze del desktop Action (empty -> recoll default) Azione (vuota -> valore predefinito di recoll) Apply to current selection Applica alla selezione corrente Recoll action: Recoll action: current value valore attuale Select same Seleziona lo stesso <b>New Values:</b> <b>Nuovi valori:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Il valore è un comando da eseguire sulla riga di comando. Sostituzioni: %s: stringa di ricerca; %p: numero di pagina; <br>%f: nome del file del documento. Premere F1 per ulteriore aiuto. Webcache Webcache editor Editor Webcache Search regexp Cerca regexp TextLabel Etichetta di testo WebcacheEdit Copy URL Copia URL Unknown indexer state. Can't edit webcache file. Stato indicizzatore sconosciuto. Può't modificare il file webcache. Indexer is running. Can't edit webcache file. Indexer è in esecuzione. Può't modificare il file webcache. Delete selection Elimina selezione Webcache was modified, you will need to run the indexer after closing this window. Webcache è stata modificata, è necessario eseguire l'indicizzatore dopo aver chiuso questa finestra. Save to File Salva su File File creation failed: Creazione del file fallita: Maximum size %1 (Index config.). Current size %2. Write position %3. Dimensione massima %1 (Configurazione indice). Dimensione attuale %2. Posizione di scrittura %3. WebcacheModel MIME MIME Url Url Date Data Size Dimensione URL URL WinSchedToolW Error Errore Configuration not initialized Configurazione non inizializzata <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexing batch scheduling</h3><p>Utilizziamo lo standard di Windows task scheduler per questo. Il programma verrà avviato quando si fa clic sul pulsante qui sotto.</p><p>È possibile utilizzare l'interfaccia completa (<i>Crea attività</i> nel menu a destra), o la procedura guidata semplificata <i>Crea attività base</i> . In entrambi i casi Copia/Incolla il percorso del file batch elencato qui sotto come <i>Azione</i> da eseguire.</p> Command already started Comando già avviato Recoll Batch indexing Ricoll lotto indicizzazione Start Windows Task Scheduler tool Avvia lo strumento Pianificazione Attività di Windows Could not create batch file Impossibile creare il file batch confgui::ConfBeaglePanelW Steal Beagle indexing queue Ruba coda di indicizzazione Beagle Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle NON DEVE essere in esecuzione. Abilita l'elaborazione della coda beagle per indicizzare la cronologia web di Firefox.<br>(dovresti anche installare il plugin di Firefox Beagle) Web cache directory name Nome directory cache Web The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Il nome di una directory dove memorizzare la cache per le pagine web visitate.<br>Un percorso non assoluto è preso rispetto alla directory di configurazione. Max. size for the web cache (MB) Dimensione massima per la cache web (MB) Entries will be recycled once the size is reached Le voci saranno riciclate una volta raggiunta la dimensione Web page store directory name Nome directory negozio pagina web The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Il nome di una directory dove archiviare le copie delle pagine web visitate.<br>Un percorso non assoluto è preso rispetto alla directory di configurazione. Max. size for the web store (MB) Dimensione massima per il web store (MB) Process the WEB history queue Elabora la coda di cronologia WEB Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Abilita l'indicizzazione delle pagine visitate da Firefox.<br>(è necessario installare anche il plugin Firefox Recoll) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Le voci saranno riciclate una volta raggiunta la dimensione.<br>Aumentare la dimensione ha senso solo perché la riduzione del valore non troncerà un file esistente (solo lo spazio di scarto alla fine). confgui::ConfIndexW Can't write configuration file Impossibile scrivere il file di configurazione Recoll - Index Settings: Ricoll - Impostazioni Indice confgui::ConfParamFNW Browse Esplora Choose Scegli confgui::ConfParamSLW + + - - Add entry Aggiungi voce Delete selected entries Elimina le voci selezionate ~ ~ Edit selected entries Modifica le voci selezionate confgui::ConfSearchPanelW Automatic diacritics sensitivity Sensibilità automatica dei diacritici <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Attiva automaticamente la sensibilità dei diacritici se il termine di ricerca ha caratteri accentati (non in unac_except_trans). Altrimenti è necessario utilizzare il linguaggio di query e il modificatore <i>D</i> per specificare la sensibilità dei diacritici. Automatic character case sensitivity Sensibilità automatica delle maiuscole <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Attiva automaticamente la sensibilità delle lettere maiuscole se la voce ha caratteri maiuscoli in qualsiasi ma la prima posizione. Altrimenti è necessario utilizzare la lingua di query e il modificatore <i>C</i> per specificare la sensibilità delle maiuscole e minuscole. Maximum term expansion count Numero massimo di espansione a termine <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Numero massimo di espansione per un singolo termine (ad esempio: quando si usano caratteri jolly). Il valore predefinito di 10 000 è ragionevole ed eviterà le interrogazioni che appaiono congelate mentre il motore sta camminando la lista dei termini. Maximum Xapian clauses count Numero massimo di clausole Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Numero massimo di clausole elementari che aggiungiamo a una singola query Xapiana. In alcuni casi, il risultato di espansione del termine può essere moltiplicativo e vogliamo evitare di usare la memoria eccessiva. Nella maggior parte dei casi il valore predefinito di 100 000 dovrebbe essere sufficientemente elevato e compatibile con le attuali configurazioni hardware tipiche. confgui::ConfSubPanelW Global Globale Max. compressed file size (KB) Dimensione massima del file compresso (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Questo valore imposta una soglia oltre la quale i file compressi non saranno elaborati. Impostare a -1 per nessun limite, a 0 per nessuna decompressione mai. Max. text file size (MB) Dimensione massima del file di testo (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Questo valore imposta una soglia oltre la quale i file di testo non saranno elaborati. Impostare a -1 per nessun limite. Questo è per escludere i file di registro mostri dall'indice. Text file page size (KB) Dimensione pagina del file di testo (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Se questo valore è impostato (non uguale a -1), i file di testo saranno divisi in pezzi di questa dimensione per l'indicizzazione. Questo aiuterà a cercare file di testo molto grandi (ie: file di registro). Max. filter exec. time (S) Max. filtro tempo di esecuzione (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. I filtri esterni che funzionano più a lungo di questo verranno interrotti. Questo è il raro caso (cioè: postscript) in cui un documento potrebbe causare un filtro loopSet a -1 per nessun limite. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. I filtri esterni che funzionano più a lungo di questo verranno interrotti. Questo è il raro caso (cioè: postscript) in cui un documento potrebbe causare il caricamento di un filtro. Impostare a -1 per nessun limite. Only mime types Solo tipi mime An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Una lista esclusiva di tipi di mime indicizzati.<br>Niente altro sarà indicizzato. Normalmente vuoto e inattivo Exclude mime types Escludi tipi mime Mime types not to be indexed Tipi MIME da non indicizzare Max. filter exec. time (s) Max. filtro tempo esecuzione (s) confgui::ConfTabsW Apply Applica confgui::ConfTopPanelW Top directories Cartella superiore The list of directories where recursive indexing starts. Default: your home. Lista delle cartelle in cui inizia lìindicizzazione recorsiva. Di default è la tua home. Skipped paths Indirizzi saltati These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Questi sono i nomi delle cartelle in cui l'indicizzazione non entra<br>Possono contenere caratteri speciali. Devono corrispondere agli indirizzi visti dal motore di indicizzazione (ad esempio, se la cartella superiore include '/home/io' e '/home' è in realtà un link a '/usr/home', l'indirizzo corretto che si vuole sltare dovrebbe essere '/home/me/tmp*' e non ì/home/usr/tmp*') Stemming languages Lingue per la radice The languages for which stemming expansion<br>dictionaries will be built. Lingue per le quali verrà costruito<br>il dizionario delle espansioni radicali. Log file name Nome del file di log The file where the messages will be written.<br>Use 'stderr' for terminal output Il file dove verranno scritti i messaggi.<br>Usa 'stderr' per il terminale Log verbosity level Livello di verbosità del log This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Questo valore regola il numero dei messaggi,>br>dai soli errori a mole indicazioni per il debug. Index flush megabytes interval Intervallo in megabite per il salvataggio intermedio dell'indice This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Questo valore regola il volume di dati da indicizzare tra un salvataggio e l'altro.<br>Aiuta a controllare l'uso della memoria. Di default è post uguale a 10Mb Max disk occupation (%) Massima occupazione del disco fisso (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Questa è la percentuale fi occupazione del disco fisso oltre la quale l'indicizzazione si ferma con un errore (per evitare di riempire il disco).<br>0 significa nessun limite (questo è il valore di default). No aspell usage Non usare aspell Aspell language Lingua di aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Lingua per il dizionario aspell. Dovrebbe essere simile a 'en' o 'it' ...<br>Se questo valore non è impostato verrà usato l'ambiente NLS per calcolarlo, cosa che generalmente funziona. Per avere un'idea di cosa sia installato sul tuo sistema, dai il comando 'aspell config' e guarda il nome dei files .dat nella cartella 'data-dir'. Database directory name Nome della cartella del database The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Nome della cartella in cui salvare l'indice<br>Un indirizzo non assoluto viene interpretato come relativo alla cartella di congigurazione. Di default è 'xapiandb'. Use system's 'file' command Usa il comando di sistema 'file' Use the system's 'file' command if internal<br>mime type identification fails. Usa il comando di sistema 'file' se fallisce<br>l'identificazione interna del tipo mime. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Disabilita l'uso di aspell per generare approssimazione ortografica nel termine strumento esploratore.<br> Utile se aspell è assente o non funziona. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. La lingua per il dizionario aspell. Dovrebbe apparire 'it' o 'fr' . .<br>Se questo valore non è impostato, l'ambiente NLS verrà utilizzato per calcolarlo, che di solito funziona. Per avere un'idea di ciò che è installato sul vostro sistema, digita 'aspell config' e cercare . ai file all'interno della 'data-dir' directory. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Il nome di una directory dove memorizzare l'indice<br>Un percorso non assoluto viene preso rispetto alla directory di configurazione. Il valore predefinito è 'xapiandb'. Unac exceptions Eccezioni di Unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Queste sono eccezioni al meccanismo unac che, per impostazione predefinita, rimuove tutti i diacritici ed esegue decomposizione canonica. È possibile sovrascrivere l'enfasi per alcuni caratteri, a seconda della lingua, e specificare decomposizioni aggiuntive, e. . per le legature. In ogni voce separata da spazio, il primo carattere è quello sorgente, e il resto è la traduzione. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Questi sono i pathname delle directory che l'indicizzazione non entrerà.<br>Gli elementi del tracciato possono contenere caratteri jolly. Le voci devono corrispondere ai percorsi visti dall'indicizzatore (ad es. if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', una corretta voce skippedPath sarebbe '/home/me/tmp*', non '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Occupazione massima su disco (%, 0 significa nessun limite) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Questa è la percentuale di utilizzo del disco - utilizzo totale del disco, dimensione non indice - alla quale l'indicizzazione fallirà e si fermerà.<br>Il valore predefinito di 0 rimuove ogni limite. uiPrefsDialogBase User preferences Preferenze utente User interface Interfaccia utente Number of entries in a result page Numero di risultati per pagina If checked, results with the same content under different names will only be shown once. Se selezionato, i risultati con lo stesso contenuto sotto nomi diversi verranno visualizzati solo una volta. Hide duplicate results. Nascondi i risultati duplicati. Highlight color for query terms Evidenzia il colore per i termini della query Result list font Fonts per la lista dei risultati Opens a dialog to select the result list font Apre una finestra di dialogo per selezionare i fonts della lista dei risultati Helvetica-10 Helvetica-10 Resets the result list font to the system default Ripristina i font della lista dei risultati Reset Ripristina Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definisce il formato per ogni paragrafo dell'elenco dei risultati. Usare il formato qt html e le sostituzioni tipo printf:<br>%A Riassunto<br> %D Data<br> %I Icona<br> %K Parole chiave (se esistono)<br> %L Link per anteprima e modifica<br> %M Tipo MIME<br> %N Numero del risultato<br> %R Percentuale di rilevanza<br> %S Informazioni sulla dimensione<br> %T Titolo<br> %U Url<br> Result paragraph<br>format string Stringa di formattazione<br>dei risultati Texts over this size will not be highlighted in preview (too slow). Testi di lunghezza superiore a questa non vengono evidenziati nella preview (troppo lento). Maximum text size highlighted for preview (megabytes) Dimensione massima del testo da evidenziare nell'anteprima (megabytes) Use desktop preferences to choose document editor. Usa le preferenze del desktop per scegliere l'editor dei documenti. Choose editor applications Scegli le applicazioni dell'editor Display category filter as toolbar instead of button panel (needs restart). Mostra il filtro categoria come barra degli strumenti invece del pannello dei pulsanti (richiede il riavvio). Auto-start simple search on whitespace entry. Inizia automaticamente una ricerca semplice digitando uno spazio. Start with advanced search dialog open. Inizia aprendo la finestra di ricerca avanzata. Start with sort dialog open. Inizia con la finestra di ordinamento aperta. Remember sort activation state. Ricorda lo stato dell'impostazione di ordinamento. Prefer Html to plain text for preview. Preferisci HTML al testo semplice per l'anteprima. Search parameters Parametri per la ricerca Stemming language Linguaggio per l'espansione A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Una ricerca per [vino rosso] (2 parole) sara' completata come [vino O rosso O (vino FRASE 2 rosso)]. Questo dovrebbe dare la precedenza ai risultati che contengono i termini esattamente come sono stati scritti. Automatically add phrase to simple searches Aggiungi automaticamente frase alle ricerche semplici Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Devo cercare di costruire i riassunti per le voci nell'elenco dei risultati usando il contesto dei termini di ricerca? Puo' essere lento per grossi documenti.. Dynamically build abstracts Costruisci dinamicamente i riassunti Do we synthetize an abstract even if the document seemed to have one? Devo sintetizzare un riassunto anche se il documento sembra ne abbia uno? Replace abstracts from documents Sostituisci i riassunti dei documenti Synthetic abstract size (characters) Numero caratteri per il riassunto Synthetic abstract context words Numero di parole di contesto per il riassunto The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Le parole nella lista saranno automaticamente trasformate in clausole ext:xxx nella voce di lingua di interrogazione. Query language magic file name suffixes. Suffissi del nome del file magico della lingua dell'interrogazione. Enable Abilita External Indexes Indici esterni Toggle selected Commuta selezionati Activate All Seleziona tutti Deactivate All Deseleziona tutti Remove from list. This has no effect on the disk index. Rimuovi dalla lista. Non ha effetto sull'indice del disco. Remove selected Rimuovi selezionati Click to add another index directory to the list Fare clic per aggiungere un'altra directory indice alla lista Add index Aggiungi indice Apply changes Applica modifiche &OK &OK Discard changes Annulla modifiche &Cancel &Annulla Abstract snippet separator Separatore snippet astratto Use <PRE> tags instead of <BR>to display plain text as html. Usa <PRE> tag invece di <BR>per visualizzare il testo semplice come html. Lines in PRE text are not folded. Using BR loses indentation. Le righe nel testo PRE non sono piegate. L'uso di BR perde l'indentazione. Style sheet Foglio di stile Opens a dialog to select the style sheet file Apre una finestra di dialogo per selezionare il foglio di stile Choose Scegli Resets the style sheet to default Ripristina il foglio di stile predefinito Lines in PRE text are not folded. Using BR loses some indentation. Le righe nel testo PRE non sono ripiegate. L'uso di BR perde qualche rientro. Use <PRE> tags instead of <BR>to display plain text as html in preview. Usa <PRE> tag invece di <BR>per visualizzare il testo semplice come html nell'anteprima. Result List Elenco Dei Risultati Edit result paragraph format string Modifica la stringa di formato del paragrafo del risultato Edit result page html header insert Modifica l'inserimento dell'intestazione html della pagina dei risultati Date format (strftime(3)) Date format (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. I termini saltati aumentano la mancanza di frase e riducono l'efficienza dell'autofasi. Il valore predefinito è 2 (percentuale). Autophrase term frequency threshold percentage Percentuale soglia di frequenza termine Autophrase Plain text to HTML line style Testo semplice in stile riga HTML Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Le righe nel testo PRE non sono piegate. L'uso di BR perde un po' di indentazione. Lo stile PRE + Wrap potrebbe essere quello che vuoi. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + a capo Exceptions Eccezioni Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Tipi MIME che non devono essere passati a xdg-open anche quando "Usa le preferenze del desktop" è impostato.<br> Utile per passare il numero di pagina e cercare le opzioni di stringa, ad esempio evince. Disable Qt autocompletion in search entry. Disabilita completamento automatico di Qt nella voce di ricerca. Search as you type. Cerca mentre scrivi. Paths translations Tracciati traduzioni Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Fare clic per aggiungere un'altra directory indice all'elenco. È possibile selezionare una directory di configurazione Recoll o un indice Xapian. Snippets window CSS file File CSS finestra snippet Opens a dialog to select the Snippets window CSS style sheet file Apre una finestra di dialogo per selezionare il file di foglio CSS della finestra Snippet Resets the Snippets window style Ripristina lo stile della finestra Snippet Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Decidi se i filtri del documento sono mostrati come pulsanti radio, combobox della barra degli strumenti o menu. Document filter choice style: Stile scelta filtro documento: Buttons Panel Pannello Pulsanti Toolbar Combobox Combobox Barra Strumenti Menu Menu Show system tray icon. Mostra icona nel vassoio di sistema. Close to tray instead of exiting. Vicino al vassoio invece di uscire. Start with simple search mode Avvia con una semplice modalità di ricerca Show warning when opening temporary file. Mostra avviso all'apertura del file temporaneo. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Stile utente da applicare alla finestra snippet.<br> Nota: l'inserimento dell'intestazione della pagina dei risultati è anche incluso nell'intestazione della finestra snippet. Synonyms file File sinonimi Highlight CSS style for query terms Evidenzia lo stile CSS per i termini di interrogazione Recoll - User Preferences Ricoll - Preferenze Utente Set path translations for the selected index or for the main one if no selection exists. Imposta le traduzioni del percorso per l'indice selezionato o per quello principale se non esiste selezione. Activate links in preview. Attiva i collegamenti nell'anteprima. Make links inside the preview window clickable, and start an external browser when they are clicked. Fare clic sui link all'interno della finestra di anteprima e avviare un browser esterno quando vengono cliccati. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Interroga i termini che evidenziano nei risultati. <br>Forse prova qualcosa come "color:red;background:yellow" per qualcosa di più vivace del blu predefinito... Start search on completer popup activation. Avvia la ricerca all'attivazione del popup completo. Maximum number of snippets displayed in the snippets window Numero massimo di snippet visualizzate nella finestra snippet Sort snippets by page number (default: by weight). Ordina pezzetti di codice per numero di pagina (predefinito: per peso). Suppress all beeps. Sopprimi tutti i beep. Application Qt style sheet Foglio di stile Qt dell'applicazione Limit the size of the search history. Use 0 to disable, -1 for unlimited. Limita la dimensione della cronologia di ricerca. Usa 0 per disabilitare, -1 per illimitati. Maximum size of search history (0: disable, -1: unlimited): Dimensione massima della cronologia di ricerca (0: disabilitare, -1: illimitata): Generate desktop notifications. Genera notifiche desktop. Misc Varie Work around QTBUG-78923 by inserting space before anchor text Lavorare intorno a QTBUG-78923 inserendo spazio prima del testo di ancoraggio Display a Snippets link even if the document has no pages (needs restart). Mostra un link Snippet anche se il documento non ha pagine (richiede il riavvio). Maximum text size highlighted for preview (kilobytes) Dimensione massima del testo evidenziata per l'anteprima (kilobyte) Start with simple search mode: Inizia con una semplice modalità di ricerca: Hide toolbars. Nascondi barre degli strumenti. Hide status bar. Nascondi barra di stato. Hide Clear and Search buttons. Nascondi i pulsanti Pulizia e Ricerca. Hide menu bar (show button instead). Nascondi la barra dei menu (mostra invece il pulsante). Hide simple search type (show in menu only). Nascondi il semplice tipo di ricerca (mostra solo nel menu). Shortcuts Scorciatoie Hide result table header. Nascondi intestazione tabella risultati. Show result table row headers. Mostra le intestazioni delle righe della tabella dei risultati. Reset shortcuts defaults Ripristina le scorciatoie predefinite Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Disabilita le scorciatoie Ctrl+[0-9]/[a-z] per saltare alle righe della tabella. Use F1 to access the manual Usa F1 per accedere al manuale Hide some user interface elements. Nascondere alcuni elementi dell'interfaccia utente. Hide: Nascondi: Toolbars Barre degli strumenti Status bar Barra di stato Show button instead. Mostra il pulsante invece. Menu bar Barra dei menu Show choice in menu only. Mostra solo la scelta nel menu. Simple search type Tipo di ricerca semplice Clear/Search buttons Pulsanti Cancella/Cerca Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Disabilita le scorciatoie Ctrl+[0-9]/Shift+[a-z] per saltare alle righe della tabella. None (default) Nessuno (predefinito) Uses the default dark mode style sheet Utilizza il foglio di stile predefinito per la modalità scura. Dark mode Modalità scura Choose QSS File Scegliere il file QSS To display document text instead of metadata in result table detail area, use: Per visualizzare il testo del documento invece dei metadati nell'area dettaglio della tabella dei risultati, utilizzare: left mouse click clic del mouse sinistro Shift+click Shift+clic Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Apre un dialogo per selezionare il file del foglio di stile. Guarda /usr/share/recoll/examples/recoll[-dark].qss per un esempio. Result Table Tabella Dei Risultati Do not display metadata when hovering over rows. Non visualizzare i metadati quando si passa il mouse sulle righe. Work around Tamil QTBUG-78923 by inserting space before anchor text Risolvere il problema Tamil QTBUG-78923 inserendo uno spazio prima del testo di ancoraggio. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Il bug causa la visualizzazione di strani caratteri circolari all'interno delle parole in Tamil evidenziate. Il workaround inserisce un carattere spazio aggiuntivo che sembra risolvere il problema. Depth of side filter directory tree Profondità dell'albero delle directory del filtro laterale Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Fattore di zoom per l'interfaccia utente. Utile se il valore predefinito non è adatto alla risoluzione dello schermo. Display scale (default 1.0): Scala di visualizzazione (predefinita 1.0): Automatic spelling approximation. Approssimazione automatica dell'ortografia. Max spelling distance Distanza massima di ortografia Add common spelling approximations for rare terms. Aggiungi approssimazioni ortografiche comuni per termini rari. Maximum number of history entries in completer list Numero massimo di voci di cronologia nella lista del completamento automatico Number of history entries in completer: Numero di voci nella cronologia nel completamento automatico: Displays the total number of occurences of the term in the index Mostra il numero totale di occorrenze del termine nell'indice. Show hit counts in completer popup. Mostra il conteggio dei risultati nella finestra di completamento automatico. Prefer HTML to plain text for preview. Preferisci l'HTML al testo normale per l'anteprima. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Vedi la documentazione di Qt QDateTimeEdit. Ad esempio, yyyy-MM-dd. Lascia vuoto per utilizzare il formato predefinito di Qt/System. Side filter dates format (change needs restart) Formato delle date del filtro laterale (la modifica richiede il riavvio) If set, starting a new instance on the same index will raise an existing one. Se impostato, avviare una nuova istanza sullo stesso indice solleverà una già esistente. Single application Applicazione singola Set to 0 to disable and speed up startup by avoiding tree computation. Impostare su 0 per disabilitare e velocizzare l'avvio evitando il calcolo dell'albero. The completion only changes the entry when activated. Il completamento cambia l'ingresso solo quando attivato. Completion: no automatic line editing. Completamento: nessuna modifica automatica delle righe. Interface language (needs restart): Lingua dell'interfaccia (necessita riavvio): Note: most translations are incomplete. Leave empty to use the system environment. Nota: la maggior parte delle traduzioni sono incomplete. Lascia vuoto per utilizzare l'ambiente di sistema. Preview Anteprima Set to 0 to disable details/summary feature Imposta su 0 per disabilitare la funzione dettagli/riassunto. Fields display: max field length before using summary: Campi visualizzati: lunghezza massima del campo prima di utilizzare il riepilogo: Number of lines to be shown over a search term found by preview search. Numero di righe da mostrare su un termine di ricerca trovato dalla ricerca anteprima. Search term line offset: Ricerca termine offset della riga: Wild card characters *?[] will processed as punctuation instead of being expanded I caratteri jolly *?[] verranno elaborati come punteggiatura anziché essere espansi. Ignore wild card characters in ALL terms and ANY terms modes Ignora i caratteri jolly in modalità TUTTI i termini e QUALSIASI termine. Color scheme Schema di colori When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Quando si visualizza l'HTML in modalità scura, cerca di utilizzare uno sfondo scuro (e colori chiari).<br>Questo entra in conflitto con molti documenti che sovrascriveranno la nostra impostazione chiara con il proprio colore di primo piano CSS (scuro), risultando in un documento illeggibile, quindi è disattivato per impostazione predefinita. Use dark background when displaying HTML in dark mode. Utilizzare uno sfondo scuro quando si visualizza l'HTML in modalità scura. recoll-1.43.12/qtgui/i18n/recoll_fr.ts0000644000175000017500000077156415124431112016711 0ustar dockesdockes ActSearchDLG Menu search Recherche dans les menus AdvSearch All clauses Toutes les clauses Any clause Une des clauses texts textes spreadsheets feuilles de calcul presentations présentations media multimédia messages messages other autres Bad multiplier suffix in size filter Suffixe multiplicateur incorrect dans un filtre de taille (k/m/g/t) text texte spreadsheet feuille de calcul presentation présentation message message Advanced Search Recherche avancée History Next Historique, suivant History Prev Historique, Precedent Load next stored search Afficher la recherche sauvegardée suivante Load previous stored search Afficher la recherche sauvegardée précédente AdvSearchBase Advanced search Recherche avancée Restrict file types Restreindre les types de fichier Save as default Sauver comme valeur initiale Searched file types Types de fichier recherchés All ----> Tout ----> Sel -----> Sel -----> <----- Sel <----- Sel <----- All <----- Tout Ignored file types Types de fichiers ignorés Enter top directory for search Entrer le répertoire où démarre la recherche Browse Parcourir Restrict results to files in subtree: Restreindre les résultats aux fichiers de l'arborescence : Start Search Lancer la recherche Search for <br>documents<br>satisfying: Rechercher les <br>documents<br>vérifiant : Delete clause Enlever une clause Add clause Ajouter une clause Check this to enable filtering on file types Cocher pour permettre le filtrage des types de fichiers By categories Par catégories Check this to use file categories instead of raw mime types Cocher pour utiliser les catégories de fichiers au lieu des types mimes Close Fermer All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Tous les champs de droite non vides seront combinés par une conjonction ET (choix "Toutes les clauses") ou OU (choix "Une des clauses"). <br> Les champs de type "Un de ces mots", "Tous ces mots" et "Aucun de ces mots" acceptent un mélange de mots et de phrases contenues dans des apostrophes "une phrase".<br>Les champs non renseignés sont ignorés. Invert Inverser Minimum size. You can use k/K,m/M,g/G as multipliers Taille minimum. Vous pouvez utiliser un suffixe multiplicateur : k/K, m/M, g/G Min. Size Taille Min Maximum size. You can use k/K,m/M,g/G as multipliers Taille Maximum. Vous pouvez utiliser un suffixe multiplicateur : k/K, m/M, g/G Max. Size Taille Max Select Sélectionner Filter Filtrer From À partir de To Jusqu'à Check this to enable filtering on dates Cocher pour activer le filtrage sur les dates Filter dates Filtrer sur les dates Find Trouver Check this to enable filtering on sizes Cocher pour activer le filtrage sur taille fichier Filter sizes Filtrer les tailles Filter birth dates Filtrer par date de création ConfIndexW Can't write configuration file Impossible d'écrire le fichier de configuration Global parameters Paramètres globaux Local parameters Paramètres locaux Search parameters Paramètres pour la recherche Top directories Répertoires de départ The list of directories where recursive indexing starts. Default: your home. La liste des répertoires où l'indexation récursive démarre. Défaut: votre répertoire par défaut. Skipped paths Chemins ignorés These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Ce sont les chemins des répertoires où l'indexation n'ira pas.<br>Les éléments peuvent contenir des caractères joker. Les entrés doivent correspondre aux chemins vus par l'indexeur (ex.: si topdirs comprend '/home/me' et que '/home' est en fait un lien vers '/usr/home', un élément correct pour skippedPaths serait '/home/me/tmp*', et non '/usr/home/me/tmp*') Stemming languages Langue pour l'expansion des termes The languages for which stemming expansion<br>dictionaries will be built. Les langages pour lesquels les dictionnaires d'expansion<br>des termes seront construits. Log file name Nom du fichier journal The file where the messages will be written.<br>Use 'stderr' for terminal output Le nom du fichier ou les messages seront ecrits.<br>Utiliser 'stderr' pour le terminal Log verbosity level Niveau de verbosité This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Cette valeur ajuste la quantite de messages emis,<br>depuis uniquement les erreurs jusqu'a beaucoup de donnees de debug. Index flush megabytes interval Intervalle d'écriture de l'index en mégaoctets This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Ajuste la quantité de données lues entre les écritures sur disque.<br>Contrôle l'utilisation de la mémoire. Défaut 10 Mo This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. C'est le pourcentage d'utilisation disque - utilisation totale, et non taille de l'index - où l'indexation s'arrêtera en erreur.<br>La valeur par défaut de 0 désactive ce test. No aspell usage Pas d'utilisation d'aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Désactiver l'utilisation d'aspell pour générer les approximations orthographiques.<br> Utile si aspell n'est pas installé ou ne fonctionne pas. Aspell language Langue pour Aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Langue pour le dictionnaire aspell. La valeur devrait ressembler à 'en' ou 'fr'... <br>Si cette valeur n'est pas positionnée, l'environnement national sera utilisé pour la calculer, ce qui marche bien habituellement. Pour avoir une liste des valeurs possibles sur votre système, entrer 'aspell config' sur une ligne de commande et regarder les fichiers '.dat' dans le répertoire 'data-dir'. Database directory name Répertoire de stockage de l'index The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Le nom d'un répertoire pour stocker l'index<br>Un chemin relatif sera interprété par rapport au répertoire de configuration. La valeur par défaut est 'xapiandb'. Unac exceptions Exceptions Unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Ce sont les exceptions au mécanisme de suppression des accents, qui, par défaut et en fonction de la configuration de l'index, supprime tous les accents et effectue une décomposition canonique Unicode. Vous pouvez inhiber la suppression des accents pour certains caractères, en fonction de votre langue, et préciser d'autres décompositions, par exemple pour des ligatures. Dans la liste séparée par des espaces, le premier caractères d'un élément est la source, le reste est la traduction. Process the WEB history queue Traiter la file des pages WEB Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Permet d'indexer les pages Web visitées avec Firefox <br>(il vous faut également installer l'extension Recoll pour Firefox) Web page store directory name Répertoire de stockage des pages Web The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Le nom d'un répertoire où stocker les copies des pages visitées.<br>Un chemin relatif se réfère au répertoire de configuration. Max. size for the web store (MB) Taille maximale pour le cache Web (Mo) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Les entrées seront recyclées quand la taille sera atteinte.<br>Seule l'augmentation de la taille a un sens parce que réduire la valeur ne tronquera pas un fichier existant (mais gachera de l'espace à la fin). Automatic diacritics sensitivity Sensibilité automatique aux accents <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Activer automatiquement la sensibilité aux accents si le terme recherché contient des accents (saufs pour ceux de unac_except_trans). Sans cette option, il vous faut utiliser le langage de recherche et le drapeau <i>D</i> pour activer la sensibilité aux accents. Automatic character case sensitivity Sensibilité automatique aux majuscules <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Activer automatiquement la sensibilité aux majuscules si le terme de recherche contient des majuscules ailleurs qu'en première lettre. Sans cette option, vous devez utiliser le langage de recherche et le drapeau <i>C</i> pour activer la sensibilité aux majuscules. Maximum term expansion count Taille maximum de l'expansion d'un terme <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Nombre maximum de termes de recherche résultant d'un terme entré (par exemple expansion par caractères jokers). La valeur par défaut de 10000 est raisonnable et évitera les requêtes qui paraissent bloquées pendant que le moteur parcourt l'ensemble de la liste des termes. Maximum Xapian clauses count Compte maximum de clauses Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Nombre maximum de clauses Xapian élémentaires générées pour une requête. Dans certains cas, le résultat de l'expansion des termes peut ere multiplicatif, et utiliserait trop de mémoire. La valeur par défaut de 100000 devrait être à la fois suffisante et compatible avec les configurations matérielles typiques. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... Langues pour lesquelles les dictionnaires d'expansion des racines.<br>Consulter la liste des valeurs possibles dans documentation Xapian (stemmers). Ex: english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Langue du dictionnaire aspell. Les valeurs sont des codes en deux lettres, par exemple 'en', 'fr'...<br>Si cette valeur n'est pas renseignée, l'environnement système sera utilisé pour la déterminer, ce qui marche bien le plus souvent. Pour avoir une idée de ce qui est installé sur votre système, utiliser la commande 'aspell --help' qui affiche entre autres la liste des dictionnaires disponibles. Indexer log file name Nom du fichier journal de l'indexeur If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Si la valeur est vide, la valeur du journal commun est utilisée. Il peut être utile d'avoir un fichier séparé pour l'indexeur parce que le fichier commun est effacé quand<br>l'interface graphique démarre. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Pourcentage d'occupation du disque provoquant l'arrêt de l'indexation<br>Ex: 90% pour arrêter quand le disque est 90% plein. 0 ou 100 signifient pas de limite Web history Historique Web Process the Web history queue Traiter la file d'attente de l'historique Web (by default, aspell suggests mispellings when a query has no results). (par défaut, aspell suggère des erreurs lorsqu'une requête n'a pas de résultats). Page recycle interval Intervalle de recyclage de la page <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. <p>Par défaut, une seule instance d'une URL est conservée dans le cache. Cela peut être modifié en définissant cette valeur à une valeur déterminant à quelle fréquence nous gardons plusieurs instances ('day', 'semaine', 'mois', 'année'). Notez qu'augmenter l'intervalle n'effacera pas les entrées existantes. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Remarque : les anciennes pages seront effacées pour faire de l'espace pour les nouvelles lorsque la taille maximale est atteinte. Taille actuelle : %1 Disk full threshold percentage at which we stop indexing<br>(E.g. 90% to stop at 90% full, 0 or 100 means no limit) Pourcentage d'occupation du disque provoquant l'arrêt de l'indexation<br>(Ex: 90% pour arrêter quand le disque est 90% plein. 0 ou 100 signifient pas de limite) Start folders Répertoires de départ The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Liste des répertoires où l&apos;indexation récursive démarre. Défaut: votre répertoire par défaut. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Pourcentage d'occupation du disque provoquant l'arrêt de l'indexation<br>)Ex: 90% pour arrêter quand le disque est 90% plein. 0 ou 100 signifient pas de limite) Browser add-on download folder Répertoire de téléchargement utilisé par l'extension du navigateur Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Ne changez cette valeur que si vous avez aussi changé la valeur du répertoire de téléchargement dans l'extension.<br>Dans ce cas, utiliser le chemin absolu (ex: /home/[moi]/Téléchargements/monsousdir) Store some GUI parameters locally to the index Enregistrer certains paramètres spécifiquement pour cet index <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index <p>Les paramètres de l'interface sont normalement stockés dans un fichier global. En activant ce paramètre, certaines valeurs, comme par exemple la configuration du tableau de résultats, seront spéficiques de l'index Suspend the real time indexer when running on battery Suspendre l'indexeur en temps réel lorsqu'il fonctionne sur batterie The indexer will wait for a return on AC and reexec itself when it happens Le moteur d'indexation attendra un retour sur AC et se réexécutera lorsque cela se produira. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. La liste des dossiers/répertoires à indexer, de manière récursive avec leurs sous-dossiers. Le caractère '~' se développe en votre répertoire personnel, qui est la valeur initiale par défaut. (by default, aspell suggests mispellings when a query has no results). (par défaut, aspell suggère des erreurs lorsqu'une requête n'a pas de résultats). Database directory Répertoire de stockage de l'index The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Le nom d'un répertoire où stocker l'index<br>Un chemin non absolu est pris par rapport au répertoire de configuration. La valeur par défaut est 'xapiandb'. ConfSubPanelW Only mime types Seulement ces types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Une liste exclusive des types MIME à indexer.<br>Rien d'autre ne sera indexé. Normalement vide et inactif Exclude mime types Types exclus Mime types not to be indexed Types MIME à ne pas indexer Max. compressed file size (KB) Taille maximale pour les fichiers à décomprimer (ko) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Cette valeur définit un seuil au delà duquel les fichiers comprimés ne seront pas traités. Utiliser -1 pour désactiver la limitation, 0 pour ne traiter aucun fichier comprimé. Max. text file size (MB) Taille maximale d'un fichier texte (Mo) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Cette valeur est un seuil au delà duquel les fichiers de texte pur ne seront pas indexés. Spécifier -1 pour supprimer la limite. Utilisé pour éviter d'indexer des fichiers monstres. Text file page size (KB) Taille de page pour les fichiers de texte pur (ko) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Si cette valeur est spécifiée et positive, les fichiers de texte pur seront découpés en tranches de cette taille pour l'indexation. Ceci diminue les ressources consommées par l'indexation et aide le chargement pour prévisualisation. Max. filter exec. time (s) Temps d'exécution maximum pour un filtre (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Un filtre externe qui prend plus de temps sera arrêté. Traite le cas rare (possible avec postscript par exemple) où un document pourrait amener un filtre à boucler sans fin. Mettre -1 pour complètement supprimer la limite. Global Global ConfigSwitchDLG Switch to other configuration Utiliser une autre configuration ConfigSwitchW Choose other Choisir une autre Choose configuration directory Choisir un répertoire de configuration CronToolW Cron Dialog Dialogue Cron <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span>: planification de l'indexation périodique (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Chaque champ peut contenir un joker (*), une simple valeur numérique , des listes ponctuées par des virgules (1,3,5) et des intervalles (1-7). Plus généralement, les champs seront utilisés <span style=" font-style:italic;">tels quels</span> dans le fichier crontab, et la syntaxe générale crontab peut être utilisée, voir la page de manuel crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Par exemple, en entrant <span style=" font-family:'Courier New,courier';">*</span> dans <span style=" font-style:italic;">Jours, </span><span style=" font-family:'Courier New,courier';">12,19</span> dans <span style=" font-style:italic;">Heures</span> et <span style=" font-family:'Courier New,courier';">15</span> dans <span style=" font-style:italic;">Minutes</span>, recollindex démarrerait chaque jour à 12:15 et 19:15</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Un planning avec des activations très fréquentes est probablement moins efficace que l'indexation au fil de l'eau.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Jours de la semaine (* ou 0-7, 0 ou 7 signifie Dimanche) Hours (* or 0-23) Heures (* ou 0-23) Minutes (0-59) Minutes (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cliquer <span style=" font-style:italic;">Désactiver</span> pour arrêter l'indexation automatique périodique, <span style=" font-style:italic;">Activer</span> pour la démarrer, <span style=" font-style:italic;">Annuler</span> pour ne rien changer.</p></body></html> Enable Activer Disable Désactiver It seems that manually edited entries exist for recollindex, cannot edit crontab Il semble que des entrées créées manuellement existent pour recollindex. Impossible d´éditer le fichier Cron Error installing cron entry. Bad syntax in fields ? Erreur durant l'installation de l'entrée cron. Mauvaise syntaxe des champs ? EditDialog Dialog Dialogue EditTrans Source path Chemin source Local path Chemin local Config error Erreur config Original path Chemin Originel Path in index Chemin stocké dans l'index Translated path Chemin modifié EditTransBase Path Translations Traductions de chemins Setting path translations for Ajustement des traductions de chemins pour Select one or several file types, then use the controls in the frame below to change how they are processed Sélectionner un ou plusieurs types de fichiers, puis utiliser les contrôles dans le cadre ci-dessous pour changer leur traitement Add Ajouter Delete Supprimer Cancel Annuler Save Sauvegarder FirstIdxDialog First indexing setup Paramétrage de la première indexation <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Il semble que l'index pour cette configuration n'existe pas encore.</span><br /><br />Si vous voulez simplement indexer votre répertoire avec un jeu raisonnable de valeurs par défaut, cliquer le bouton <span style=" font-style:italic;">Démarrer l'indexation maintenant</span>. Vous pourrez ajuster les détails plus tard. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Si vous voulez plus de contrôle, utilisez les liens qui suivent pour ajuster la configuration et le planning d'indexation.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ces outils peuvent être accédés plus tard à partir du menu <span style=" font-style:italic;">Preferences</span>.</p></body></html> Indexing configuration Indexation This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Vous pourrez ajuster les répertoires que vous voulez indexer, et d'autres paramètres comme les schémas de noms ou chemins de fichiers exclus, les jeux de caractères par défaut, etc. Indexing schedule Planning de l'indexation This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Vous pourrez choisir entre l'indexation à intervalles fixes ou au fil de l'eau, et définir un planning pour la première (basé sur l'utilitaire cron). Start indexing now Démarrer l'indexation maintenant FragButs %1 not found. %1 non trouvé %1: %2 %1 : %2 Fragment Buttons Boutons de fragment Query Fragments Fragments de recherche IdxSchedW Index scheduling setup Paramétrage du planning d'indexation <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'indexation <span style=" font-weight:600;">Recoll</span> peut fonctionner en permanence, traitant les fichiers dès qu'ils sont modifiés, ou être exécutée à des moments prédéterminés. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Une lecture du manuel peut vous aider à choisir entre ces approches (presser F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cet outil peut vous aider à planifier l'indexation périodique, ou configurer un démarrage automatique de l'indexation au fil de l'eau quand vous vous connectez (ou les deux, ce qui est rarement pertinent). </p></body></html> Cron scheduling Planning Cron The tool will let you decide at what time indexing should run and will install a crontab entry. Le dialogue vous permettra de déterminer à quelle heure l'indexation devra démarrer et installera une entrée crontab. Real time indexing start up Démarrage de l'indexation au fil de l'eau Decide if real time indexing will be started when you log in (only for the default index). Déterminer si l'indexation au fil de l'eau démarre quand vous vous connectez (pour l'index par défaut). ListDialog Dialog Dialogue GroupBox GroupBox Main No db directory in configuration Répertoire de la base de données non défini dans la configuration Could not open database in Impossible d'ouvrir la base de données dans . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Cliquez sur Annuler si vous voulez modifier le fichier de configuration avant le début de l'indexation, ou sur Ok pour le laisser continuer. Configuration problem (dynconf Problème de configuration (dynconf "history" file is damaged or un(read)writeable, please check or remove it: Le fichier d'historique est illisible, le verifier ou l'effacer : "history" file is damaged, please check or remove it: Le fichier "history" est corrompu. Le detruire : Needs "Show system tray icon" to be set in preferences! Nécessite la préférence "Afficher l'icone dans la barre d'état système¨! PTransEdit Path in index Chemin stocké dans l'index Translated path Chemin modifié Config error Erreur config Original path Chemin Originel Local path Chemin local PTransEditBase Path Translations Traductions de chemins Select one or several file types, then use the controls in the frame below to change how they are processed Sélectionnez un ou plusieurs types de fichiers, puis utilisez les contrôles dans le cadre ci-dessous pour modifier la façon dont ils sont traités. Add Ajouter Delete Supprimer Cancel Annuler Save Sauvegarder Preview &Search for: &Rechercher : &Next &Suivant &Previous &Précédent Match &Case Respecter la &casse Clear Effacer Creating preview text Création du texte pour la prévisualisation Loading preview text into editor Chargement du texte de la prévisualisation Cannot create temporary directory Impossible de créer le répertoire temporaire Cancel Annuler Close Tab Fermer l'onglet Missing helper program: Programmes filtres externes manquants : Can't turn doc into internal representation for Impossible de traduire le document en représentation interne pour Cannot create temporary directory: Impossible de créer le répertoire temporaire: Error while loading file Erreur de chargement du fichier Form Ecran Tab 1 Tab 1 Open Ouvrir Canceled Annulé Error loading the document: file missing. Erreur de chargement : fichier manquant. Error loading the document: no permission. Erreur de chargement : accès refusé. Error loading: backend not configured. Erreur de chargement : gestionnaire de stockage non configuré. Error loading the document: other handler error<br>Maybe the application is locking the file ? Erreur de chargement : erreur indéterminée<br>Fichier verrouillé par l'application ? Error loading the document: other handler error. Erreur de chargement : erreur indéterminée. <br>Attempting to display from stored text. <br>Essai d'affichage à partir du texte stocké. Could not fetch stored text Impossible de récupérer le texte stocké Previous result document Prévisualisation du résultat Next result document Résultat suivant Preview Window Fenêtre d'aperçu Close Window Fermer la fenêtre Next doc in tab Résultat suivant Previous doc in tab Résultat précédent Close tab Fermer l'onglet Print tab Imprimer l'onglet Close preview window Fermer la fenêtre Show next result Afficher le résultat suivant Show previous result Afficher le résultat précédent Print Imprimer PreviewTextEdit Show fields Afficher les valeurs des champs Show main text Afficher le corps du texte Print Imprimer Print Current Preview Imprimer la fenêtre de prévisualisation Show image Afficher l'image Select All Tout sélectionner Copy Copier Save document to file Sauvegarder le document Fold lines Replier les lignes Preserve indentation Préserver l'indentation Open document Ouvrir le document Reload as Plain Text Afficher comme du texte pur Reload as HTML Afficher comme du HTML QObject Global parameters Paramètres globaux Local parameters Paramètres locaux <b>Customised subtrees <b>Répertoires avec paramètres spécifiques The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. La liste des sous-répertoires de la zone indexée<br>où certains paramètres sont redéfinis. Défaut : vide. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Les paramètres qui suivent sont définis soit globalement, si la sélection dans la liste ci-dessus est vide ou réduite à la ligne vide, soit pour le répertoire sélectionné. Vous pouvez ajouter et enlever des répertoires en cliquant les boutons +/-. Skipped names Noms ignorés These are patterns for file or directory names which should not be indexed. Canevas définissant les fichiers ou répertoires qui ne doivent pas etre indexés. Default character set Jeu de caractères par défaut This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Il s'agit du jeu de caractères utilisé pour lire des fichiers qui n'identifient pas le jeu de caractères en interne, par exemple des fichiers texte purs.<br>La valeur par défaut est vide, et la valeur du NLS environnement est utilisée. Follow symbolic links Suivre les liens symboliques Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Indexer les fichiers et répertoires pointés par les liens symboliques. Pas fait par défaut pour éviter les indexations multiples Index all file names Indexer tous les noms de fichiers Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indexer les noms des fichiers dont le contenu n'est pas identifié ou traité (pas de type mime, ou type non supporté). Vrai par défaut Beagle web history Historique du web Beagle Search parameters Paramètres pour la recherche Web history Historique Web Default<br>character set Jeu de caractères<br>par défaut Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Jeu de caractères utilisé pour lire les fichiers qui n'identifient pas de manière interne leur encodage, par exemple les fichiers texte purs.<br>La valeur par défaut est vide, et la valeur obtenue à partir de l'environnement est utilisée dans ce cas. Ignored endings Suffixes ignorés These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Suffixes sélectionnant des fichiers qui seront indexés uniquement sur leur nom (pas d' identification de type MIME, pas de décompression, pas d' indexation du contenu. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Suffixes sélectionnant des fichiers qui seront indexés uniquement sur leur nom (pas d'identification de type MIME, pas de décompression, pas d'indexation du contenu). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>Les paramètres qui suivent sont définis soit globalement, si la sélection dans la liste ci-dessus est vide ou réduite à la ligne vide, soit pour le répertoire sélectionné. Vous pouvez ajouter et enlever des répertoires en cliquant les boutons +/-. These are patterns for file or directory names which should not be indexed. Canevas définissant les fichiers ou répertoires qui ne doivent pas etre indexés. QWidget Create or choose save directory Créer ou choisir un répertoire d'écriture Choose exactly one directory Choisir exactement un répertoire Could not read directory: Impossible de lire le répertoire : Unexpected file name collision, cancelling. Collision de noms inattendue, abandon. Cannot extract document: Impossible d'extraire le document : &Preview &Voir contenu &Open &Ouvrir Open With Ouvrir Avec Run Script Exécuter le Script Copy &File Name Copier le nom de &Fichier Copy &URL Copier l'&Url &Write to File &Sauver sous Save selection to files Sauvegarder la sélection courante dans des fichiers Preview P&arent document/folder Prévisualiser le document p&arent &Open Parent document/folder &Ouvrir le document/dossier parent Find &similar documents Chercher des documents &similaires Open &Snippets window Ouvrir la fenêtre des e&xtraits Show subdocuments / attachments Afficher les sous-documents et attachements &Open Parent document &Ouvrir le document parent &Open Parent Folder Ouvrir le dossier parent Copy Text Copier le texte Copy &File Path Copier le chemin du fichier Copy File Name Copier le nom du fichier QxtConfirmationMessage Do not show again. Ne plus afficher. RTIToolW Real time indexing automatic start Démarrage automatique de l'indexation au fil de l'eau <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'indexation <span style=" font-weight:600;">Recoll</span> peut être configurer pour s'exécuter en arrière plan, mettant à jour l'index au fur et à mesure que des documents sont modifiés. Vous y gagnez un index toujours à jour, mais des ressources systême (mémoire et processeur) sont consommées en permanence.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Démarrer le démon d'indexation quand je me connecte. Also start indexing daemon right now. Également démarrer le démon maintenant. Replacing: Remplacement de : Replacing file Remplacement du fichier Can't create: Impossible de créer : Warning Attention Could not execute recollindex Impossible d'exécuter recollindex Deleting: Effacement : Deleting file Effacement du fichier Removing autostart Enlèvement de l'autostart Autostart file deleted. Kill current process too ? Fichier autostart détruit. Arrêter le process en cours ? Configuration name Nom de la configuration Short alphanumeric nickname for this config Court surnom alphanumérique pour cette configuration Could not find Impossible de trouver RclCompleterModel Hits Résultats Hits Résultats RclMain About Recoll À propos de Recoll Executing: [ Exécution de : [ Cannot retrieve document info from database Impossible d'accéder au document dans la base Warning Attention Can't create preview window Impossible de créer la fenêtre de visualisation Query results Résultats de la recherche Document history Historique des documents consultés History data Données d'historique Indexing in progress: Indexation en cours : Files Fichiers Purge Nettoyage Stemdb Base radicaux Closing Fermeture Unknown Inconnue This search is not active any more Cette recherche n'est plus active Can't start query: Peut't démarrer la requête : Bad viewer command line for %1: [%2] Please check the mimeconf file Mauvaise ligne de commande du visualiseur pour %1: [%2] Veuillez vérifier le fichier mimeconf Cannot extract document or create temporary file Impossible d'extraire le document ou de créer le fichier temporaire (no stemming) (pas d'expansion) (all languages) (tous les langages) error retrieving stemming languages impossible de trouver la liste des langages d'expansion Update &Index Mettre à jour l'&index Indexing interrupted Indexation interrompue Stop &Indexing Arrêter l'&Indexation All Tout media multimédia message message other autres presentation présentation spreadsheet feuille de calcul text texte sorted trié filtered filtré External applications/commands needed and not found for indexing your file types: Applications/commandes externes nécessaires et non trouvées pour l'indexation de vos types de fichiers : No helpers found missing Pas d'applications manquantes Missing helper programs Applications manquantes Save file dialog Boîte de dialogue de sauvegarde des fichiers Choose a file name to save under Choisissez un nom de fichier sous lequel enregistrer Document category filter Filtre de catégorie de document No external viewer configured for mime type [ Pas de visualiseur configuré pour le type MIME [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Le visualiseur spécifié dans mimeview pour %1 : %2 est introuvable. Voulez vous démarrer le dialogue de préférences ? Can't access file: Impossible d'accéder au fichier : Can't uncompress file: Impossible de décomprimer le fichier : Save file Sauvegarder le fichier Result count (est.) Nombre de résultats (estimation) Query details Détail de la recherche Could not open external index. Db not open. Check external index list. Impossible d'ouvrir un index externe. Base non ouverte. Verifier la liste des index externes. No results found Aucun résultat trouvé None Rien Updating Mise à jour Done Fini Monitor Moniteur Indexing failed L'indexation a échoué The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Le processus d'indexation en cours n'a pas été démarré depuis cette interface. Cliquer OK pour le tuer quand même, ou Annuler pour le laisser tranquille. Erasing index Effacement de l'index Reset the index and start from scratch ? Effacer l'index et redémarrer de zéro ? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Requête en cours.<br>En raison de restrictions internes, <br>annuler terminera l'exécution du programme Error Erreur Index not open Index pas ouvert Index query error Erreur de la recherche sur l'index Indexed Mime Types Types Mime indexés Content has been indexed for these MIME types: Du contenu a été indexé pour ces types MIME : Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. L'index n'est pas à jour pour ce fichier. Refuser pour risquer d'afficher la mauvaise entrée. Cliquez sur OK pour mettre à jour l'index de ce fichier, puis ré-exécuter la requête lorsque l'indexation est terminée. Sinon, Annuler. Can't update index: indexer running Impossible de mettre à jour l'index : un indexeur est déjà actif Indexed MIME Types Types MIME indexés Bad viewer command line for %1: [%2] Please check the mimeview file Ligne de commande incorrecte pour %1 : [%2]. Vérifier le fichier mimeview. Viewer command line for %1 specifies both file and parent file value: unsupported La ligne de commande pour %1 spécifie à la fois le fichier et son parent : non supporté Cannot find parent document Impossible de trouver le document parent Indexing did not run yet L'indexation n'a pas encore eu lieu External applications/commands needed for your file types and not found, as stored by the last indexing pass in Applications et commandes externes nécessaires pour vos types de documents, et non trouvées, telles qu'enregistrées par la dernière séquence d'indexation dans. Index not up to date for this file. Refusing to risk showing the wrong entry. L'index n'est pas à jour pour ce fichier. Refuser pour risquer d'afficher la mauvaise entrée. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Cliquez sur OK pour mettre à jour l'index de ce fichier, puis ré-exécuter la requête lorsque l'indexation est terminée. Sinon, Annuler. Indexer running so things should improve when it's done Indexer en cours d'exécution donc les choses devraient s'améliorer quand cela's est fait Sub-documents and attachments Sous-documents et attachements Document filter Filtre de documents Index not up to date for this file. Refusing to risk showing the wrong entry. Index pas à jour pour ce fichier. Je ne veux pas risquer d'afficher la mauvaise entrée. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Cliquer OK pour mettre à jour l'index pour ce fichier, puis attendez la fin de l'indexation pour relancer la recherche. The indexer is running so things should improve when it's done. L'indexeur est actif, les choses devraient aller mieux quand il aura fini. The document belongs to an external indexwhich I can't update. Le document appartient à un index externe que je peux't mettre à jour. Click Cancel to return to the list. Click Ignore to show the preview anyway. Cliquez sur Annuler pour retourner à la liste. Cliquez sur Ignorer pour afficher l'aperçu quand même. Duplicate documents Documents identiques These Urls ( | ipath) share the same content: Ces URLs(| ipath) partagent le même contenu : Bad desktop app spec for %1: [%2] Please check the desktop file Mauvaise spécification d'application pour %1 : [%2] Merci de vérifier le fichier desktop Bad paths Chemins inexistants Bad paths in configuration file: Chemins inexistants définis dans le fichier de configuration : Selection patterns need topdir Les schémas de sélection nécessitent un répertoire de départ Selection patterns can only be used with a start directory Les schémas de sélection ne peuvent être utilisés qu'avec un répertoire de départ No search Pas de recherche No preserved previous search Pas de recherche sauvegardée Choose file to save Choisir un fichier pour sauvegarder Saved Queries (*.rclq) Recherches Sauvegardées (*.rclq) Write failed Échec d'écriture Could not write to file Impossible d'écrire dans le fichier Read failed Erreur de lecture Could not open file: Impossible d'ouvrir le fichier : Load error Erreur de chargement Could not load saved query Le chargement de la recherche sauvegardée a échoué Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Ouverture d'un fichier temporaire. Les modification seront perdues<br/>si vous ne les sauvez pas dans un emplacement permanent. Do not show this warning next time (use GUI preferences to restore). Ne plus afficher ce message (utiliser le dialogue de préférences pour rétablir). Disabled because the real time indexer was not compiled in. Désactivé parce que l'indexeur au fil de l'eau n'est pas disponible dans cet exécutable. This configuration tool only works for the main index. Cet outil de configuration ne travaille que sur l'index principal. The current indexing process was not started from this interface, can't kill it Le processus d'indexation en cours n'a pas été démarré depuis cette interface, impossible de l'arrêter The document belongs to an external index which I can't update. Le document appartient à un index externe que je ne peux pas mettre à jour. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Cliquer Annulation pour retourner à la liste.<br>Cliquer Ignorer pour afficher la prévisualisation de toutes facons (mémoriser l'option pour la session). Index scheduling Programmation de l'indexation Sorry, not available under Windows for now, use the File menu entries to update the index Désolé, pas disponible pour Windows pour le moment, utiliser les entrées du menu fichier pour mettre à jour l'index Can't set synonyms file (parse error?) Impossible d'ouvrir le fichier des synonymes (erreur dans le fichier?) Index locked L'index est verrouillé Unknown indexer state. Can't access webcache file. État de l'indexeur inconnu. Impossible d'accéder au fichier webcache. Indexer is running. Can't access webcache file. L'indexeur est actif. Impossible d'accéder au fichier webcache. with additional message: avec le message complémentaire : Non-fatal indexing message: Erreur d'indexation non fatale : Types list empty: maybe wait for indexing to progress? Liste vide : attendre que l'indexation progresse ? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported La ligne de commande pour %1 specifie l'utilisation du fichier parent, mais l'URL est http[s] : ne peut pas marcher Tools Outils Results Résultats (%d documents/%d files/%d errors/%d total files) (%d documents/%d fichiers/%d erreurs/%d fichiers en tout) (%d documents/%d files/%d errors) (%d documents/%d fichiers/%d erreurs) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Chemins vides ou non existants dans le fichier de configuration. Cliquer sur Ok pour démarrer l'indexation (les données absentes ne seront pas éliminées de l'index) : Indexing done Indexation terminée Can't update index: internal error Impossible de mettre à jour l'index : erreur interne Index not up to date for this file.<br> L'index n'est pas à jour pour ce fichier.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Par ailleurs, il semble que la dernière mise à jour pour ce fichier a échoué.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Cliquer Ok pour essayer de mettre à jour l'index. Vous devrez lancer la recherche à nouveau quand l'indexation sera terminée.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Cliquer Annuler pour retourner à la liste.<br>Cliquer Ignorer pour afficher la prévisualisation (et enregister l'option pour cette session). Il y a un risque d'afficher le mauvais document.<br/> documents documents document document files fichiers file fichier errors erreurs error erreur total files) fichiers totaux) No information: initial indexing not yet performed. Pas de données : l'indexation initiale n'est pas faite. Batch scheduling Programmation du traitement par lots The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Utilisez cet outil pour déterminer à quelle heure l'indexation doit s'exécuter. Il est basé sur l'outile de programmation de tâches Windows. Confirm Confirmer Erasing simple and advanced search history lists, please click Ok to confirm Effacement des historique de recherche, cliquer Ok pour confirmer Could not open/create file Impossible d'ouvrir ou créer le fichier F&ilter F&iltre Could not start recollindex (temp file error) Impossible de démarrer l'indexeur (erreur de fichier temporaire) Could not read: Impossible de lire: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Ceci remplacera le contenu courant le la préférence "en-tete de liste de résultats" et le nom du fichier qss. Continuer ? You will need to run a query to complete the display change. Exécutez une recherche pour compléter le changement d'affichage. Simple search type Type de recherche simple Any term Certains termes All terms Tous les termes File name Nom de fichier Query language Language d'interrogation Stemming language Langue pour l'expansion des termes Main Window Fenêtre principale Focus to Search Retourner à la zone du texte de recherche Focus to Search, alt. Retourner à la zone du texte de recherche, alt. Clear Search Effacer la recherche Focus to Result Table Activer la table Clear search Effacer la recherche Move keyboard focus to search entry Cibler l'entrée clavier sur la zone de recherche Move keyboard focus to search, alt. Cibler l'entrée clavier vers la zone de recherche, autre. Toggle tabular display Basculer l'affichage en mode table Move keyboard focus to table Cibler l'entrée clavier vers la table Flushing Écriture de l'index Show menu search dialog Afficher le dialogue de recherche dans les menus Duplicates Doublons Filter directories Filtrer par répertoire Main index open error: Erreur d'ouverture de l'index principal: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. L'index est peut-être corrompu. Essayer d'exécuter xapian-check, ou reconstruire l'index. This search is not active anymore Cette recherche n'est plus active Viewer command line for %1 specifies parent file but URL is not file:// : unsupported La ligne de commande pour %1 specifie l'utilisation du fichier parent, mais l'URL n'est pas file:// : ne peut pas marcher The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? L'application spécifiée dans le fichier mimeview pour %1: %2 n'est pas trouvée. Voulez vous afficher le dialogue de préférences ? Show advanced search dialog Afficher la boîte de dialogue de recherche avancée with additional message: avec un message additionnel: RclMainBase Previous page Page précédente Next page Page suivante &File &Fichier E&xit &Quitter &Tools &Outils &Help &Aide &Preferences &Préférences Search tools Outils de recherche Result list Liste de résultats &About Recoll &A propos de Recoll Document &History &Historique des documents Document History Historique des documents &Advanced Search Recherche &Avancée Advanced/complex Search Recherche Avancée &Sort parameters Paramètres pour le &tri Sort parameters Paramètres pour le tri Next page of results Page suivante Previous page of results Page précédente &Query configuration Configuration des &requêtes &User manual &Manuel Recoll Recoll Ctrl+Q Ctrl+Q Update &index &Indexer Term &explorer &Exploration de l'index Term explorer tool Outil d'exploration de l'index External index dialog Index externes &Erase document history &Effacer l'historique des documents First page Première page Go to first page of results Aller à la première page de résultats &Indexing configuration &Indexation All Tout &Show missing helpers &Afficher les aides manquantes PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Maj+Accueil, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen &Plein écran F11 F11 Full Screen Plein écran &Erase search history &Effacer l'historique des recherches sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Trier par date des plus anciennes aux plus récentes sortByDateDesc trier par description de la date Sort by dates from newest to oldest Trier par date des plus récentes aux plus anciennes Show Query Details Afficher la requête en détails Show results as table Afficher les résultats sous forme de tableau &Rebuild index &Reconstruire l'index &Show indexed types &Afficher les types indexés Shift+PgUp Shift+PgUp &Indexing schedule &Planning de l'indexation E&xternal index dialog Index e&xternes &Index configuration &Index &GUI configuration Interface utilisateur &Results &Résultats Sort by date, oldest first Trier par date, le plus ancien en premier Sort by date, newest first Trier par date, le plus récent en premier Show as table Afficher comme un tableau Show results in a spreadsheet-like table Montrer les résultats dans un tableau Save as CSV (spreadsheet) file Sauver en format CSV (fichier tableur) Saves the result into a file which you can load in a spreadsheet Sauvegarde les résultats dans un fichier qu'il sera possible de charger dans un tableur Next Page Page suivante Previous Page Page précédente First Page Première page Query Fragments Fragments de recherche With failed files retrying Avec re-traitement des fichiers en échec Next update will retry previously failed files La prochaine mise à jour de l'index essaiera de traiter les fichiers actuellement en échec Save last query Sauvegarder la dernière recherche Load saved query Charger une recherche sauvegardée Special Indexing Indexation spéciale Indexing with special options Indexation avec des options spéciales Indexing &schedule Programme d'indexation Enable synonyms Activer les synonymes &View &Voir Missing &helpers &Traducteurs manquants Indexed &MIME types Types &MIME indexés Index &statistics &Statistiques de l'index Webcache Editor Editeur &Webcache Trigger incremental pass Déclencher une indexation incrémentale E&xport simple search history E&xporter l'historique de recherches simples Use default dark mode Utiliser le mode sombre standard Dark mode Mode sombre &Query R&echerche Increase results text font size Augmenter la taille de la police de texte des résultats Increase Font Size Augmenter la taille de police Decrease results text font size Diminuer la taille de la police de texte des résultats Decrease Font Size Réduire la taille de police Start real time indexer Démarrage de l'indexation au fil de l'eau Query Language Filters Filtres de recherche (mode language) Filter dates Filtrer sur les dates Assisted complex search Recherche complexe assistée Filter birth dates Filtrer par date de création Switch Configuration... Changer de configuration... Choose another configuration to run on, replacing this process Choisir une autre configuration (démarre une nouvelle instance remplacant celle-ci) &User manual (local, one HTML page) Manuel utilisateur (local, une seule page HTML) &Online manual (Recoll Web site) Manuel en ligne (site WEB Recoll) Path translations Traduction des chemins With failed files retrying Avec retraitement des fichiers en échec RclTrayIcon Restore Restaurer Quit Quitter RecollModel Abstract Extrait Author Auteur Document size Taille document Document date Date document File size Taille fichier File name Nom de fichier File date Date fichier Ipath Ipath Keywords Mots clef Mime type Type Mime Original character set Jeu de caractères d'origine Relevancy rating Pertinence Title Titre URL URL Mtime Mtime Date Date Date and time Date et heure MIME type Type MIME Can't sort by inverse relevance Impossible de trier par pertinence inverse ResList Result list Liste de résultats Unavailable document Document inaccessible Previous Précédent Next Suivant <p><b>No results found</b><br> <p><b>Aucun résultat</b><br> &Preview &Voir contenu Copy &URL Copier l'&Url Find &similar documents Chercher des documents &similaires Query details Détail de la recherche (show query) (requête) Copy &File Name Copier le nom de &Fichier filtered filtré sorted trié Document history Historique des documents consultés Preview Prévisualisation Open Ouvrir <p><i>Alternate spellings (accents suppressed): </i> <p><i>Orthographes proposés (sans accents) : </i> &Write to File &Sauver sous Preview P&arent document/folder Prévisualiser le document p&arent &Open Parent document/folder &Ouvrir le document/dossier parent &Open &Ouvrir Documents Documents out of at least parmi au moins for pour <p><i>Alternate spellings: </i> <p><i>Orthographes proposés : </i> Open &Snippets window Ouvrir la fenêtre des e&xtraits Duplicate documents Documents identiques These Urls ( | ipath) share the same content: Ces URLs(| ipath) partagent le même contenu : Result count (est.) Nombre de résultats (est.) Snippets Extraits This spelling guess was added to the search: Approximation orthographique ajoutée à la recherche: These spelling guesses were added to the search: Approximations orthographiques ajoutées à la recherche: ResTable &Reset sort &Revenir au tri par pertinence &Delete column &Enlever la colonne Add " Ajouter " " column " colonne Save table to CSV file Sauvegarder dans un fichier CSV Can't open/create file: Impossible d'ouvrir ou créer le fichier : &Preview &Voir contenu &Open &Ouvrir Copy &File Name Copier le nom de &Fichier Copy &URL Copier l'&Url &Write to File &Sauver sous Find &similar documents Chercher des documents &similaires Preview P&arent document/folder Prévisualiser le document p&arent &Open Parent document/folder &Ouvrir le document/dossier parent &Save as CSV &Sauvegarder en CSV Add "%1" column Ajouter une colonne "%1" Result Table Tableau de résultats Open Ouvrir Open and Quit Ouvrir et quitter Preview Prévisualisation Show Snippets Afficher les extraits Open current result document Ouvrir le document résultat courant Open current result and quit Ouvrir le document résultat courant puis quitter le programme Show snippets Afficher les extraits Show header Afficher l'en tête de table Show vertical header Afficher les en-têtes de ligne Copy current result text to clipboard Copier le texte du résultat courant vers le presse-papier Use Shift+click to display the text instead. Utilisez Maj+clic pour afficher le texte à la place. %1 bytes copied to clipboard %1 octets copiés vers le presse-papiers Copy result text and quit Copier le texte du résultat et quitter le programme ResTableDetailArea &Preview &Voir contenu &Open &Ouvrir Copy &File Name Copier le nom de &Fichier Copy &URL Copier l'&Url &Write to File &Sauver sous Find &similar documents Chercher des documents &similaires Preview P&arent document/folder Prévisualiser le document p&arent &Open Parent document/folder &Ouvrir le document/dossier parent ResultPopup &Preview &Voir contenu &Open &Ouvrir Copy &File Name Copier le nom de &Fichier Copy &URL Copier l'&Url &Write to File &Sauver sous Save selection to files Sauvegarder la sélection courante dans des fichiers Preview P&arent document/folder Prévisualiser le document p&arent &Open Parent document/folder &Ouvrir le document/dossier parent Find &similar documents Chercher des documents &similaires Open &Snippets window Ouvrir la fenêtre des e&xtraits Show subdocuments / attachments Afficher les sous-documents et attachements Open With Ouvrir Avec Run Script Exécuter le Script SSearch Any term Certains termes All terms Tous les termes File name Nom de fichier Completions Complètement Select an item: Sélectionnez un élément: Too many completions Trop de complétions Query language Language d'interrogation Bad query string Requête non reconnue Out of memory Plus de mémoire disponible Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Entrer une expression du langage de recherche. Antisèche :<br> <i>term1 term2</i> : 'term1' ET 'term2' champ non spécifié.<br> <i>field:term1</i> : 'term1' recherche dans le champ 'field'.<br> Noms de champs standards (utiliser les mots anglais)/alias:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-champs: dir, mime/format, type/rclcat, date.<br> Examples d'intervalles de dates: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> NE PAS mettre les parenthèses.<br> <i>"term1 term2"</i> : phrase exacte. Options::<br> <i>"term1 term2"p</i> : proximité (pas d'ordre).<br> Utiliser le lien <b>Afficher la requête en détail</b> en cas de doute sur les résultats et consulter le manuel (en anglais) (&lt;F1>) pour plus de détails. Enter file name wildcard expression. Entrer un nom de fichier (caractères jokers possibles) Enter search terms here. Type ESC SPC for completions of current term. Entrer les termes recherchés ici. Taper ESC SPC pour afficher les mots commençant par l'entrée en cours. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Entrer une expression du langage de recherche. Antisèche :<br> <i>term1 term2</i> : 'term1' ET 'term2' champ non spécifié.<br> <i>field:term1</i> : 'term1' recherche dans le champ 'field'.<br> Noms de champs standards (utiliser les mots anglais)/alias:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-champs: dir, mime/format, type/rclcat, date.<br> Examples d'intervalles de dates: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> NE PAS mettre les parenthèses.<br> <i>"term1 term2"</i> : phrase exacte. Options::<br> <i>"term1 term2"p</i> : proximité (pas d'ordre).<br> Utiliser le lien <b>Afficher la requête en détail</b> en cas de doute sur les résultats et consulter le manuel (en anglais) (&lt;F1>) pour plus de détails. Stemming languages for stored query: Les langages d'expansion pour la recherche sauvegardée : differ from current preferences (kept) diffèrent des préférences en cours (conservées) Auto suffixes for stored query: L'option de suffixe automatique pour la recherche sauvegardée : External indexes for stored query: Les index externes pour la recherche sauvegardée : Autophrase is set but it was unset for stored query L'option autophrase est positionnée, mais ne l'était pas pour la recherche sauvegardée Autophrase is unset but it was set for stored query L'option autophrase est désactivée mais était active pour la recherche sauvegardée Enter search terms here. Entrer les termes recherchés ici. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border: 1px solid black; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Langue de requête feuille de triche. En doute : cliquez sur <b>Afficher la requête</b>.&nbsp; You should really look at the manual (F1)</p> Vous devriez vraiment consulter le manuel (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Quoi</th><th>Exemples</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Boolean complexe. OR a priorité, utilisez des parenthèses&nbsp; where needed</td><td>(one AND two) OR three</td></tr> si nécessaire</td><td>(un AND deux) OR trois</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Noms de champs</td><td>titre/sujet/légende&nbsp;&nbsp;auteur/de<br>destinataire/à&nbsp;&nbsp;nom de fichier&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Filtre du chemin du répertoire</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Filtre de type MIME</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Intervalle de date</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Taille</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Impossible d'ouvrir l'index Could not restore external indexes for stored query:<br> Impossible de restaurer les index externes utilisés pour la requête d'origine:<br> ??? ??? Using current preferences. Utilisation des préférences actuelles. Simple search Type de recherche simple History Historique <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <p>Langue de requête feuille de triche. En doute : cliquez sur <b>Afficher la requête en détails</b>.&nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Capitaliser pour une recherche littérale</td><td>Floor</td></tr> differ from current preferences (kept) sont différents des préférences (ignoré) SSearchBase SSearchBase SSearchBase Clear Effacer Ctrl+S Ctrl+S Erase search entry Effacer l'entrée Search Rechercher Start query Démarrer la recherche Enter search terms here. Type ESC SPC for completions of current term. Entrer les termes recherchés ici. Taper ESC SPC pour afficher les mots commençant par l'entrée en cours. Choose search type. Choisir le type de recherche. Show query history Afficher l'historique des recherches Enter search terms here. Entrer les termes recherchés ici. Main menu Menu principal SearchClauseW SearchClauseW Recherche dans ClauseW Any of these Tous ces éléments All of these Tous ces éléments None of these Aucun de ces éléments This phrase Cette phrase Terms in proximity Termes à proximité File name matching Nom du fichier correspondant Select the type of query that will be performed with the words Sélectionner le type de requête à effectuer avec les mots Number of additional words that may be interspersed with the chosen ones Nombre de mots additionnels qui peuvent se trouver entre les termes recherchés In field Dans le champ No field Sans champ Any Certains All Tout None Rien Phrase Phrase Proximity Proximité File name Nom de fichier Snippets Snippets Extraits X X Find: Trouver : Next Suivant Prev Précédent SnippetsW Search Rechercher <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Désolé, aucun résultat trouvé dans les limites de recherche. Peut-être que le document est très gros et que le générateur d'extraits s'est perdu...<p> Sort By Relevance Trier Par Pertinence Sort By Page Trier Par Page Snippets Window Fenêtre des extraits Find Trouver Find (alt) Trouver (alt) Find Next Trouver le suivant Find Previous Trouver le précédent Hide Fermer Find next Trouver le suivant Find previous Trouver le précédent Close window Fermer la fenêtre Increase font size Augmenter la taille des caractères Decrease font size Diminuer la taille des caractères SortForm Date Date Mime type Type Mime SortFormBase Sort Criteria Critères de tri Sort the Trier le most relevant results by: résultats les plus pertinents par: Descending Descendant Close Fermer Apply Appliquer SpecIdxW Special Indexing Indexation spéciale Do not retry previously failed files. Ne pas réessayer les fichiers en erreur. Else only modified or failed files will be processed. Sinon, seulement les fichiers modifiés ou en erreur seront traités. Erase selected files data before indexing. Effacer les données pour les fichiers sélectionnés avant de réindexer. Directory to recursively index Répertoire d'index récursif Browse Parcourir Start directory (else use regular topdirs): Répertoire de départ (sinon utiliser la variable normale topdirs) : Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Laisser vide pour sélectionner tous les fichiers. Vous pouvez utiliser plusieurs schémas séparés par des espaces.<br>Les schémas contenant des espaces doivent ere enclos dans des apostrophes doubles.<br>Ne peut être utilisé que si le répertoire de départ est positionné. Selection patterns: Schémas de sélection : Top indexed entity Objet indexé de démarrage Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Répertoire à indexer récursivement. Il doit être à l'intérieur de la zone normale<br>définie par la variable topdirs. Retry previously failed files. Ne pas réessayer les fichiers en erreur. Start directory. Must be part of the indexed tree. We use topdirs if empty. Répertoire de départ. Doit faire partie de la zone indexée. topdirs est utilisé si non renseigné. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Répertoire de départ. Doit faire partie de la zone indexée. Traite toute la zone si non renseigné. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Fichier de sortie de diagnostics. Il sera tronqué et recevra des diagnostics d'indexation (raisons pour lesquelles les fichiers ne sont pas indexés). Diagnostics file Fichier de diagnostics SpellBase Term Explorer Explorateur d'index &Expand &Dérivés Alt+E Alt+D &Close &Fermer Alt+C Alt+F Term Terme No db info. Pas d'information sur la base. Doc. / Tot. Doc. / Tot. Match Faire correspondre Case Majuscules/Minuscules Accents Accents SpellW Wildcards Jokers Regexp Expression régulière Spelling/Phonetic Orthographe/Phonétique Aspell init failed. Aspell not installed? Erreur d'initialisation aspell. Il n'est peut-être pas installé? Aspell expansion error. Erreur aspell. Stem expansion Expansion grammaticale error retrieving stemming languages Impossible de former la liste des langages d'expansion No expansion found Pas de résultats Term Terme Doc. / Tot. Doc. / Tot. Index: %1 documents, average length %2 terms Index: %1 documents, longueur moyenne %2 termes Index: %1 documents, average length %2 terms.%3 results Index : %1 documents, longueur moyenne %2 termes. %3 résultats %1 results %1 résultats List was truncated alphabetically, some frequent La liste a été tronquée par ordre alphabétique. Certains termes fréquents terms may be missing. Try using a longer root. pourraient être absents. Essayer d'utiliser une racine plus longue Show index statistics Afficher les statistiques de l'index Number of documents Nombre de documents Average terms per document Nombre moyen de termes par document Smallest document length Longueur de document la plus petite Longest document length Longueur la plus longue du document Database directory size Taille occupee par l'index MIME types: Types MIME : Item Element Value Valeur Smallest document length (terms) Taille minimale document (termes) Longest document length (terms) Taille maximale document (termes) Results from last indexing: Résultats de la dernière indexation : Documents created/updated Documents créés ou mis à jour Files tested Fichiers testés Unindexed files Fichiers non indexés List files which could not be indexed (slow) Lister les fichiers qui n'ont pas pu être traités (lent) Spell expansion error. Erreur dans les suggestions orthographiques. Spell expansion error. Erreur dans les suggestions orthographiques. Documents created/updated Documents créés/mis à jour Files tested Fichiers testés Unindexed files Fichiers non indexés UIPrefsDialog The selected directory does not appear to be a Xapian index Le répertoire sélectionné ne semble pas être un index Xapian This is the main/local index! C'est l'index principal ! The selected directory is already in the index list Le répertoire sélectionné est déjà dans la liste Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Sélectionnez le répertoire d'index xapian (ie: /home/buddy/.recoll/xapiandb) error retrieving stemming languages Impossible de former la liste des langues pour l'expansion grammaticale Choose Choisir Result list paragraph format (erase all to reset to default) Format de paragraphe de la liste de résultats (tout effacer pour revenir à la valeur par défaut) Result list header (default is empty) En-tête HTML (la valeur par défaut est vide) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Sélection un répertoire de configuration Recoll ou un répertoire d'index Xapian (Ex : /home/moi/.recoll ou /home/moi/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Le repertoire selectionne ressemble a un repertoire de configuration Recoll mais la configuration n'a pas pu etre chargee At most one index should be selected Selectionner au plus un index Cant add index with different case/diacritics stripping option Impossible d'ajouter un index avec une option differente de sensibilite a la casse et aux accents Default QtWebkit font Fonte par défaut de QtWebkit Any term Certains termes All terms Tous les termes File name Nom de fichier Query language Language d'interrogation Value from previous program exit Valeur obtenue de la dernière exécution Context Contexte Description Libellé Shortcut Raccourci Default Défaut Choose QSS File Choisir un fichier QSS Can't add index with different case/diacritics stripping option. Impossible d'ajouter un index avec une option differente de sensibilite a la casse et aux accents. Light Lumière Dark Foncé System Système UIPrefsDialogBase User interface Interface utilisateur Number of entries in a result page Nombre de résultats par page Result list font Fonte pour la liste de résultats Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Ouvre une fenêtre permettant de changer la fonte Reset Réinitialiser Resets the result list font to the system default Réinitialiser la fonte à la valeur par défaut Auto-start simple search on whitespace entry. Démarrer automatiquement une recherche simple sur entrée d'un espace. Start with advanced search dialog open. Panneau de recherche avancée ouvert au démarrage. Start with sort dialog open. Commencer par ouvrir la boîte de dialogue de tri. Search parameters Paramètres pour la recherche Stemming language Langue pour l'expansion des termes Dynamically build abstracts Construire dynamiquement les résumés Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Décide si des résumés seront construits à partir du contexte des termes de recherche. Peut ralentir l'affichage si les documents sont gros. Replace abstracts from documents Remplacer les résumés existant dans les documents Do we synthetize an abstract even if the document seemed to have one? Est-ce qu'un résumé doit etre synthétisé meme dans le cas ou le document original en avait un? Synthetic abstract size (characters) Taille du résumé synthétique (caractères) Synthetic abstract context words Nombre de mots de contexte par occurrence de terme dans le résumé External Indexes Index externes Add index Ajouter un index Select the xapiandb directory for the index you want to add, then click Add Index Sélectionnez le répertoire xapiandb pour l'index que vous souhaitez ajouter, puis cliquez sur Ajouter un index Browse Parcourir &OK &OK Apply changes Appliquer les modifications &Cancel &Annuler Discard changes Abandonner les modifications Result paragraph<br>format string Format de texte<br>du paragraphe résultat Automatically add phrase to simple searches Ajouter automatiquement une phrase aux recherches simples A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Une recherche pour [vin rouge] (2 mots) sera complétée comme [vin OU rouge OU (vin PHRASE 2 rouge)].<br> Ceci devrait donner une meilleure pertinence aux résultats où les termes recherchés apparaissent exactement et dans l'ordre. User preferences Préférences utilisateur Use desktop preferences to choose document editor. Utilisez les préférences du bureau pour choisir l'éditeur de document. External indexes Index externes Toggle selected Changer l'état pour les entrées sélectionnées Activate All Tout activer Deactivate All Tout désactiver Remove selected Effacer la sélection Remove from list. This has no effect on the disk index. Oter de la liste. Sans effet sur les données stockées. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Définit le format de chaque paragraphe de la liste de résultats. Utiliser le format qt html et les remplacements de type d'impression :<br>%A Résumé<br> %D Date<br> %I Nom de l'image de l'icône<br> %K Mots-clés (le cas échéant)<br> %L Aperçu et modification des liens<br> %M Type MIME<br> %N Nombre de résultats<br> %R Pourcentage de pertinence<br> %S Informations sur la taille<br> %T Titre<br> %U Url<br> Remember sort activation state. Mémoriser l'état d'activation du tri Maximum text size highlighted for preview (megabytes) Taille maximum des textes surlignés avant prévisualisation (Mo) Texts over this size will not be highlighted in preview (too slow). Les textes plus gros ne seront pas surlignés dans la prévisualisation (trop lent). Highlight color for query terms Couleur de mise en relief des termes recherchés Prefer Html to plain text for preview. Utiliser le format Html pour la previsualisation. If checked, results with the same content under different names will only be shown once. N'afficher qu'une entrée pour les résultats de contenu identique. Hide duplicate results. Cacher les doublons Choose editor applications Choisir les éditeurs pour les différents types de fichiers Display category filter as toolbar instead of button panel (needs restart). Afficher le filtre de catégorie comme barre d'outils au lieu du panneau des boutons (redémarrage nécessaire). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Les mots de la liste seront automatiquement changés en clauses ext:xxx dans les requêtes en langage d'interrogation. Query language magic file name suffixes. Suffixes automatiques pour le langage d'interrogation Enable Activer ViewAction Changing actions with different current values Changement des actions avec des valeurs actuelles différentes Mime type Type Mime Command Commande MIME type Type MIME Desktop Default Défaut du bureau Changing entries with different current values Nous changeons des éléments avec des valeurs actuelles différentes ViewActionBase File type Type de fichier Action Action Select one or several file types, then click Change Action to modify the program used to open them Sélectionnez un ou plusieurs types de fichiers, puis cliquez sur Modifier l'action pour modifier le programme utilisé pour les ouvrir Change Action Modifier l'action Close Fermer Native Viewers Applications de visualisation Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Sélectionnez un ou plusieurs types mime, puis cliquez sur "Changer d'action"<br>Vous pouvez également fermer cette boîte de dialogue et cocher "Utiliser les préférences du bureau"<br>dans le panneau principal pour ignorer cette liste et utiliser les paramètres par défaut de votre bureau. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Sélectionner un ou plusieurs types MIME, puis utiliser les contrôles dans le cadre du bas pour changer leur traitement Use Desktop preferences by default Utiliser les préférences du bureau Select one or several file types, then use the controls in the frame below to change how they are processed Sélectionner un ou plusieurs types de fichiers, puis utiliser les contrôles dans le cadre du bas pour changer leur traitement Exception to Desktop preferences Exception aux préférences du bureau Action (empty -> recoll default) Action (vide -> utiliser le defaut recoll) Apply to current selection Appliquer à la sélection courante Recoll action: Action current value valeur actuelle Select same S&eacute;lectionner par valeur <b>New Values:</b> <b>Nouveaux param&egrave;tres</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. La valeur est une ligne de commande à exécuter. Substitutions : %s : chaîne de recherche ; %p : numéro de page ; <br>%f : nom de fichier du document. Appuyez sur F1 pour plus d'aide. Webcache Webcache editor Editeur Webcache Search regexp Recherche (regexp) TextLabel TextLabel WebcacheEdit Copy URL Copier l'URL Unknown indexer state. Can't edit webcache file. État indexeur inconnu. Impossible d'éditer le fichier webcache. Indexer is running. Can't edit webcache file. L'indexeur est actif. Impossible d'accéder au fichier webcache. Delete selection Détruire les entrées sélectionnées Webcache was modified, you will need to run the indexer after closing this window. Le fichier webcache a été modifié, il faudra redémarrer l'indexation après avoir fermé cette fenêtre. Save to File Enregistrer sous File creation failed: La création du fichier a échoué : Maximum size %1 (Index config.). Current size %2. Write position %3. Taille maximum %1 (config. Index). Taille courante %2. Position d'écriture %3. WebcacheModel MIME MIME Url Url Date Date Size Taille URL URL WinSchedToolW Error Erreur Configuration not initialized Configuration non initialisée <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Programmation de l'indexation par lots</h3><p>Recoll utilise l'outil standard Windows de programmation de tâches. Ce programme sera démarré quand vous cliquerez le bouton ci-dessous.</p><p>Vous pouvez utiliser soit l'interface complète (<i>Créer</i> dans le menu à droite), ou l'interface simplifiée <i>Créer une tâche basique</i>. Dans les deux cas, Copier/Coller le chemin du fichier de tâche listé ci-dessous comme l'<i>Action</i> à exécuter.</p> Command already started Commande déjà démarrée Recoll Batch indexing Indexation par lots Start Windows Task Scheduler tool Démarrer l'outil de programmation de tâches Could not create batch file Impossible de créer le fichier de commandes confgui::ConfBeaglePanelW Steal Beagle indexing queue Vol de la file d'indexation des Beagles Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle NE DOIT PAS être en cours d'exécution. Active le traitement de la file d'attente de beagle pour indexer l'historique web de Firefox.<br>(Vous devriez également installer le plugin Firefox Beagle) Web cache directory name Nom du répertoire du cache Web The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Le nom d'un répertoire où stocker le cache pour les pages Web visitées.<br>Un chemin non absolu est pris par rapport au répertoire de configuration. Max. size for the web cache (MB) Taille maximale du cache web (MB) Entries will be recycled once the size is reached Les entrées seront recyclées une fois la taille atteinte Web page store directory name Répertoire de stockage des pages WEB The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Le nom d'un répertoire où stocker les copies des pages visitées.<br>Un chemin relatif se réfère au répertoire de configuration. Max. size for the web store (MB) Taille maximale pour le cache Web (Mo) Process the WEB history queue Traiter la file des pages WEB Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Permet d'indexer les pages Web visitées avec Firefox <br>(il vous faut également installer l'extension Recoll pour Firefox) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Les entrées seront recyclées quand la taille sera atteinte.<br>Seule l'augmentation de la taille a un sens parce que réduire la valeur ne tronquera pas un fichier existant (mais gachera de l'espace à la fin). confgui::ConfIndexW Can't write configuration file Impossible d'ecrire le fichier de configuration Recoll - Index Settings: Recoll - Paramètres de l'index : confgui::ConfParamFNW Browse Parcourir Choose Choisir confgui::ConfParamSLW + + - - Add entry Ajouter une entrée Delete selected entries Détruire les entrées sélectionnées ~ ~ Edit selected entries Modifier les entrées sélectionnées confgui::ConfSearchPanelW Automatic diacritics sensitivity Sensibilité automatique aux accents <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Activer automatiquement la sensibilité aux accents si le terme recherché contient des accents (saufs pour ceux de unac_except_trans). Sans cette option, il vous faut utiliser le langage de recherche et le drapeau <i>D</i> pour activer la sensibilité aux accents. Automatic character case sensitivity Sensibilité automatique aux majuscules <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Activer automatiquement la sensibilité aux majuscules si le terme de recherche contient des majuscules (sauf en première lettre). Sans cette option, vous devez utiliser le langage de recherche et le drapeau <i>C</i> pour activer la sensibilité aux majuscules. Maximum term expansion count Taille maximum de l'expansion d'un terme <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Nombre maximum de termes de recherche résultant d'un terme entré (par exemple expansion par caractères jokers). La valeur par défaut de 10000 est raisonnable et évitera les requêtes qui paraissent bloquées pendant que le moteur parcourt l'ensemble de la liste des termes. Maximum Xapian clauses count Compte maximum de clauses Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Nombre maximum de clauses Xapian élémentaires générées pour une requête. Dans certains cas, le résultat de l'expansion des termes peut ere multiplicatif, et utiliserait trop de mémoire. La valeur par défaut de 100000 devrait être à la fois suffisante et compatible avec les configurations matérielles typiques. confgui::ConfSubPanelW Global Global Max. compressed file size (KB) Taille maximale pour les fichiers à décomprimer (ko) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Cette valeur définit un seuil au delà duquel les fichiers comprimés ne seront pas traités. Utiliser -1 pour désactiver la limitation, 0 pour ne traiter aucun fichier comprimé. Max. text file size (MB) Taille maximale d'un fichier texte (Mo) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Cette valeur est un seuil au delà duquel les fichiers de texte pur ne seront pas indexés. Spécifier -1 pour supprimer la limite. Utilisé pour éviter d'indexer des fichiers monstres. Text file page size (KB) Taille de page pour les fichiers de texte pur (ko) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Si cette valeur est spécifiée et positive, les fichiers de texte pur seront découpés en tranches de cette taille pour l'indexation. Ceci diminue les ressources consommées par l'indexation et aide le chargement pour prévisualisation. Max. filter exec. time (S) Temps d'exécution maximum pour un filtre (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Les filtres externes fonctionnant plus longtemps que cela seront abandonnés. Ceci est pour le cas rare (ex: postscript) où un document pourrait faire boucler un filtre à -1 pour pas de limite. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Un filtre externe qui prend plus de temps sera arrêté. Traite le cas rare (possible avec postscript par exemple) où un document pourrait amener un filtre à boucler sans fin. Mettre -1 pour complètement supprimer la limite (déconseillé). Only mime types Seulement ces types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Une liste exclusive des types MIME à indexer.<br>Rien d'autre ne sera indexé. Normalement vide et inactif Exclude mime types Types exclus Mime types not to be indexed Types MIME à ne pas indexer Max. filter exec. time (s) Temps d'exécution maximum pour un filtre (s) confgui::ConfTabsW Apply Appliquer confgui::ConfTopPanelW Top directories Répertoires de départ The list of directories where recursive indexing starts. Default: your home. La liste des répertoires où l'indexation récursive démarre. Défault: votre répertoire par défaut. Skipped paths Chemins ignorés These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Ce sont des noms de répertoires où l'indexation n'entrera pas.<br>Ils peuvent contenir des caractères jokers. Les chemins doivent correspondre à ceux vus par l'indexeur (par exemple: si un des répertoires de départ est '/home/me' et que '/home' est un lien sur '/usr/home', une entrée correcte ici serait '/home/me/tmp*' , pas '/usr/home/me/tmp*') Stemming languages Langue pour l'expansion des termes The languages for which stemming expansion<br>dictionaries will be built. Les langages pour lesquels les dictionnaires d'expansion<br>des termes seront construits. Log file name Nom du fichier journal The file where the messages will be written.<br>Use 'stderr' for terminal output Le nom du fichier ou les messages seront ecrits.<br>Utiliser 'stderr' pour le terminal Log verbosity level Niveau de verbosité This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Cette valeur ajuste la quantite de messages emis,<br>depuis uniquement les erreurs jusqu'a beaucoup de donnees de debug. Index flush megabytes interval Intervalle d'écriture de l'index en mégaoctets This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Ajuste la quantité de données lues entre les écritures sur disque.<br>Contrôle l'utilisation de la mémoire. Défaut 10 Mo Max disk occupation (%) Occupation disque maximum (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Niveau d'occupation du disque ou l'indexation s'arrête (pour eviter un remplissage excessif).<br>0 signifie pas de limite (defaut). No aspell usage Pas d'utilisation d'aspell Aspell language Langue pour aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. La langue du dictionnaire aspell. Cela devrait ressembler à 'en' ou 'fr' . .<br>Si cette valeur n'est pas définie, l'environnement NLS sera utilisé pour le calculer, ce qui fonctionne. o obtenez une idée de ce qui est installé sur votre système, tapez 'config aspell' et cherchez . dans le répertoire 'data-dir'. Database directory name Répertoire de stockage de l'index The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Le nom d'un répertoire où stocker l'index<br>Un chemin non absolu est pris par rapport au répertoire de configuration. La valeur par défaut est 'xapiandb'. Use system's 'file' command Utiliser la commande système's 'file' Use the system's 'file' command if internal<br>mime type identification fails. Utilisez la commande système's 'file' si l'identification interne de type mime<br>échoue. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Désactiver l'utilisation d'aspell pour générer les approximations orthographiques.<br> Utile si aspell n'est pas installé ou ne fonctionne pas. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Langue pour le dictionnaire aspell. La valeur devrait ressembler à 'en' ou 'fr'... <br>Si cette valeur n'est pas positionnée, l'environnement national sera utilisé pour la calculer, ce qui marche bien habituellement. Pour avoir une liste des valeurs possibles sur votre système, entrer 'aspell config' sur une ligne de commande et regarder les fichiers '.dat' dans le répertoire 'data-dir'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Le nom d'un répertoire pour stocker l'index<br>Un chemin relatif sera interprété par rapport au répertoire de configuration. La valeur par défaut est 'xapiandb'. Unac exceptions Exceptions Unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Ce sont les exceptions au mécanisme de suppression des accents, qui, par défaut et en fonction de la configuration de l'index, supprime tous les accents et effectue une décomposition canonique Unicode. Vous pouvez inhiber la suppression des accents pour certains caractères, en fonction de votre langue, et préciser d'autres décompositions, par exemple pour des ligatures. Dans la liste séparée par des espaces, le premier caractères d'un élément est la source, le reste est la traduction. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Ce sont les chemins des répertoires où l'indexation n'ira pas.<br>Les éléments peuvent contenir des caractères joker. Les entrés doivent correspondre aux chemins vus par l'indexeur (ex.: si topdirs comprend '/home/me' et que '/home' est en fait un lien vers '/usr/home', un élément correct pour skippedPaths serait '/home/me/tmp*', et non '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Utilisation disque maximale (%, 0 signifie pas de limite) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. C'est le pourcentage d'utilisation disque - utilisation totale, et non taille de l'index - où l'indexation s'arrêtera en erreur.<br>La valeur par défaut de 0 désactive ce test. uiPrefsDialogBase User preferences Préférences utilisateur User interface Interface utilisateur Number of entries in a result page Nombre de résultats par page If checked, results with the same content under different names will only be shown once. N'afficher qu'une entrée pour les résultats de contenu identique. Hide duplicate results. Cacher les doublons Highlight color for query terms Couleur de mise en relief des termes recherchés Result list font Fonte pour la liste de résultats Opens a dialog to select the result list font Ouvre une fenêtre permettant de changer la fonte Helvetica-10 Helvetica-10 Resets the result list font to the system default Réinitialiser la fonte à la valeur par défaut Reset Réinitialiser Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Définit le format de chaque paragraphe de la liste de résultats. Utiliser le format qt html et les remplacements de type d'impression :<br>%A Résumé<br> %D Date<br> %I Nom de l'image de l'icône<br> %K Mots-clés (le cas échéant)<br> %L Aperçu et modification des liens<br> %M Type MIME<br> %N Nombre de résultats<br> %R Pourcentage de pertinence<br> %S Informations sur la taille<br> %T Titre<br> %U Url<br> Result paragraph<br>format string Format de texte<br>du paragraphe résultat Texts over this size will not be highlighted in preview (too slow). Les textes plus gros ne seront pas surlignés dans la prévisualisation (trop lent). Maximum text size highlighted for preview (megabytes) Taille maximum des textes surlignés avant prévisualisation (Mo) Use desktop preferences to choose document editor. Utilisez les préférences du bureau pour choisir l'éditeur de document. Choose editor applications Choisir les éditeurs pour les différents types de fichiers Display category filter as toolbar instead of button panel (needs restart). Afficher le filtre de catégorie comme barre d'outils au lieu du panneau des boutons (redémarrage nécessaire). Auto-start simple search on whitespace entry. Démarrer automatiquement une recherche simple sur entrée d'un espace. Start with advanced search dialog open. Panneau de recherche avancée ouvert au démarrage. Start with sort dialog open. Commencer par ouvrir la boîte de dialogue de tri. Remember sort activation state. Mémoriser l'état d'activation du tri Prefer Html to plain text for preview. Utiliser le format Html pour la previsualisation. Search parameters Paramètres pour la recherche Stemming language Langue pour l'expansion des termes A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Une recherche pour [vin rouge] (2 mots) sera complétée comme [vin OU rouge OU (vin PHRASE 2 rouge)].<br> Ceci devrait donner une meilleure pertinence aux résultats où les termes recherchés apparaissent exactement et dans l'ordre. Automatically add phrase to simple searches Ajouter automatiquement une phrase aux recherches simples Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Décide si des résumés seront construits à partir du contexte des termes de recherche. Peut ralentir l'affichage si les documents sont gros. Dynamically build abstracts Construire dynamiquement les résumés Do we synthetize an abstract even if the document seemed to have one? Est-ce qu'un résumé doit etre synthétisé meme dans le cas ou le document original en avait un? Replace abstracts from documents Remplacer les résumés existant dans les documents Synthetic abstract size (characters) Taille du résumé synthétique (caractères) Synthetic abstract context words Nombre de mots de contexte par occurrence de terme dans le résumé The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Les mots de la liste seront automatiquement changés en clauses ext:xxx dans les requêtes en langage d'interrogation. Query language magic file name suffixes. Suffixes automatiques pour le langage d'interrogation Enable Activer External Indexes Index externes Toggle selected Changer l'état pour les entrées sélectionnées Activate All Tout activer Deactivate All Tout désactiver Remove from list. This has no effect on the disk index. Oter de la liste. Sans effet sur les données stockées. Remove selected Effacer la sélection Click to add another index directory to the list Cliquez pour ajouter un autre répertoire d'index à la liste Add index Ajouter un index Apply changes Appliquer les modifications &OK &OK Discard changes Abandonner les modifications &Cancel &Annuler Abstract snippet separator Séparateur d'extrait Use <PRE> tags instead of <BR>to display plain text as html. Utilisez les balises <PRE> au lieu de <BR>pour afficher du texte brut en html. Lines in PRE text are not folded. Using BR loses indentation. Les lignes dans le texte PRE ne sont pas pliées. L'utilisation de BR perd l'indentation. Style sheet Feuille de style Opens a dialog to select the style sheet file Ouvre un dialogue pour choisir un fichier feuille de style Choose Choisir Resets the style sheet to default Restore la valeur par défaut pour la feuille de style Lines in PRE text are not folded. Using BR loses some indentation. Les lignes dans le texte PRE ne sont pas pliées. L'utilisation de BR perd une certaine indentation. Use <PRE> tags instead of <BR>to display plain text as html in preview. Utilisez les balises <PRE> au lieu de <BR>pour afficher du texte brut comme html dans la prévisualisation. Result List Liste de résultats Edit result paragraph format string Editer le format du paragraphe de résultat Edit result page html header insert Editer le fragment à insérer dans l'en-tête HTML Date format (strftime(3)) Format de date (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Seuil de fréquence (pourcentage) au delà duquel les termes ne seront pas utilisés. Les phrases contenant des termes trop fréquents posent des problèmes de performance. Les termes ignorés augmentent la distance de phrase, et réduisent l'efficacité de la fonction de recherche de phrase automatique. La valeur par défaut est 2% Autophrase term frequency threshold percentage Seuil de fréquence de terme (pourcentage) pour la génération automatique de phrases Plain text to HTML line style Style de traduction texte ordinaire vers HTML Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Les lignes dans une balise PRE ne sont pas repliées. Utiliser BR conduit à perdre une partie des tabulations. Le style PRE + WRAP peut être le meilleurs compromis mais son bon fonctionnement dépend des versions Qt. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + repliement Exceptions Exception Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Types de Mime qui ne devraient pas être passés à xdg-open même lorsque "Utiliser les préférences du bureau" est défini.<br> Utile pour passer le numéro de page et les options de recherche, par exemple évince. Disable Qt autocompletion in search entry. Désactiver l'autocomplétion Qt dans l'entrée de recherche Search as you type. Lancer la recherche a chaque caractere entre Paths translations Traductions de chemins Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Cliquer pour ajouter un autre index a la liste. Vous pouvez sélectionner soit un répertoire de configuration Recoll soit un index Xapian Snippets window CSS file Feuille de style CSS pour le popup de fragments Opens a dialog to select the Snippets window CSS style sheet file Ouvre un dialogue permettant de sélectionner la feuille de style CSS pour le popup des fragments Resets the Snippets window style Réinitialise le style de la fenêtre des fragments Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Décide si les filtres de documents sont affichés comme des radio-boutons, un menu déroulant dans la barre d'outils, ou un menu. Document filter choice style: Style de choix des filtres de documents : Buttons Panel Panneau de boutons Toolbar Combobox Menu déroulant dans le panneau d'outils Menu Menu Show system tray icon. Afficher l'icone dans la barre d'état système Close to tray instead of exiting. Réduire dans la barre d'état au lieu de quitter Start with simple search mode Démarrer en mode recherche simple Show warning when opening temporary file. Afficher un avertissement quand on édite une copie temporaire User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Style utilisateur à appliquer à la fenêtre "snippets".<br>Note : l'en tête de page de résultat est aussi inclus dans la fenêtre "snippets". Synonyms file Fichier de synonymes Highlight CSS style for query terms Style CSS de mise en avant pour les termes de la recherche Recoll - User Preferences Recoll - Préférences utilisateur Set path translations for the selected index or for the main one if no selection exists. Créer les traductions de chemins d'accès pour l'index selectionné, ou pour l'index principal si rien n'est sélectionné. Activate links in preview. Activer les liens dans la prévisualisation Make links inside the preview window clickable, and start an external browser when they are clicked. Rendre clicquables les liens dans la fenêtre de prévisualisation et démarrer un navigateur extérieur quand ils sont activés. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Mise en évidence des termes de recherche. <br>Si le bleu utilisé par défaut est trop discret, essayer peut-être : "color:red;background:yellow"... Start search on completer popup activation. Démarrer la recherche quand un choix est fait dans les suggestions Maximum number of snippets displayed in the snippets window Nombre maximum d'extraits affichés dans la fenêtre des extraits Sort snippets by page number (default: by weight). Trier les extraits par numéro de page (défaut: par pertinence). Suppress all beeps. Mode silencieux. Application Qt style sheet Feuille de style Qt pour l'application Limit the size of the search history. Use 0 to disable, -1 for unlimited. Limiter la taille de l'historique de recherche. Entrer 0 pour ne pas avoir d'historique, et -1 pour ne pas avoir de limite de taille. Maximum size of search history (0: disable, -1: unlimited): Taille maximum de l'historique de recherche (0:inactivé, -1: sans limite): Generate desktop notifications. Générer des notifications bureau. Misc Divers Work around QTBUG-78923 by inserting space before anchor text Contourner le QTBUG-78923 en inseŕant un espace devant le texte du lien Display a Snippets link even if the document has no pages (needs restart). Afficher un lien Extraits me quand le document n'est pas paginé (vous devrez redémarrer Recoll). Maximum text size highlighted for preview (kilobytes) Taille maximum de texte surligné pour la prévisualisation (kilo-octets) Start with simple search mode: Démarrer avec le type de recherche simple qui suit: Hide toolbars. Cacher les barres d'outils. Hide status bar. Cacher la barre de status. Hide Clear and Search buttons. Cacher les boutons Effacer et Recherche. Hide menu bar (show button instead). Cacher la barre de menu (afficher un bouton à la place). Hide simple search type (show in menu only). Cacher le type de recherche simple (afficher uniquement dans le menu). Shortcuts Raccourcis Hide result table header. Cacher l'en-tête de table de résultats Show result table row headers. Afficher les en-têtes de ligne. Reset shortcuts defaults Rétablir la configuration par défaut des raccourcis Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Désactive les raccourcis Ctrl+[0-9]/[a-z] pour sauter sur les lignes du tableau. Use F1 to access the manual Utilisez F1 pour accéder au manuel Hide some user interface elements. Masquer certains éléments de l'interface utilisateur. Hide: Fermer: Toolbars Barres d'outils Status bar Barre d'état Show button instead. Afficher le bouton à la place. Menu bar Barre de menu Show choice in menu only. Afficher le choix dans le menu seulement. Simple search type Type de recherche simple Clear/Search buttons Boutons d'effacement/recherche Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Désactive les raccourcis Ctrl+[0-9]/[a-z] pour sauter vers les lignes du tableau. None (default) Aucun (par défaut) Uses the default dark mode style sheet Utilise la feuille de style de mode sombre par défaut Dark mode Mode sombre Choose QSS File Choisir un fichier QSS To display document text instead of metadata in result table detail area, use: Pour afficher le texte du document au lieu des métadonnées dans la zone de détail de la table de résultats, utilisez : left mouse click clic gauche de la souris Shift+click Maj+clic Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Ouvre une boîte de dialogue pour sélectionner le fichier de feuille de style.<br>Regardez /usr/share/recoll/examples/recoll[-dark].qss pour un exemple. Result Table Tableau de résultats Do not display metadata when hovering over rows. Ne pas afficher les détails quand on passe sur un rang avec la souris. Work around Tamil QTBUG-78923 by inserting space before anchor text Contourner le bug QTBUG-78923 pour le Tamil en inseŕant un espace devant le texte du lien The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Ce bug provoque l'apparition d'un caractère étrange en forme de cercle à l'intérieur de mots en Tamil. Le contournement insère un caractère d'espace additionnel supplémentaire qui semble corriger le problème. Depth of side filter directory tree Profondeur de l'arbre du filtre de répertoires Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Facteur de zoom pour l'interface utilisateur. Utile si l'affichage par défaut ne convient pas à votre résolution d'écran. Display scale (default 1.0): Échelle d'affichage (défaut 1.0): Enable spelling approximations for terms not found in the index. Activer l'ajout automatique d'approximations orthographiques aux recherches. Automatic spelling approximation. Approximation orthographique automatique. Max spelling distance Distance orthographique maximale Add common spelling approximations for rare terms. Ajouter des termes fréquents et proches orthographiquement des termes rares de la recherche. Maximum number of history entries in completer list Nombre maximum d'entrées dans la liste de complétions Number of history entries in completer: Nombre d'entrées historiques dans la liste de complétion: Displays the total number of occurences of the term in the index Affiche le nombre total d'occurences du terme dans l'index Show hit counts in completer popup. Afficher le nombre de correspondances dans la liste de complétion. Prefer HTML to plain text for preview. Utiliser le format HTML pour la previsualisation. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Voir la documentation de Qt QDateTimeEdit. Ex: yyyy-MM-dd. Laisser vide pour utiliser le format par défaut. Side filter dates format (change needs restart) Format pour les dates du filtre (un changement nécessite un redémarrage de l'application) If set, starting a new instance on the same index will raise an existing one. Décide si démarrer une nouvelle instance ne fait qu'activer l'instance existente. Single application Instance d'application unique Set to 0 to disable and speed up startup by avoiding tree computation. Positionner à zéro pour accélerer le démarrage en évitant le calcul de l'arbre The completion only changes the entry when activated. La valeur de complétion ne change l'entrée que si le popup est activé. Completion: no automatic line editing. Complétion: pas d'édition automatique de la ligne. Interface language (needs restart): Langue d'interface (redémarrage nécessaire) Note: most translations are incomplete. Leave empty to use the system environment. Note: la plupart des traductions sont incomplètes. Laisser vide pour utiliser l'environnement système. Preview Prévisualisation Set to 0 to disable details/summary feature Positionner à zéro pour toujours afficher le champ complet Fields display: max field length before using summary: Affichage des champs: longueur maximale affichée directement: Number of lines to be shown over a search term found by preview search. Nombre de lignes visibles au dessus d'un terme trouvé par la recherche Search term line offset: Décalage vertical d'un résultat de recherche Wild card characters *?[] will processed as punctuation instead of being expanded Les caractères joker *?[] seront inactivés et traités comme de la ponctuation Ignore wild card characters in ALL terms and ANY terms modes Ignorer les caractères joker dans les modes "Tous les termes" et "Certains termes" Color scheme Schéma de couleurs When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Lors de l'affichage de HTML en mode sombre, essayez d'utiliser un fond sombre (et une couleur claire). Cela entre en conflit avec de nombreux documents qui remplaceront notre paramètre de couleur claire par leur propre couleur de premier plan CSS (sombre), ce qui entraîne un document illisible, donc il est désactivé par défaut. Use dark background when displaying HTML in dark mode. Utilisez un fond sombre lors de l'affichage du HTML en mode sombre. recoll-1.43.12/qtgui/i18n/recoll_lt.ts0000644000175000017500000073764515124431112016723 0ustar dockesdockes ActSearchDLG Menu search Meniu paieška AdvSearch All clauses Visos sąlygos Any clause Bet kuri sąlyga texts tekstai spreadsheets skaičiuoklės presentations prezentacijos media media messages žinutės other kita Bad multiplier suffix in size filter Bad multiplier suffix in size filter text tekstas spreadsheet skaičiuoklės presentation prezentacijos message pranešimas Advanced Search Išsamesnė Paieška History Next History Next History Prev History Prev Load next stored search Load next stored search Load previous stored search Load previous stored search AdvSearchBase Advanced search Išsamesnė paieška Restrict file types Apriboti bylų tipus Save as default Išsaugoti kaip numatytąjį Searched file types Ieškota bylų tipų All ----> Visi ----> Sel -----> Pas -----> <----- Sel <----- Pas <----- All <----- Visi Ignored file types Ignoruoti bylų tipai Enter top directory for search Įrašykite viršutinio lygio direktoriją paieškai Browse Naršyti Restrict results to files in subtree: Pateikti rezultatus byloms submedyje: Start Search Pradėti paiešką Search for <br>documents<br>satisfying: Ieškoti <br>dokumentų<br>tenkinančių: Delete clause Ištrinti sąlygą Add clause Pridėti sąlygą Check this to enable filtering on file types Pažymėti, jei norite filtruoti pagal bylų tipus By categories Pagal kategorijas Check this to use file categories instead of raw mime types Pažymėti, jei norite naudoti bylų kategorijas vietoje mime tipų Close Uždaryti All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Visi kairėje esantys netušti laukai bus sujungiami AND (visi) arba OR (bet kuris) pagalba. <br> "Bet kuris" "Visi" ir "Nei vienas" laukų tipai gali priimti paprastų žodžių mišinį ir frazes pažymėtas dvigubomis kabutėmis. <br> Tušti laukeliai ignoruojami. Invert Invert Minimum size. You can use k/K,m/M,g/G as multipliers Minimum size. You can use k/K,m/M,g/G as multipliers Min. Size Min. Size Maximum size. You can use k/K,m/M,g/G as multipliers Maximum size. You can use k/K,m/M,g/G as multipliers Max. Size Max. Size Select Select Filter Filter From From To To Check this to enable filtering on dates Check this to enable filtering on dates Filter dates Filter dates Find Find Check this to enable filtering on sizes Check this to enable filtering on sizes Filter sizes Filter sizes Filter birth dates Filtruoti gimimo datas ConfIndexW Can't write configuration file Nepavyksta įrašyti nustatymų bylos Global parameters Globalūs parametrai Local parameters Lokalūs parametrai Search parameters Paieškos parametrai Top directories Aukščiausio lygmens direktorijos<br>kuriose vykdomas indeksavimas The list of directories where recursive indexing starts. Default: your home. Direktorijų, kuriose pradedamas rekursinis indeksavimas, sąrašas. Numatytoji: namų direktorija. Skipped paths Direktorijų, kurių turinys nein-<br>deksuojamas, sąrašas These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Stemming languages Kalbos naudojamos stemming<br> procesui The languages for which stemming expansion<br>dictionaries will be built. Kalbos, kurioms bus sukurti stemming <br>expansion žodynai. Log file name Log bylos vardas The file where the messages will be written.<br>Use 'stderr' for terminal output Byla, kurioje bus įrašomos žinutės.<br>Naudokite 'stderr' norėdami išvesti į terminalo langą Log verbosity level Log išsamumo lygmuo This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Vertė nustato žiniučių apimtį, nuo vien tik <br>klaidų fiksavimo iki didelės apimties duomenų skirtų debugging. Index flush megabytes interval Indekso dalių, įrašomų į diską, dydis (MB) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Vertė nustato duomenų, kurie indeksuojami tarp įrašymo į diską, apimtį.<br>Padeda valdyti indeksavimo dalies atminties naudojimą. Numatyta vertė yra 10 MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. No aspell usage Aspell nebus naudojama Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Nurodo nenaudoti aspell programos kuriant tarimo aproksimacijas raktinių žodžių tyrinėjimo įrankyje.<br>Naudinga, jei aspell neveikia arba neįdiegta. Aspell language Aspell kalba The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Database directory name Duomenų bazės direktorijos vardas The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Unac exceptions Unac exceptions <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Process the WEB history queue Process the WEB history queue Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Web page store directory name Web page store directory name The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Max. size for the web store (MB) Max. size for the web store (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Automatic diacritics sensitivity Automatic diacritics sensitivity <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. Automatic character case sensitivity Automatic character case sensitivity <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. Maximum term expansion count Maximum term expansion count <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. Maximum Xapian clauses count Maximum Xapian clauses count <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Indexer log file name Indexer log file name If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Web history Web history Process the Web history queue Apdoroti interneto naršyklės istorijos eilę. (by default, aspell suggests mispellings when a query has no results). (pagal nutylėjimą, aspell siūlo klaidingus rašybos variantus, kai užklausa neturi rezultatų). Page recycle interval Puslapio perdirbimo intervalas <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Pagal nutylėjimą, podėlyje saugomas tik vienas URL egzempliorius. Tai gali būti pakeista nustatant šį parametrą į reikšmę, nustatančią, kokia dažniu saugome kelis egzempliorius ('diena', 'savaitė', 'mėnuo', 'metai'). Atkreipkite dėmesį, kad padidinus intervalą, esami įrašai nebus ištrinti. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Pastaba: senosios puslapiai bus ištrinti, kad būtų atsiribotas vietos naujiems, kai bus pasiektas maksimalus dydis. Dabartinis dydis: %1 Start folders Pradėti aplankai The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Sąrašas aplankų/katalogų, kurie bus indeksuojami. Poaplankiai bus apdorojami rekursyviai. Numatytasis: jūsų namai. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Disko pilnumo ribinis procentas, kai mes sustabdome indeksavimą (Pvz., 90, kad sustotų 90% pilnas, 0 arba 100 reiškia jokio apribojimo) Browser add-on download folder Naršyklės papildymų atsisiuntimų aplankas Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Nustatykite tai tik tada, jei nustatėte "Atsisiuntimų aplanką" parametrą naršyklės papildomo įskiepio nustatymuose. Šiuo atveju tai turėtų būti visi kelio katalogas (pvz., /home/[aš]/Atsisiuntimai/mano-aplankas) Store some GUI parameters locally to the index Saugokite kai kuriuos GUI parametrus vietiniame indekse <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index Vartotojo sąsajos nustatymai įprastai saugomi globaliame faile, galiojančiame visiems indeksams. Nustatę šį parametrą, kai kurie nustatymai, pvz., rezultatų lentelės sąranka, bus specifiniai indeksui. Suspend the real time indexer when running on battery Sustabdyti realaus laiko indeksatorių, kai naudojamas baterijos energija. The indexer will wait for a return on AC and reexec itself when it happens Indeksatorius palauks grįžimo į AC ir iš naujo vykdys save, kai tai įvyks. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Aplankų/katalogų sąrašas, kurie bus indeksuojami, rekursyviai su jų sub-aplankais.<br>Simbolis „~“ išplečiamas į jūsų namų katalogą, kuris yra numatytasis pradinis reikšmės. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Only mime types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Exclude mime types Exclude mime types Mime types not to be indexed Mime types not to be indexed Max. compressed file size (KB) Didžiausias suspaustų bylų dydis (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Viršijus pasirinktą suspaustų bylų dydį, jie nebus indeksuojami. Pasirinkite -1 jei nenorite nurodyti ribos, 0, jei nenorite, jog suspaustos bylos būtų indeksuojamos. Max. text file size (MB) Didžiausias tekstinės bylos dydis (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Viršijus pasirinktą tekstinių bylų dydį, jie nebus indeksuojami. Pasirinkite -1 jei nenorite nurodyti ribos, 0, jei nenorite, jog suspaustos bylos būtų indeksuojamos. Text file page size (KB) Tekstinės bylos dydis (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Jei vertė nurodyta (nelgyi -1) tekstinės bylos bus suskaidytos į nurodyto dydžio bylas, kurios bus atskirai indeksuojamos. Naudinga atliekant paiešką labai dideliose tekstinėse bylose (pav. log bylose). Max. filter exec. time (s) Max. filter exec. time (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Global Globalus ConfigSwitchDLG Switch to other configuration Perjungti į kitą konfigūraciją ConfigSwitchW Choose other Pasirinkite kitą Choose configuration directory Pasirinkite konfigūracijos katalogą CronToolW Cron Dialog Cron Dialog <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Days of week (* or 0-7, 0 or 7 is Sunday) Hours (* or 0-23) Hours (* or 0-23) Minutes (0-59) Minutes (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> Enable Enable Disable Disable It seems that manually edited entries exist for recollindex, cannot edit crontab It seems that manually edited entries exist for recollindex, cannot edit crontab Error installing cron entry. Bad syntax in fields ? Error installing cron entry. Bad syntax in fields ? EditDialog Dialog Dialog EditTrans Source path Source path Local path Local path Config error Config error Original path Original path Path in index Kelias indekse Translated path Išverstas kelias EditTransBase Path Translations Path Translations Setting path translations for Setting path translations for Select one or several file types, then use the controls in the frame below to change how they are processed Select one or several file types, then use the controls in the frame below to change how they are processed Add Add Delete Delete Cancel Atšaukti Save Save FirstIdxDialog First indexing setup First indexing setup <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> Indexing configuration Indexing configuration This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Indexing schedule Indexing schedule This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Start indexing now Start indexing now FragButs %1 not found. %1 not found. %1: %2 %1: %2 Fragment Buttons Fragment Buttons Query Fragments Query Fragments IdxSchedW Index scheduling setup Index scheduling setup <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> Cron scheduling Cron scheduling The tool will let you decide at what time indexing should run and will install a crontab entry. The tool will let you decide at what time indexing should run and will install a crontab entry. Real time indexing start up Real time indexing start up Decide if real time indexing will be started when you log in (only for the default index). Decide if real time indexing will be started when you log in (only for the default index). ListDialog Dialog Dialog GroupBox GroupBox Main No db directory in configuration Nustatymuose nerandama duomenų bazės bylos Could not open database in Nepavyko atidaryti duomenų bazės . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. Configuration problem (dynconf Nustatymų bėda (dynconf "history" file is damaged or un(read)writeable, please check or remove it: "history" file is damaged or un(read)writeable, please check or remove it: "history" file is damaged, please check or remove it: "history" file is damaged, please check or remove it: Needs "Show system tray icon" to be set in preferences! Reikia nustatyti "Rodyti sistemos dėklą" pasirinkimuose! PTransEdit Path in index Kelias indekse Translated path Išverstas kelias Config error Config error Original path Original path Local path Local path PTransEditBase Path Translations Path Translations Select one or several file types, then use the controls in the frame below to change how they are processed Select one or several file types, then use the controls in the frame below to change how they are processed Add Add Delete Delete Cancel Atšaukti Save Save Preview &Search for: &Ieškoti: &Next &Sekantis &Previous &Ankstesnis Match &Case Atitaikyti &Atvejį Clear Išvalyti Creating preview text Kuriamas peržvalgos tekstas Loading preview text into editor Įkeliamas į redaktorių peržvalgos tekstas Cannot create temporary directory Nepavyksta sukurti laikinos direktorijos Cancel Atšaukti Close Tab Uždarykite auselę Missing helper program: Trūksta pagalbinės programos: Can't turn doc into internal representation for Nepavyksta pervesti dokumento į vidinę buseną Cannot create temporary directory: Cannot create temporary directory: Error while loading file Error while loading file Form Form Tab 1 Tab 1 Open Atidaryti Canceled Canceled Error loading the document: file missing. Error loading the document: file missing. Error loading the document: no permission. Error loading the document: no permission. Error loading: backend not configured. Error loading: backend not configured. Error loading the document: other handler error<br>Maybe the application is locking the file ? Error loading the document: other handler error<br>Maybe the application is locking the file ? Error loading the document: other handler error. Error loading the document: other handler error. <br>Attempting to display from stored text. <br>Attempting to display from stored text. Could not fetch stored text Could not fetch stored text Previous result document Previous result document Next result document Next result document Preview Window Preview Window Close Window Close Window Next doc in tab Next doc in tab Previous doc in tab Previous doc in tab Close tab Close tab Print tab Print tab Close preview window Close preview window Show next result Show next result Show previous result Show previous result Print Spausdinti PreviewTextEdit Show fields Rodyti laukus Show main text Rodyti pagrindinį tekstą Print Spausdinti Print Current Preview Spausdinti kaip matoma peržiūroje Show image Show image Select All Select All Copy Copy Save document to file Save document to file Fold lines Fold lines Preserve indentation Preserve indentation Open document Open document Reload as Plain Text Perkrauti kaip gryną tekstą Reload as HTML Perkrauti kaip HTML QObject Global parameters Globalūs parametrai Local parameters Lokalūs parametrai <b>Customised subtrees <b>Pritaikyti direktorijų<br> submedžiai The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Subdirektorijų, kuriose dalį parametrų reikia pakeisti, sąrašas.<br> Numatytoji reikšmė: tuščia. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Nurodyti parametrai taikomi arba visoms direktorijoms, arba subdirektorijoms,<br> jei kuri jų prieš tai pažymimos. Pridėti ir ištrinti direktorijų vardus galite<br> spausdami +/- mygtukus. Skipped names Neįtraukti vardai These are patterns for file or directory names which should not be indexed. Bylų arba direktorijų, kurių nedera indeksuoti, vardų šablonai. Default character set Numatytoji simbolių aibė This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Pasirinkta simbolių aibė bus naudojama skaityti bylų, kurių simbolių aibės nepavyksta nustatyti, turiniui.<br>Numatytoji vertė yra nepasirinkti konkrečios simbolių aibės - tokiu atveju naudojama NLS aplinkos vertė. Follow symbolic links Sekti simbolines nuorodas Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Indeksavimo metu sekti simbolines nuorodas. Numatytasis elgesys yra nesekti, bandant išvengti dvigubo indeksavimo Index all file names Indeksuoti visų bylų vardus Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indeksuoti bylų, kurių turinio nepavyksta perskaityti, vardus. Numatytoji reikšmė: teisybė Beagle web history Beagle tinklo istorija Search parameters Paieškos parametrai Web history Web history Default<br>character set Default<br>character set Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Ignored endings Ignored endings These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. These are patterns for file or directory names which should not be indexed. Šie yra šablonai failų ar katalogų pavadinimams, kurie neturėtų būti įtraukti į indeksą. QWidget Create or choose save directory Create or choose save directory Choose exactly one directory Choose exactly one directory Could not read directory: Could not read directory: Unexpected file name collision, cancelling. Unexpected file name collision, cancelling. Cannot extract document: Cannot extract document: &Preview &Peržiūra &Open &Open Open With Open With Run Script Run Script Copy &File Name Kopijuoti &Bylos vardą Copy &URL Kopijuoti &URL &Write to File &Įrašyti į bylą Save selection to files Save selection to files Preview P&arent document/folder Peržiūrėti &Aukštesnio lygio dokumentus/direktorijas &Open Parent document/folder Atidaryti &Aukštesnio lygio dokumentus/direktorijas Find &similar documents Rasti &panašius dokumentus Open &Snippets window Open &Snippets window Show subdocuments / attachments Show subdocuments / attachments &Open Parent document &Open Parent document &Open Parent Folder &Open Parent Folder Copy Text Kopijuoti tekstą Copy &File Path Kopijuoti &Failo Kelias Copy File Name Nukopijuoti failo pavadinimą QxtConfirmationMessage Do not show again. Do not show again. RTIToolW Real time indexing automatic start Real time indexing automatic start <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Start indexing daemon with my desktop session. Also start indexing daemon right now. Also start indexing daemon right now. Replacing: Replacing: Replacing file Replacing file Can't create: Can't create: Warning Įspėjimas Could not execute recollindex Could not execute recollindex Deleting: Deleting: Deleting file Deleting file Removing autostart Removing autostart Autostart file deleted. Kill current process too ? Autostart file deleted. Kill current process too ? Configuration name Konfigūracijos pavadinimas Short alphanumeric nickname for this config Trumpas alfanumerinis slapyvardis šiai konfigūracijai Could not find Nepavyko rasti RclCompleterModel Hits Paieškos rezultatai Hits RclMain About Recoll Apie Recoll Executing: [ Vykdoma: [ Cannot retrieve document info from database Nepavyksta išgauti iš duomenų bazės informacijos apie dokumentą Warning Įspėjimas Can't create preview window Nepavyksta sukurti peržiūros lango Query results Užklausos rezultatai Document history Dokumentų istorija History data Istorijos duomenys Indexing in progress: Indeksuojama: Files Failai Purge Išvalyti Stemdb Stemdb Closing Uždaroma Unknown Nežinoma This search is not active any more Ši paieška daugiau nevykdoma Can't start query: Nepavyksta pradėti vykdyti užklausą: Bad viewer command line for %1: [%2] Please check the mimeconf file Netinkamos peržiūros komandinė eilutė %1: [%2] Prašome patikrinti mimeconf bylą Cannot extract document or create temporary file Nepavyksta perskaityti dokumento arba sukurti laikinos bylos (no stemming) (no stemming) (all languages) (visos kalbos) error retrieving stemming languages error retrieving stemming languages Update &Index Atnaujinti &Indeksą Indexing interrupted indeksavimas pertrauktas Stop &Indexing Sustabdyti &Indeksavimą All Visi media media message pranešimas other kita presentation prezentacijos spreadsheet skaičiuoklės text tekstas sorted surūšiuota filtered filtruotas External applications/commands needed and not found for indexing your file types: Reikalingos pilnam indeksavimui, tačiau nerandamos išorinės programos/komandos: No helpers found missing Randamos visos reikalingos pagalbinės programos Missing helper programs Trūksta pagalbinių programų Save file dialog Išsaugoti failą forma Choose a file name to save under Pasirinkite bylos vardą, kuriuo išsaugosite bylą Document category filter Dokumentų kategorijų filtras No external viewer configured for mime type [ Nustatymuose nenumatyta jokia išorinė peržiūros programa šiam mime tipui [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Nurodyta peržiūros programa šiam mime tipui %1: %2 nerandama. Ar norėtumete iššaukti nustatymų langą? Can't access file: Can't access file: Can't uncompress file: Can't uncompress file: Save file Save file Result count (est.) Result count (est.) Query details Užklausos detalės Could not open external index. Db not open. Check external index list. Could not open external index. Db not open. Check external index list. No results found No results found None None Updating Updating Done Done Monitor Monitor Indexing failed Indexing failed The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Erasing index Erasing index Reset the index and start from scratch ? Reset the index and start from scratch ? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Error Error Index not open Index not open Index query error Index query error Indexed Mime Types Indexed Mime Types Content has been indexed for these MIME types: Content has been indexed for these MIME types: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Can't update index: indexer running Can't update index: indexer running Indexed MIME Types Indexed MIME Types Bad viewer command line for %1: [%2] Please check the mimeview file Bad viewer command line for %1: [%2] Please check the mimeview file Viewer command line for %1 specifies both file and parent file value: unsupported Viewer command line for %1 specifies both file and parent file value: unsupported Cannot find parent document Cannot find parent document Indexing did not run yet Indexing did not run yet External applications/commands needed for your file types and not found, as stored by the last indexing pass in External applications/commands needed for your file types and not found, as stored by the last indexing pass in Index not up to date for this file. Refusing to risk showing the wrong entry. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Indexer running so things should improve when it's done Indexer running so things should improve when it's done Sub-documents and attachments Sub-documents and attachments Document filter Document filter Index not up to date for this file. Refusing to risk showing the wrong entry. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. The indexer is running so things should improve when it's done. The indexer is running so things should improve when it's done. The document belongs to an external indexwhich I can't update. The document belongs to an external indexwhich I can't update. Click Cancel to return to the list. Click Ignore to show the preview anyway. Click Cancel to return to the list. Click Ignore to show the preview anyway. Duplicate documents Duplicate documents These Urls ( | ipath) share the same content: These Urls ( | ipath) share the same content: Bad desktop app spec for %1: [%2] Please check the desktop file Bad desktop app spec for %1: [%2] Please check the desktop file Bad paths Bad paths Bad paths in configuration file: Bad paths in configuration file: Selection patterns need topdir Selection patterns need topdir Selection patterns can only be used with a start directory Selection patterns can only be used with a start directory No search No search No preserved previous search No preserved previous search Choose file to save Choose file to save Saved Queries (*.rclq) Saved Queries (*.rclq) Write failed Write failed Could not write to file Could not write to file Read failed Read failed Could not open file: Could not open file: Load error Load error Could not load saved query Could not load saved query Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Do not show this warning next time (use GUI preferences to restore). Do not show this warning next time (use GUI preferences to restore). Disabled because the real time indexer was not compiled in. Disabled because the real time indexer was not compiled in. This configuration tool only works for the main index. This configuration tool only works for the main index. The current indexing process was not started from this interface, can't kill it The current indexing process was not started from this interface, can't kill it The document belongs to an external index which I can't update. The document belongs to an external index which I can't update. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Index scheduling Index scheduling Sorry, not available under Windows for now, use the File menu entries to update the index Sorry, not available under Windows for now, use the File menu entries to update the index Can't set synonyms file (parse error?) Can't set synonyms file (parse error?) Index locked Index locked Unknown indexer state. Can't access webcache file. Unknown indexer state. Can't access webcache file. Indexer is running. Can't access webcache file. Indexer is running. Can't access webcache file. with additional message: with additional message: Non-fatal indexing message: Non-fatal indexing message: Types list empty: maybe wait for indexing to progress? Types list empty: maybe wait for indexing to progress? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Tools Įrankiai Results Results (%d documents/%d files/%d errors/%d total files) (%d documents/%d files/%d errors/%d total files) (%d documents/%d files/%d errors) (%d documents/%d files/%d errors) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Indexing done Indexing done Can't update index: internal error Can't update index: internal error Index not up to date for this file.<br> Index not up to date for this file.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Also, it seems that the last index update for the file failed.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> documents dokumentai document document files failai file byla errors errors error error total files) total files) No information: initial indexing not yet performed. No information: initial indexing not yet performed. Batch scheduling Batch scheduling The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Confirm Confirm Erasing simple and advanced search history lists, please click Ok to confirm Erasing simple and advanced search history lists, please click Ok to confirm Could not open/create file Could not open/create file F&ilter F&ilter Could not start recollindex (temp file error) Could not start recollindex (temp file error) Could not read: Could not read: This will replace the current contents of the result list header string and GUI qss file name. Continue ? This will replace the current contents of the result list header string and GUI qss file name. Continue ? You will need to run a query to complete the display change. You will need to run a query to complete the display change. Simple search type Simple search type Any term Bet kuris raktinis žodis All terms Visi raktiniai žodžiai File name Bylos vardas Query language Užklausų kalba Stemming language Stemming kalba Main Window Main Window Focus to Search Focus to Search Focus to Search, alt. Focus to Search, alt. Clear Search Clear Search Focus to Result Table Focus to Result Table Clear search Clear search Move keyboard focus to search entry Move keyboard focus to search entry Move keyboard focus to search, alt. Move keyboard focus to search, alt. Toggle tabular display Toggle tabular display Move keyboard focus to table Move keyboard focus to table Flushing Naujinimas Show menu search dialog Rodyti meniu paieškos dialogą Duplicates Dublikatai Filter directories Filtruoti katalogus Main index open error: Pagrindinio indekso atidarymo klaida: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Indeksas gali būti sugadintas. Galbūt bandykite paleisti xapian-check arba atstatyti indeksą?. This search is not active anymore Šis paieškos veiksmas daugiau neveikia. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Peržiūros komandinė eilutė skirta %1 nurodo pagrindinį failą, bet URL nėra file:// : nepalaikomas The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Rodyklė, nurodyta mimeview skirta %1: %2, nerasta. Ar norite paleisti nustatymų dialogą? Show advanced search dialog Rodyti išplėstinį paieškos dialogą with additional message: RclMainBase Previous page Prieš tai buvęs puslapis Next page Sekantis puslapis &File &Byla E&xit I&šeiti &Tools &Įrankiai &Help &Pagalba &Preferences &Nustatymai Search tools Paieškos įrankiai Result list Rezultatų sąrašas &About Recoll &Apie Recoll Document &History Dokumentų &Istorija Document History Dokumentų Istorija &Advanced Search &Išsamesnė Paieška Advanced/complex Search Išsamesnė Paieška &Sort parameters &Surūšiuoti parametrai Sort parameters Surūšiuoti parametrus Next page of results Sekantis rezultatų puslapis Previous page of results Ankstesnis rezultatų puslapis &Query configuration &Užklausų nustatymai &User manual &Vartotojo vadovas Recoll Recoll Ctrl+Q Ctrl+Q Update &index Atnaujinti &Indeksą Term &explorer Raktinių žodžių &tyrinėtojas Term explorer tool Raktinių žodžių tyrinėjimo įrankis External index dialog Išorinių indeksų langas &Erase document history &Ištrinti dokumentų istoriją First page Pirmas puslapis Go to first page of results Pereiti į pirmą rezultatų puslapį &Indexing configuration &Indeksavimo nustatymai All Visi &Show missing helpers &Trūkstamos pagalbinės programos PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen &Full Screen F11 F11 Full Screen Full Screen &Erase search history &Erase search history sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Sort by dates from oldest to newest sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Sort by dates from newest to oldest Show Query Details Show Query Details Show results as table Show results as table &Rebuild index &Rebuild index &Show indexed types &Show indexed types Shift+PgUp Shift+PgUp &Indexing schedule &Indexing schedule E&xternal index dialog E&xternal index dialog &Index configuration &Index configuration &GUI configuration &GUI configuration &Results &Results Sort by date, oldest first Sort by date, oldest first Sort by date, newest first Sort by date, newest first Show as table Show as table Show results in a spreadsheet-like table Show results in a spreadsheet-like table Save as CSV (spreadsheet) file Save as CSV (spreadsheet) file Saves the result into a file which you can load in a spreadsheet Saves the result into a file which you can load in a spreadsheet Next Page Next Page Previous Page Previous Page First Page First Page Query Fragments Query Fragments With failed files retrying With failed files retrying Next update will retry previously failed files Next update will retry previously failed files Save last query Save last query Load saved query Load saved query Special Indexing Special Indexing Indexing with special options Indexing with special options Indexing &schedule Indexing &schedule Enable synonyms Enable synonyms &View &View Missing &helpers Missing &helpers Indexed &MIME types Indexed &MIME types Index &statistics Index &statistics Webcache Editor Webcache Editor Trigger incremental pass Trigger incremental pass E&xport simple search history E&xport simple search history Use default dark mode Use default dark mode Dark mode Dark mode &Query &Query Increase results text font size Padidinkite rezultatų teksto šrifto dydį. Increase Font Size Padidinti šrifto dydį Decrease results text font size Sumažinti rezultatų teksto šrifto dydį. Decrease Font Size Sumažinti šrifto dydį Start real time indexer Pradėti realaus laiko indeksatorių Query Language Filters Užklausos kalbos filtrai Filter dates Filter dates Assisted complex search Pagalba sudėtingam paieškos procesui Filter birth dates Filtruoti gimimo datas Switch Configuration... Perjungti konfigūraciją... Choose another configuration to run on, replacing this process Pasirinkite kitą konfigūraciją, kurioje paleisti, pakeisdami šį procesą. &User manual (local, one HTML page) Vartotojo vadovas (vietinis, viena HTML puslapis) &Online manual (Recoll Web site) Interneto vadovas (Recoll tinklalapis) Path translations Kelio vertimai With failed files retrying RclTrayIcon Restore Restore Quit Quit RecollModel Abstract Abstract Author Author Document size Document size Document date Document date File size File size File name Bylos vardas File date File date Ipath Ipath Keywords Keywords Mime type Mime tipas Original character set Original character set Relevancy rating Relevancy rating Title Title URL URL Mtime Mtime Date Data Date and time Date and time MIME type MIME type Can't sort by inverse relevance Can't sort by inverse relevance ResList Result list Rezultatų sąrašas Unavailable document Neprieinamas dokumentas Previous Ankstesnis Next Kitas <p><b>No results found</b><br> <p><b>Nerasta rezultatų</b><br> &Preview &Peržiūra Copy &URL Kopijuoti &URL Find &similar documents Rasti &panašius dokumentus Query details Užklausos detalės (show query) (rodyti užklausą) Copy &File Name Kopijuoti &Bylos vardą filtered išfiltruota sorted surūšiuota Document history Dokumentų istorija Preview Peržiūra Open Atidaryti <p><i>Alternate spellings (accents suppressed): </i> <p><i>Kiti galimi tarimai (be akcentų): </i> &Write to File &Įrašyti į bylą Preview P&arent document/folder Peržiūrėti &Aukštesnio lygio dokumentus/direktorijas &Open Parent document/folder Atidaryti &Aukštesnio lygio dokumentus/direktorijas &Open &Atidaryti Documents Dokumentai out of at least iš bent for for <p><i>Alternate spellings: </i> <p><i>Alternate spellings: </i> Open &Snippets window Open &Snippets window Duplicate documents Duplicate documents These Urls ( | ipath) share the same content: These Urls ( | ipath) share the same content: Result count (est.) Result count (est.) Snippets Snippets This spelling guess was added to the search: Šis rašybos variantas buvo pridėtas prie paieškos: These spelling guesses were added to the search: Šie rašybos spėjimai buvo pridėti prie paieškos: ResTable &Reset sort &Reset sort &Delete column &Delete column Add " Add " " column " column Save table to CSV file Save table to CSV file Can't open/create file: Can't open/create file: &Preview &Peržiūra &Open &Atidaryti Copy &File Name Kopijuoti &Bylos vardą Copy &URL Kopijuoti &URL &Write to File &Įrašyti į bylą Find &similar documents Rasti &panašius dokumentus Preview P&arent document/folder Peržiūrėti &Aukštesnio lygio dokumentus/direktorijas &Open Parent document/folder Atidaryti &Aukštesnio lygio dokumentus/direktorijas &Save as CSV &Save as CSV Add "%1" column Add "%1" column Result Table Result Table Open Atidaryti Open and Quit Open and Quit Preview Peržiūra Show Snippets Show Snippets Open current result document Open current result document Open current result and quit Open current result and quit Show snippets Show snippets Show header Show header Show vertical header Show vertical header Copy current result text to clipboard Copy current result text to clipboard Use Shift+click to display the text instead. Naudokite Shift+paspaudimą, norėdami rodyti tekstą. %1 bytes copied to clipboard %1 baitų nukopijuota į iškarpinę Copy result text and quit Nukopijuokite rezultatų tekstą ir išeikite ResTableDetailArea &Preview &Peržiūra &Open &Atidaryti Copy &File Name Kopijuoti &Bylos vardą Copy &URL Kopijuoti &URL &Write to File &Įrašyti į bylą Find &similar documents Rasti &panašius dokumentus Preview P&arent document/folder Peržiūrėti &Aukštesnio lygio dokumentus/direktorijas &Open Parent document/folder Atidaryti &Aukštesnio lygio dokumentus/direktorijas ResultPopup &Preview &Peržiūra &Open &Atidaryti Copy &File Name Kopijuoti &Bylos vardą Copy &URL Kopijuoti &URL &Write to File &Įrašyti į bylą Save selection to files Save selection to files Preview P&arent document/folder Peržiūrėti &Aukštesnio lygio dokumentus/direktorijas &Open Parent document/folder Atidaryti &Aukštesnio lygio dokumentus/direktorijas Find &similar documents Rasti &panašius dokumentus Open &Snippets window Open &Snippets window Show subdocuments / attachments Show subdocuments / attachments Open With Open With Run Script Run Script SSearch Any term Bet kuris raktinis žodis All terms Visi raktiniai žodžiai File name Bylos vardas Completions Užbaigimai Select an item: Pasirinkti įrašą: Too many completions Per daug galimų užbaigimų Query language Užklausų kalba Bad query string Netinkamai pateikta užklausa Out of memory Nepakanka atminties Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter file name wildcard expression. Enter file name wildcard expression. Enter search terms here. Type ESC SPC for completions of current term. Čia įveskite paieškos raktinius žodžius. Įrašykite ESC SPC rašomo termino užbaigimui. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Stemming languages for stored query: Stemming languages for stored query: differ from current preferences (kept) differ from current preferences (kept) Auto suffixes for stored query: Auto suffixes for stored query: External indexes for stored query: External indexes for stored query: Autophrase is set but it was unset for stored query Autophrase is set but it was unset for stored query Autophrase is unset but it was set for stored query Autophrase is unset but it was set for stored query Enter search terms here. Enter search terms here. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border-collapse: collapse; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; You should really look at the manual (F1)</p> You should really look at the manual (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>What</th><th>Examples</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; where needed</td><td>(one AND two) OR three</td></tr> where needed</td><td>(one AND two) OR three</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Can't open index Could not restore external indexes for stored query:<br> Could not restore external indexes for stored query:<br> ??? ??? Using current preferences. Using current preferences. Simple search Paprastas paieška History Istorija <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Užklausos kalbos atmintinė. Esant abejonėms: spustelėkite <b>Rodyti užklausos informaciją</b>. &nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Didelė raidė, kad būtų slopinamas kamieno plėtimas</td><td>Apatinis lygis</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Išvalyti Ctrl+S Ctrl+S Erase search entry Ištrinti paieškos įrašą Search Ieškoti Start query Pradėti užklausą Enter search terms here. Type ESC SPC for completions of current term. Čia įveskite paieškos raktinius žodžius. Įrašykite ESC SPC rašomo termino užbaigimui. Choose search type. Pasirinkite paieškos tipą. Show query history Show query history Enter search terms here. Enter search terms here. Main menu Main menu SearchClauseW SearchClauseW SearchClauseW Any of these Bet kuris šių All of these Visi šie None of these Nei vienas šių This phrase Ši frazė Terms in proximity Artimi raktiniai žodžiai File name matching Bylos vardą atitinka Select the type of query that will be performed with the words Pasirinkite užklausos tipą atliekamą su žodžiais Number of additional words that may be interspersed with the chosen ones Papildomų žodžių skaičius kurie gali interspersed with the chosen ones In field In field No field No field Any Any All Visi None None Phrase Phrase Proximity Proximity File name Bylos vardas Snippets Snippets Snippets X X Find: Find: Next Kitas Prev Prev SnippetsW Search Ieškoti <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> Sort By Relevance Sort By Relevance Sort By Page Sort By Page Snippets Window Snippets Window Find Find Find (alt) Find (alt) Find Next Find Next Find Previous Find Previous Hide Hide Find next Find next Find previous Find previous Close window Close window Increase font size Padidinti šrifto dydį Decrease font size Sumažinti šrifto dydį SortForm Date Data Mime type Mime tipas SortFormBase Sort Criteria Rūšiavimo kriterijus Sort the Rūšiuoti most relevant results by: tinkamiausi rezultatai pagal: Descending Mažėjimo tvarka Close Uždaryti Apply Pritaikyti SpecIdxW Special Indexing Special Indexing Do not retry previously failed files. Do not retry previously failed files. Else only modified or failed files will be processed. Else only modified or failed files will be processed. Erase selected files data before indexing. Erase selected files data before indexing. Directory to recursively index Directory to recursively index Browse Naršyti Start directory (else use regular topdirs): Start directory (else use regular topdirs): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Selection patterns: Selection patterns: Top indexed entity Top indexed entity Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Retry previously failed files. Retry previously failed files. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnostikos išvesties failas. Bus sutrumpintas ir gaus indeksavimo diagnostiką (priežastys, kodėl failai nebuvo indeksuoti). Diagnostics file Diagnostikos failas SpellBase Term Explorer Raktinių žodžių tyrinėjimas &Expand &Išplėsti Alt+E Alt+E &Close &Uždaryti Alt+C Alt+C Term Raktinis žodis No db info. No db info. Doc. / Tot. Doc. / Tot. Match Match Case Case Accents Accents SpellW Wildcards Wildcards Regexp Regexp Spelling/Phonetic Tarimas/Fonetika Aspell init failed. Aspell not installed? Aspell iššaukimas nepavyko. Aspell programa neįdiegta? Aspell expansion error. Aspell praplėtimų klaida. Stem expansion Stem expansion error retrieving stemming languages error retrieving stemming languages No expansion found Nerasta praplėtimų Term Raktinis žodis Doc. / Tot. Doc. / Tot. Index: %1 documents, average length %2 terms Index: %1 documents, average length %2 terms Index: %1 documents, average length %2 terms.%3 results Index: %1 documents, average length %2 terms.%3 results %1 results %1 results List was truncated alphabetically, some frequent List was truncated alphabetically, some frequent terms may be missing. Try using a longer root. terms may be missing. Try using a longer root. Show index statistics Show index statistics Number of documents Number of documents Average terms per document Average terms per document Smallest document length Smallest document length Longest document length Longest document length Database directory size Database directory size MIME types: MIME types: Item Item Value Value Smallest document length (terms) Smallest document length (terms) Longest document length (terms) Longest document length (terms) Results from last indexing: Results from last indexing: Documents created/updated Documents created/updated Files tested Files tested Unindexed files Unindexed files List files which could not be indexed (slow) List files which could not be indexed (slow) Spell expansion error. Spell expansion error. Spell expansion error. Rašybos plėtros klaida. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index Atrodo, jog pasirinkta direktorija nėra Xapian indekso direktorija This is the main/local index! Pagrindinis/localus indekas! The selected directory is already in the index list Pasirinkta direktorija jau yra indekso sąraše Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Pasirinkite Xapian indekso direktoriją (pav: /home/buddy/.recoll/xapiandb) error retrieving stemming languages error retrieving stemming languages Choose Naršyti Result list paragraph format (erase all to reset to default) Result list paragraph format (erase all to reset to default) Result list header (default is empty) Result list header (default is empty) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read The selected directory looks like a Recoll configuration directory but the configuration could not be read At most one index should be selected At most one index should be selected Cant add index with different case/diacritics stripping option Cant add index with different case/diacritics stripping option Default QtWebkit font Default QtWebkit font Any term Bet kuris raktinis žodis All terms Visi raktiniai žodžiai File name Bylos vardas Query language Užklausų kalba Value from previous program exit Value from previous program exit Context Context Description Description Shortcut Shortcut Default Default Choose QSS File Pasirinkite QSS failą Can't add index with different case/diacritics stripping option. Negalima pridėti indekso su skirtingu didžiųjų/mažųjų raidžių ar diakritinių ženklų pašalinimo parinktimi. Light Šviesa Dark Tamsus System Sistema UIPrefsDialogBase User interface Vartotoja aplinka Number of entries in a result page Įrašų skaičius rezultatų puslapyje Result list font Rezultatų sąrašo šriftas Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Pasirinkite rezultatų sąrašo šriftą Reset Gražinti numatytąją formą Resets the result list font to the system default Gražina numatytąją rezultatų sąrašo srifto vertę Auto-start simple search on whitespace entry. Pradėti paprastąją paiešką įvedus tuščio tarpelio simoblį. Start with advanced search dialog open. Pradėti nuo išsamesnės paieškos lango. Start with sort dialog open. Pradėti su atidarytu rūšiavimo langu. Search parameters Paieškos parametrai Stemming language Stemming kalba Dynamically build abstracts Dinamiškai sukurti santraukas Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Ar pabandome sukurti santraukas remdamiesi užklausų raktinių žodžių kontekstu? Didelės apimties dokumentams gali lėtai veikti. Replace abstracts from documents Pakeisti dokumentuose randamas santraukas Do we synthetize an abstract even if the document seemed to have one? Ar sukuriame dirbtinę santrauką, jei dokumente jau ji yra? Synthetic abstract size (characters) Dirbtinės santraukos dydis (simbolių skaičius) Synthetic abstract context words Dirbtinės santraukos konteksto žodžiai External Indexes Išoriniai indeksai Add index Pridėti indeksą Select the xapiandb directory for the index you want to add, then click Add Index Pasirinkti xapiandb direktoriją kurios indeką norite pridėti, tada paspauskite Pridėti Indeksą Browse Naršyti &OK &Gerai Apply changes Pritaikyti pakeitimus &Cancel &Atšaukti Discard changes Panaikinti pakeitimus Result paragraph<br>format string Rezultatų paragrafo<br>formatas Automatically add phrase to simple searches Pridėti prie paprastos paieškos frazę A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Paieška bus pakeista (pav. rolling stones -> rolling or stones or (rolling phrase 2 stones)). Teikiama aiški pirmenybė rezultatams kuriuose rasti raktiniai žodžiai atitinka įvestus. User preferences Vartotojo nustatymai Use desktop preferences to choose document editor. Naudoti darbalaukio nustatymus parenkant dokumentų redaktorių. External indexes Išoriniai indeksai Toggle selected Įjungti/Išjungti pasirinktą Activate All Visus aktyvuoti Deactivate All Visus deaktyvuoti Remove selected Pažymėtus pašalinti Remove from list. This has no effect on the disk index. Pašalinti iš sąrašo. Neturi jokio poveikio indeksui diske. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Apibūdina kiekvieno rezultatų įrašo formatą:<br>%A Santrauka<br> %D Data<br> %I Ikona<br> %K Raktiniai žodžiai (jei yra)<br> %L Peržiūros ir Redagavimo nuorodos<br> %M Mime tipai<br> %N Rezultų skaičius<br> %R Tinkamumas procentais<br> %S Informacija apie dydį<br> %T Pavadinimas<br> %U Url<br> Remember sort activation state. Įsiminti rūšiavimo pasirinkimus (nedings perkrovus). Maximum text size highlighted for preview (megabytes) Didžiausia teksto, pažymėto peržiūrai, apimtis (megabaitai) Texts over this size will not be highlighted in preview (too slow). Tekstai viršijantys šį dydį nebus nuspalvinami peržiūros metu (per didelė apkrova). Highlight color for query terms Užklausų raktinių žodžių žymėjimo spalvos Prefer Html to plain text for preview. Pirmenybę teikti Html formatui peržiūros metu. If checked, results with the same content under different names will only be shown once. Pažymėjus, bus rodoma tik viena iš bylų su tuo pačiu turiniu, tačiau skirtingais vardais. Hide duplicate results. Slėpti pasikartojančius rezultatus. Choose editor applications Pasirinkite redaktorių programas Display category filter as toolbar instead of button panel (needs restart). Kategorijų filtrą rodyti kaip įrankų juostą (reikalauja perkrovimo). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Query language magic file name suffixes. Query language magic file name suffixes. Enable Enable ViewAction Changing actions with different current values Pakeisti veiksmus su skirtingomis dabartinėmis vertėmis Mime type Mime tipas Command Command MIME type MIME type Desktop Default Desktop Default Changing entries with different current values Changing entries with different current values ViewActionBase File type Bylos tipas Action Veiksmas Select one or several file types, then click Change Action to modify the program used to open them Pasirinkite vieną ar kelis bylų tipus, tada paspauskite Keisti Veiksmus norėdami keisti kaip programa juos atidaro Change Action Pakeisti veiksmą Close Uždaryti Native Viewers Sistemos peržiūros programos Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Pasirinkite vieną ar kelis mime tipus tada spauskite "Keisti Veiksmus"<br>Taip pat galite uždaryti šį langą ir patikrinti "Naudoti darbalaukio nustatymus"<br>pagrindinėje panelėje? norėdami ignoruoti šį sąrašą ir naudoti numatytasias darbalaukio. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Use Desktop preferences by default Use Desktop preferences by default Select one or several file types, then use the controls in the frame below to change how they are processed Select one or several file types, then use the controls in the frame below to change how they are processed Exception to Desktop preferences Exception to Desktop preferences Action (empty -> recoll default) Action (empty -> recoll default) Apply to current selection Apply to current selection Recoll action: Recoll action: current value current value Select same Select same <b>New Values:</b> <b>New Values:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Reikšmė yra vykdomas komandinė eilutė. Pakeitimai: %s: paieškos eilutė; %p: puslapio numeris; <br>%f: dokumento failo pavadinimas. F1 daugiau pagalbos. Webcache Webcache editor Webcache editor Search regexp Search regexp TextLabel Teksto etiketė WebcacheEdit Copy URL Copy URL Unknown indexer state. Can't edit webcache file. Unknown indexer state. Can't edit webcache file. Indexer is running. Can't edit webcache file. Indexer is running. Can't edit webcache file. Delete selection Delete selection Webcache was modified, you will need to run the indexer after closing this window. Webcache was modified, you will need to run the indexer after closing this window. Save to File Išsaugoti į failą File creation failed: Failo kūrimas nepavyko: Maximum size %1 (Index config.). Current size %2. Write position %3. Maksimalus dydis %1 (Indeksų konfig.). Dabartinis dydis %2. Rašymo pozicija %3. WebcacheModel MIME MIME Url Url Date Data Size Dydis URL URL WinSchedToolW Error Error Configuration not initialized Configuration not initialized <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> Command already started Command already started Recoll Batch indexing Recoll Batch indexing Start Windows Task Scheduler tool Start Windows Task Scheduler tool Could not create batch file Nepavyko sukurti partijos failo confgui::ConfBeaglePanelW Steal Beagle indexing queue Įtraukti Beagle paruoštus duomenis Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) BEAGLE programa TURI neveikti. Įgalina peržiūrėti beagle paruoštą medžiagą bandant indeksuoti Firefox naršymo<br> istoriją (papildomai reikia įdiegti Firefox Beagle priedą) Web cache directory name Naršymo tinkle cache direktorijos vardas The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Direktorijos, kurioje saugoma lankytų tinklo svetainių cache, vardas.<br>Santykinis kelias prasideda nuo nustatymų direktorijos. Max. size for the web cache (MB) Didžiausias tinklo naršymo cache dydis (MB) Entries will be recycled once the size is reached Įrašai bus trinami pasiekus nurodytą dydį Web page store directory name Web page store directory name The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Max. size for the web store (MB) Max. size for the web store (MB) Process the WEB history queue Process the WEB history queue Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). confgui::ConfIndexW Can't write configuration file Nepavyksta įrašyti nustatymų bylos Recoll - Index Settings: Recoll - Index Settings: confgui::ConfParamFNW Browse Naršyti Choose Naršyti confgui::ConfParamSLW + + - - Add entry Add entry Delete selected entries Delete selected entries ~ ~ Edit selected entries Edit selected entries confgui::ConfSearchPanelW Automatic diacritics sensitivity Automatic diacritics sensitivity <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. Automatic character case sensitivity Automatic character case sensitivity <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. Maximum term expansion count Maximum term expansion count <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. Maximum Xapian clauses count Maximum Xapian clauses count <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. confgui::ConfSubPanelW Global Globalus Max. compressed file size (KB) Didžiausias suspaustų bylų dydis (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Viršijus pasirinktą suspaustų bylų dydį, jie nebus indeksuojami. Pasirinkite -1 jei nenorite nurodyti ribos, 0, jei nenorite, jog suspaustos bylos būtų indeksuojamos. Max. text file size (MB) Didžiausias tekstinės bylos dydis (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Viršijus pasirinktą tekstinių bylų dydį, jie nebus indeksuojami. Pasirinkite -1 jei nenorite nurodyti ribos, 0, jei nenorite, jog suspaustos bylos būtų indeksuojamos. Text file page size (KB) Tekstinės bylos dydis (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Jei vertė nurodyta (nelgyi -1) tekstinės bylos bus suskaidytos į nurodyto dydžio bylas, kurios bus atskirai indeksuojamos. Naudinga atliekant paiešką labai dideliose tekstinėse bylose (pav. log bylose). Max. filter exec. time (S) Ilgiausias filtrų veikimo laikas (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Išorinių filtrų, dirbančių ilgiau nei numatyta, darbas bus nutraukiamas. Taikoma retiems atvejas (pav. postscript) kada dokumentas galėtų priversti filtrą kartoti veiksmus be galo ilgai. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Only mime types Only mime types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Exclude mime types Exclude mime types Mime types not to be indexed Mime types not to be indexed Max. filter exec. time (s) Max. filter exec. time (s) confgui::ConfTabsW Apply Pritaikyti confgui::ConfTopPanelW Top directories Aukščiausio lygmens direktorijos<br>kuriose vykdomas indeksavimas The list of directories where recursive indexing starts. Default: your home. Direktorijų, kuriose pradedamas rekursinis indeksavimas, sąrašas. Numatytoji: namų direktorija. Skipped paths Direktorijų, kurių turinys nein-<br>deksuojamas, sąrašas These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Direktorijų, kurių turinys nebus indeksuojamas, vardai.<br> Vardo dalis gali būti wildcards. Turi atitikti programos matomus kelius iki direktorijų (pav. jei indeksuoti pradedama nuo '/home/me', o '/home' yra nuoroda į '/usr/home', teisinga vertė bus '/home/me/tmp*', o ne '/usr/home/me/tm*') Stemming languages Kalbos naudojamos stemming<br> procesui The languages for which stemming expansion<br>dictionaries will be built. Kalbos, kurioms bus sukurti stemming <br>expansion žodynai. Log file name Log bylos vardas The file where the messages will be written.<br>Use 'stderr' for terminal output Byla, kurioje bus įrašomos žinutės.<br>Naudokite 'stderr' norėdami išvesti į terminalo langą Log verbosity level Log išsamumo lygmuo This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Vertė nustato žiniučių apimtį, nuo vien tik <br>klaidų fiksavimo iki didelės apimties duomenų skirtų debugging. Index flush megabytes interval Indekso dalių, įrašomų į diską, dydis (MB) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Vertė nustato duomenų, kurie indeksuojami tarp įrašymo į diską, apimtį.<br>Padeda valdyti indeksavimo dalies atminties naudojimą. Numatyta vertė yra 10 MB Max disk occupation (%) Didžiausia disko atminties naudojimo dalis (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Viršijus (procentine išraiška) disko atminties panaudojimą indeksavimas bus sustabdytas (vengiant pilnai užpildyti diską).<br>0 reiškia, jog ribos nėra (numatytoji vertė). No aspell usage Aspell nebus naudojama Aspell language Aspell kalba The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Aspell žodyno kalba ('en', 'fr' ar kita).<br>Jei vertė nenurodyta NLS aplinka pabandys nustatyti tinkamą kalbą (paprastai teisingai). Norėdami sužinoti kas įrašyta Jūsų sistemoje įrašykite 'aspell-config' ir žiūrėkite į dat bylas 'data-dir' direktorijoje. Database directory name Duomenų bazės direktorijos vardas The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Direktorijos, kurioje bus saugomas indeksas, vardas<br>Laikoma, jog santykinio keliio iki direktorijos pradžia yra nustatymų direktorija. Numatytoji yra 'xapiandb'. Use system's 'file' command Naudoti sistemos 'file' komandą Use the system's 'file' command if internal<br>mime type identification fails. Jei nepavyks atpažinti mime tipo<br>naudoti sistemos 'file' komandą. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Nurodo nenaudoti aspell programos kuriant tarimo aproksimacijas raktinių žodžių tyrinėjimo įrankyje.<br>Naudinga, jei aspell neveikia arba neįdiegta. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Unac exceptions Unac exceptions <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Max disk occupation (%, 0 means no limit) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. uiPrefsDialogBase User preferences Vartotojo nustatymai User interface Vartotoja aplinka Number of entries in a result page Įrašų skaičius rezultatų puslapyje If checked, results with the same content under different names will only be shown once. Pažymėjus, bus rodoma tik viena iš bylų su tuo pačiu turiniu, tačiau skirtingais vardais. Hide duplicate results. Slėpti pasikartojančius rezultatus. Highlight color for query terms Užklausų raktinių žodžių žymėjimo spalvos Result list font Rezultatų sąrašo šriftas Opens a dialog to select the result list font Pasirinkite rezultatų sąrašo šriftą Helvetica-10 Helvetica-10 Resets the result list font to the system default Gražina numatytąją rezultatų sąrašo srifto vertę Reset Gražinti numatytąją formą Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Apibūdina kiekvieno rezultatų įrašo formatą:<br>%A Santrauka<br> %D Data<br> %I Ikona<br> %K Raktiniai žodžiai (jei yra)<br> %L Peržiūros ir Redagavimo nuorodos<br> %M Mime tipai<br> %N Rezultų skaičius<br> %R Tinkamumas procentais<br> %S Informacija apie dydį<br> %T Pavadinimas<br> %U Url<br> Result paragraph<br>format string Rezultatų paragrafo<br>formatas Texts over this size will not be highlighted in preview (too slow). Tekstai viršijantys šį dydį nebus nuspalvinami peržiūros metu (per didelė apkrova). Maximum text size highlighted for preview (megabytes) Didžiausia teksto, pažymėto peržiūrai, apimtis (megabaitai) Use desktop preferences to choose document editor. Naudoti darbalaukio nustatymus parenkant dokumentų redaktorių. Choose editor applications Pasirinkite redaktorių programas Display category filter as toolbar instead of button panel (needs restart). Kategorijų filtrą rodyti kaip įrankų juostą (reikalauja perkrovimo). Auto-start simple search on whitespace entry. Pradėti paprastąją paiešką įvedus tuščio tarpelio simoblį. Start with advanced search dialog open. Pradėti nuo išsamesnės paieškos lango. Start with sort dialog open. Pradėti su atidarytu rūšiavimo langu. Remember sort activation state. Įsiminti rūšiavimo pasirinkimus (nedings perkrovus). Prefer Html to plain text for preview. Pirmenybę teikti Html formatui peržiūros metu. Search parameters Paieškos parametrai Stemming language Stemming kalba A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Paieška bus pakeista (pav. rolling stones -> rolling or stones or (rolling phrase 2 stones)). Teikiama aiški pirmenybė rezultatams kuriuose rasti raktiniai žodžiai atitinka įvestus. Automatically add phrase to simple searches Pridėti prie paprastos paieškos frazę Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Ar pabandome sukurti santraukas remdamiesi užklausų raktinių žodžių kontekstu? Didelės apimties dokumentams gali lėtai veikti. Dynamically build abstracts Dinamiškai sukurti santraukas Do we synthetize an abstract even if the document seemed to have one? Ar sukuriame dirbtinę santrauką, jei dokumente jau ji yra? Replace abstracts from documents Pakeisti dokumentuose randamas santraukas Synthetic abstract size (characters) Dirbtinės santraukos dydis (simbolių skaičius) Synthetic abstract context words Dirbtinės santraukos konteksto žodžiai The words in the list will be automatically turned to ext:xxx clauses in the query language entry. The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Query language magic file name suffixes. Query language magic file name suffixes. Enable Enable External Indexes Išoriniai indeksai Toggle selected Įjungti/Išjungti pasirinktą Activate All Visus aktyvuoti Deactivate All Visus deaktyvuoti Remove from list. This has no effect on the disk index. Pašalinti iš sąrašo. Neturi jokio poveikio indeksui diske. Remove selected Pažymėtus pašalinti Click to add another index directory to the list Click to add another index directory to the list Add index Pridėti indeksą Apply changes Pritaikyti pakeitimus &OK &Gerai Discard changes Panaikinti pakeitimus &Cancel &Atšaukti Abstract snippet separator Abstract snippet separator Use <PRE> tags instead of <BR>to display plain text as html. Use <PRE> tags instead of <BR>to display plain text as html. Lines in PRE text are not folded. Using BR loses indentation. Lines in PRE text are not folded. Using BR loses indentation. Style sheet Style sheet Opens a dialog to select the style sheet file Opens a dialog to select the style sheet file Choose Naršyti Resets the style sheet to default Resets the style sheet to default Lines in PRE text are not folded. Using BR loses some indentation. Lines in PRE text are not folded. Using BR loses some indentation. Use <PRE> tags instead of <BR>to display plain text as html in preview. Use <PRE> tags instead of <BR>to display plain text as html in preview. Result List Result List Edit result paragraph format string Edit result paragraph format string Edit result page html header insert Edit result page html header insert Date format (strftime(3)) Date format (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Autophrase term frequency threshold percentage Autophrase term frequency threshold percentage Plain text to HTML line style Plain text to HTML line style Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + wrap Exceptions Exceptions Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Disable Qt autocompletion in search entry. Disable Qt autocompletion in search entry. Search as you type. Search as you type. Paths translations Paths translations Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Snippets window CSS file Snippets window CSS file Opens a dialog to select the Snippets window CSS style sheet file Opens a dialog to select the Snippets window CSS style sheet file Resets the Snippets window style Resets the Snippets window style Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Document filter choice style: Document filter choice style: Buttons Panel Buttons Panel Toolbar Combobox Toolbar Combobox Menu Menu Show system tray icon. Show system tray icon. Close to tray instead of exiting. Close to tray instead of exiting. Start with simple search mode Start with simple search mode Show warning when opening temporary file. Show warning when opening temporary file. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Synonyms file Synonyms file Highlight CSS style for query terms Highlight CSS style for query terms Recoll - User Preferences Recoll - User Preferences Set path translations for the selected index or for the main one if no selection exists. Set path translations for the selected index or for the main one if no selection exists. Activate links in preview. Activate links in preview. Make links inside the preview window clickable, and start an external browser when they are clicked. Make links inside the preview window clickable, and start an external browser when they are clicked. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Start search on completer popup activation. Start search on completer popup activation. Maximum number of snippets displayed in the snippets window Maximum number of snippets displayed in the snippets window Sort snippets by page number (default: by weight). Sort snippets by page number (default: by weight). Suppress all beeps. Suppress all beeps. Application Qt style sheet Application Qt style sheet Limit the size of the search history. Use 0 to disable, -1 for unlimited. Limit the size of the search history. Use 0 to disable, -1 for unlimited. Maximum size of search history (0: disable, -1: unlimited): Maximum size of search history (0: disable, -1: unlimited): Generate desktop notifications. Generate desktop notifications. Misc Misc Work around QTBUG-78923 by inserting space before anchor text Work around QTBUG-78923 by inserting space before anchor text Display a Snippets link even if the document has no pages (needs restart). Display a Snippets link even if the document has no pages (needs restart). Maximum text size highlighted for preview (kilobytes) Maximum text size highlighted for preview (kilobytes) Start with simple search mode: Start with simple search mode: Hide toolbars. Hide toolbars. Hide status bar. Hide status bar. Hide Clear and Search buttons. Hide Clear and Search buttons. Hide menu bar (show button instead). Hide menu bar (show button instead). Hide simple search type (show in menu only). Hide simple search type (show in menu only). Shortcuts Shortcuts Hide result table header. Hide result table header. Show result table row headers. Show result table row headers. Reset shortcuts defaults Reset shortcuts defaults Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Use F1 to access the manual Use F1 to access the manual Hide some user interface elements. Paslėpti kai kuriuos vartotojo sąsajos elementus. Hide: Slėpti: Toolbars Įrankių juostos Status bar Būsenos juosta Show button instead. Rodyti mygtuką vietoj to. Menu bar Meniu juosta Show choice in menu only. Rodyti pasirinkimą tik meniu. Simple search type Simple search type Clear/Search buttons Valyti/Ieškoti mygtukai Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Išjunkite Ctrl+[0-9]/Shift+[a-z] klavišų kombinacijas, skirtas pereiti prie lentelės eilučių. None (default) Nėra (numatyta) Uses the default dark mode style sheet Naudoti numatytąjį tamsaus režimo stiliaus lapą Dark mode Dark mode Choose QSS File Pasirinkite QSS failą To display document text instead of metadata in result table detail area, use: Norėdami rodyti dokumento tekstą vietoj metaduomenų rezultatų lentelės detalioje srityje, naudokite: left mouse click kairysis pelės mygtukas Shift+click Paspauskite ir laikykite mygtuką Shift, tada paspauskite mygtuką. Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Atidaro dialogo langą, skirtą pasirinkti stiliaus lapo failą.<br>Pažiūrėkite į /usr/share/recoll/examples/recoll[-dark].qss pavyzdžiui. Result Table Result Table Do not display metadata when hovering over rows. Nerodyti metaduomenų, kai užvedamas pelės žymeklis ant eilučių. Work around Tamil QTBUG-78923 by inserting space before anchor text Išspręskite Tamil QTBUG-78923, įterpdami tarpą prieš saitų tekstą. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Klaida sukelia keistus apskritimus simbolius, kurie rodomi paryškintuose tamilų žodžiuose. Laikinas sprendimas įterpia papildomą tarpą, kuri atrodo ištaiso problemą. Depth of side filter directory tree Šoninio filtro katalogo medžio gylis Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Priartinimo veiksnys naudotojo sąsajai. Naudinga, jei numatytasis nėra tinkamas jūsų ekrano raiškai. Display scale (default 1.0): Rodymo mastelis (numatytasis 1.0): Automatic spelling approximation. Automatinis rašybos artinimas. Max spelling distance Maksimalus rašybos atstumas Add common spelling approximations for rare terms. Pridėkite dažnai naudojamus rašybos artinimus retiems terminams. Maximum number of history entries in completer list Maksimalus istorijos įrašų skaičius užbaigimo sąraše Number of history entries in completer: Istorijos įrašų skaičius užbaigiklyje: Displays the total number of occurences of the term in the index Rodo visą termino pasikartojimų skaičių indekse. Show hit counts in completer popup. Rodyti atitikmenų skaičių iššokančiame lange. Prefer HTML to plain text for preview. Rinkitės HTML, o ne gryną tekstą peržiūrai. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Žr. Qt QDateTimeEdit dokumentaciją. Pvz., yyyy-MM-dd. Palikite tuščią, jei norite naudoti numatytąjį Qt/Sistemos formatą. Side filter dates format (change needs restart) Šoninis filtro datos formatas (pakeitimai reikalauja paleidimo iš naujo) If set, starting a new instance on the same index will raise an existing one. Jei nustatyta, paleidus naują egzempliorių toje pačioje indekso vietoje, bus pakeltas jau esantis. Single application Vienas programos Set to 0 to disable and speed up startup by avoiding tree computation. Nustatykite į 0, kad išjungtumėte ir pagreitumėte paleidimą, vengdami medžio skaičiavimo. The completion only changes the entry when activated. Užbaigimas keičia įrašą tik tuomet, kai jis yra aktyvuotas. Completion: no automatic line editing. Užbaigimas: automatinio eilučių redagavimo nėra. Interface language (needs restart): Vartotojo sąsajos kalba (reikalingas paleidimas iš naujo): Note: most translations are incomplete. Leave empty to use the system environment. Pastaba: dauguma vertimų yra nepilni. Palikite tuščią, jei norite naudoti sistemos aplinką. Preview Peržiūra Set to 0 to disable details/summary feature Nustatykite į 0, norėdami išjungti detalų/sumos funkciją. Fields display: max field length before using summary: Laukų rodymas: maksimalus lauko ilgis prieš naudojant santrauką. Number of lines to be shown over a search term found by preview search. Eilučių skaičius, kuris bus rodomas virš paieškos raktažodžio, rasto per peržiūros paiešką. Search term line offset: Paieškos termino eilutės poslinkis: Wild card characters *?[] will processed as punctuation instead of being expanded Lauko ženklai *?[] bus apdoroti kaip skyrybos ženklai, o ne išplėsti. Ignore wild card characters in ALL terms and ANY terms modes Ignoruokite laukinius simbolius visuose terminuose ir bet kuriuose terminuose režimuose. Color scheme Spalvų schema When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Rodydami HTML tamsiuoju režimu, bandykite naudoti tamsų foną (ir šviesią spalvą). Tai prieštarauja daugeliui dokumentų, kurie perrašys mūsų šviesų nustatymą savo CSS (tamsia) priekinės spalvos, rezultatu būdamas neįskaitomas dokumentas, todėl pagal nutylėjimą tai yra išjungta. Use dark background when displaying HTML in dark mode. Naudokite tamsų foną rodydami HTML tamsiuoju režimu. recoll-1.43.12/qtgui/i18n/recoll_ar.ts0000644000175000017500000072631015124431112016671 0ustar dockesdockes ActSearchDLG Menu search بحث في القائمة AdvSearch All clauses جميع الشروط Any clause أي شرط text نص texts النصوص spreadsheet جدول بيانات spreadsheets جداول البيانات presentation العرض media وسائل الإعلام message رسالة other آخر Advanced Search البحث المتقدم Load next stored search تحميل البحث المخزن التالي Load previous stored search تحميل البحث المخزن السابق Bad multiplier suffix in size filter لاحظ: Bad multiplier suffix in size filter تنبيه: لاحظ تعذر الضرب النهائي في عامل تصفية الحجم AdvSearchBase Advanced search البحث المتقدم Find ابحث All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. سيتم دمج جميع الحقول غير الفارغة على اليمين مع عمليات الربط AND ("خيار جميع الشروط") أو OR ("خيار أي شرط"). <br> يمكن لأنواع الحقول "أي"، "جميع" و"لا شيء" قبول مزيج من الكلمات البسيطة والعبارات المحاطة بعلامات اقتباس مزدوجة. <br> يتم تجاهل الحقول التي لا تحتوي على بيانات. Search for <br>documents<br>satisfying: البحث عن <br>المستندات<br>التي تفي بالشروط: Delete clause حذف البند Add clause إضافة شرط Filter تصفية Check this to enable filtering on dates تحقق من هذا لتمكين تصفية التواريخ Filter dates تصفية التواريخ From من To إلى Filter birth dates تصفية تواريخ الميلاد Check this to enable filtering on sizes تحقق من هذا لتمكين التصفية حسب الأحجام Filter sizes حجم الفلتر Minimum size. You can use k/K,m/M,g/G as multipliers الحد الأدنى للحجم. يمكنك استخدام k/K، m/M، g/G كعوامل مضاعفة Min. Size الحد الأدنى من الحجم Maximum size. You can use k/K,m/M,g/G as multipliers الحجم الأقصى. يمكنك استخدام k/K، m/M، g/G كضربات. Max. Size الحد الأقصى للحجم Check this to enable filtering on file types تحقق من هذا لتمكين تصفية أنواع الملفات Restrict file types قيد أنواع الملفات Check this to use file categories instead of raw mime types تحقق من هذا لاستخدام فئات الملفات بدلاً من أنواع الوسائط النصية الخام By categories حسب الفئات Save as default حفظ كإعداد افتراضي Searched file types أنواع الملفات المبحوثة All ----> الكل Sel -----> سيل <----- Sel البحث ------> <----- All <----- الكل Ignored file types أنواع الملفات المتجاهلة Enter top directory for search أدخل المجلد الرئيسي للبحث Browse تصفح Restrict results to files in subtree: قيد النتائج إلى الملفات في الشجرة الفرعية: Invert عكس Start Search ابدأ البحث Close إغلاق ConfIndexW Can't write configuration file لا يمكن كتابة ملف التكوين Global parameters المعلمات العالمية Local parameters المعلمات المحلية Web history تاريخ الويب Search parameters معايير البحث Start folders بدء المجلدات The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. قائمة المجلدات/الدلائل التي يجب فهرستها، بشكل تكراري مع مجلداتها الفرعية. يمكن للرمز "~" التوسع إلى مجلد المنزل الخاص بك، وهو القيمة الافتراضية الأولية. Skipped paths المسارات المتخطاة These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') هذه هي مسارات الدلائل التي لن يدخلها التجهيز.<br>قد تحتوي عناصر المسار على رموز بدائية. يجب أن تتطابق الإدخالات مع المسارات التي يراها المجهر (على سبيل المثال: إذا كانت topdirs تتضمن '/home/me' و '/home' في الواقع رابط إلى '/usr/home'، فإن إدخال skippedPath الصحيح سيكون '/home/me/tmp*'، وليس '/usr/home/me/tmp*') Stemming languages لغات التقليم The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... اللغات التي سيتم بناء قواميس التوسيع لها. انظر إلى وثائق مقطع الكلمات في Xapian للقيم الممكنة. على سبيل المثال، الإنجليزية، الفرنسية، الألمانية... Log file name اسم ملف السجل The file where the messages will be written.<br>Use 'stderr' for terminal output الملف الذي سيتم كتابة الرسائل فيه.<br>استخدم 'stderr' لإخراج الطرفية Log verbosity level مستوى تفصيل السجلات This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. تعديل هذه القيمة يعدل كمية الرسائل، من الأخطاء فقط إلى الكثير من بيانات التصحيح. Indexer log file name اسم ملف سجل المؤشر If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. إذا كانت فارغة، سيتم استخدام قيمة اسم ملف السجل أعلاه. قد يكون من المفيد أن يكون لديك سجل منفصل لأغراض التشخيص لأن السجل الشائع سيتم مسحه عند بدء تشغيل واجهة المستخدم الرسومية. Index flush megabytes interval فهرس تفريغ ميغابايت فاصل زمني This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB تعديل هذه القيمة يحدد كمية البيانات التي يتم فهرستها بين عمليات تفريغها إلى القرص.<br>هذا يساعد في التحكم في استخدام ذاكرة المؤشر. القيمة الافتراضية 10 ميجابايت. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) نسبة الحد الأقصى للقرص الممتلئ عندما نتوقف عن فهرسة البيانات (مثال: 90 للتوقف عند 90% ممتلئ، 0 أو 100 يعني عدم وجود حد) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. هذه هي نسبة استخدام القرص - إجمالي استخدام القرص، وليس حجم الفهرس - التي ستفشل فيها عملية الفهرسة والتوقف.<br>القيمة الافتراضية هي 0 وتزيل أي حدود. Suspend the real time indexer when running on battery تعليق مؤشر الوقت الحقيقي عند تشغيل الجهاز على البطارية The indexer will wait for a return on AC and reexec itself when it happens سينتظر المؤشر على عودة على AC وسيقوم بإعادة تنفيذ نفسه عند حدوث ذلك. No aspell usage عدم استخدام aspell (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. (by default, aspell suggests mispellings when a query has no results). (افتراضيًا، يقترح aspell الأخطاء الإملائية عندما لا توجد نتائج للاستعلام). Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. يعطل استخدام aspell لإنشاء تقريب للإملاء في أداة استكشاف المصطلحات. مفيد إذا كان aspell غير متوفر أو لا يعمل. Aspell language لغة Aspell The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. اللغة لقاموس aspell. القيم هي رموز لغة مكونة من حرفين، على سبيل المثال 'en'، 'fr' ...<br>إذا لم يتم تعيين هذه القيمة، سيتم استخدام بيئة NLS لحسابها، والتي عادة ما تعمل. للحصول على فكرة عن ما هو مثبت على نظامك، اكتب 'aspell config' وابحث عن ملفات .dat داخل دليل 'data-dir'. Database directory name اسم دليل قاعدة البيانات The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. الاسم لدليل حفظ الفهرس يتم اتخاذ المسار غير المطلق بالنسبة إلى دليل التكوين. الافتراضي هو 'xapiandb'. Unac exceptions استثناءات Unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. هذه استثناءات من آلية إزالة العلامات التشكيلية التي تقوم بإزالة جميع العلامات التشكيلية بشكل افتراضي، وتقوم بتحليل كانوني. يمكنك تجاوز عملية إزالة العلامات التشكيلية لبعض الحروف، اعتمادًا على لغتك، وتحديد تحليلات إضافية، على سبيل المثال للربطات. في كل إدخال مفصول بمسافة، الحرف الأول هو الحرف المصدري، والبتة هي الترجمة. Process the Web history queue معالجة طابور تاريخ الويب Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) يمكنك تفعيل فهرسة صفحات Firefox التي تم زيارتها. (يجب أيضًا تثبيت إضافة Firefox Recoll) Web page store directory name اسم دليل متجر الصفحة الإلكترونية The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. الاسم لدليل حيث يتم تخزين نسخ من صفحات الويب التي تم زيارتها. يتم اتخاذ مسار غير مطلق بالنسبة إلى دليل التكوين. Max. size for the web store (MB) الحد الأقصى لحجم المتجر الإلكتروني (ميجابايت) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). سيتم إعادة تدوير الإدخالات بمجرد الوصول إلى الحجم المحدد. الزيادة فقط في الحجم تجعل فعلاً معنى لأن تقليل القيمة لن يقوم بقص ملف موجود (سيؤدي فقط إلى إهدار المساحة في النهاية). Page recycle interval فترة إعادة تحميل الصفحة <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. بشكل افتراضي، يتم الاحتفاظ بنسخة واحدة فقط من عنوان URL في الذاكرة المؤقتة. يمكن تغيير هذا عن طريق تعيين قيمة تحدد تردد الاحتفاظ بعدة نسخ ('يوم'، 'أسبوع'، 'شهر'، 'سنة'). يرجى ملاحظة أن زيادة الفاصل الزمني لن تمحو الإدخالات الحالية. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 ملاحظة: سيتم مسح الصفحات القديمة لإفساح المجال للصفحات الجديدة عند الوصول إلى الحجم الأقصى. الحجم الحالي: %1 Browser add-on download folder مجلد تنزيل إضافة المتصفح Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) قم بتعيين هذا فقط إذا قمت بتعيين معلمة "الدليل الفرعي للتنزيلات" في إعدادات إضافة متصفح الويب. <br> في هذه الحالة، يجب أن يكون المسار الكامل إلى الدليل (على سبيل المثال /home/[me]/Downloads/my-subdir) Automatic diacritics sensitivity حساسية التشكيل التلقائي <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. تفعيل حساسية الحركات تلقائيًا إذا كانت كلمة البحث تحتوي على حروف ملونة (ليست ضمن unac_except_trans). وإلا، يجب عليك استخدام لغة الاستعلام والمعدل <i>D</i> لتحديد حساسية الحركات. Automatic character case sensitivity حساسية حالة الأحرف التلقائية <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>تفعيل حساسية حالة الأحرف تلقائيًا إذا كانت الإدخال تحتوي على أحرف كبيرة في أي مكان غير الموقع الأول. وإلا، يجب عليك استخدام لغة الاستعلام والمعدل <i>C</i> لتحديد حساسية حالة الأحرف. Maximum term expansion count الحد الأقصى لعدد توسيع المصطلحات <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. الحد الأقصى لعدد التوسيع لمصطلح واحد (على سبيل المثال: عند استخدام البدائل). القيمة الافتراضية هي 10،000 وهي معقولة وستجنب الاستعلامات التي تبدو متجمدة أثناء تصفح قائمة المصطلحات. Maximum Xapian clauses count الحد الأقصى لعدد شروط Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. الحد الأقصى لعدد العبارات الأساسية التي نضيفها إلى استعلام Xapian واحد. في بعض الحالات، يمكن أن يكون نتيجة توسيع المصطلح مضاعفًا، ونريد تجنب استخدام الذاكرة بشكل مفرط. يجب أن يكون الإعداد الافتراضي لعدد 100،000 كافيًا في معظم الحالات ومتوافقًا مع تكوينات الأجهزة الحالية النموذجية. Store some GUI parameters locally to the index قم بتخزين بعض معلمات واجهة المستخدم الرسومية محليًا في الفهرس <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index إعدادات واجهة المستخدم الرسومية عادة ما تكون مخزنة في ملف عام، صالح لجميع الفهارس. تعيين هذا المعلمة سيجعل بعض الإعدادات، مثل إعداد جدول النتائج، محددة للفهرس. ConfSubPanelW Only mime types أنواع الـ MIME فقط An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive قائمة حصرية من أنواع الـ MIME المُفهرسة. لن يتم فهرسة أي شيء آخر. عادة ما تكون فارغة وغير نشطة. Exclude mime types استبعاد أنواع الـ MIME Mime types not to be indexed أنواع الـ Mime التي لا يجب فهرستها Max. compressed file size (KB) الحد الأقصى لحجم الملف المضغوط (كيلوبايت) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. هذه القيمة تحدد عتبة تجاوزها لن يتم معالجة الملفات المضغوطة. ضعها على -1 لعدم وجود حد، وعلى 0 لعدم فك الضغط أبدًا. Max. text file size (MB) الحد الأقصى لحجم ملف النص (ميجابايت) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. هذه القيمة تحدد عتبة تجاوزها لن يتم معالجة ملفات النص. ضعها على -1 لعدم وجود حدود. هذا لاستبعاد ملفات سجل الوحوش من الفهرس. Text file page size (KB) حجم صفحة الملف النصي (كيلوبايت) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). إذا تم تعيين هذه القيمة (غير مساوية لـ -1)، سيتم تقسيم ملفات النص إلى قطع بهذا الحجم للفهرسة. سيساعد هذا في البحث في ملفات النص الكبيرة جدًا (على سبيل المثال: ملفات السجل). Max. filter exec. time (s) الحد الأقصى لوقت تنفيذ عملية التصفية (ثواني) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. سيتم إيقاف تشغيل المرشحات الخارجية التي تعمل لفترة أطول من ذلك. هذا ينطبق في الحالات النادرة (على سبيل المثال: Postscript) حيث يمكن أن يتسبب المستند في حدوث حلقة في المرشح. ضبط القيمة على -1 لعدم وجود حدود. Global عالمي ConfigSwitchDLG Switch to other configuration التبديل إلى تكوين آخر ConfigSwitchW Choose other اختر آخر Choose configuration directory اختر دليل التكوين CronToolW Cron Dialog حوار كرون <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> جدولة فهرسة الدفعة (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">يمكن أن تحتوي كل حقل على رمز بدل (*), قيمة رقمية واحدة، قوائم مفصولة بفواصل (1,3,5) ونطاقات (1-7). بشكل عام، سيتم استخدام الحقول <span style=" font-style:italic;">كما هي</span> داخل ملف crontab، ويمكن استخدام بنية crontab الكاملة، انظر crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />على سبيل المثال، إدخال <span style=" font-family:'Courier New,courier';">*</span> في <span style=" font-style:italic;">الأيام، </span><span style=" font-family:'Courier New,courier';">12,19</span> في <span style=" font-style:italic;">الساعات</span> و <span style=" font-family:'Courier New,courier';">15</span> في <span style=" font-style:italic;">الدقائق</span> سيبدأ recollindex كل يوم في الساعة 12:15 صباحًا و 7:15 مساءً</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">الجدولة التي تتضمن تنشيطات متكررة جدًا ربما تكون أقل كفاءة من فهرسة الوقت الحقيقي.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) أيام الأسبوع (* أو 0-7، 0 أو 7 هو الأحد) Hours (* or 0-23) ساعات (* أو 0-23) Minutes (0-59) الدقائق (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">انقر <span style=" font-style:italic;">تعطيل</span> لإيقاف فهرسة الدفعة التلقائية، <span style=" font-style:italic;">تمكين</span> لتنشيطها، <span style=" font-style:italic;">إلغاء</span> لعدم تغيير شيء.</p></body></html> Enable تمكين Disable تعطيل It seems that manually edited entries exist for recollindex, cannot edit crontab يبدو أن هناك إدخالات تم تحريرها يدويًا لـ recollindex، لا يمكن تحرير crontab Error installing cron entry. Bad syntax in fields ? خطأ في تثبيت إدخال cron. بناء جملة سيء في الحقول؟ EditDialog Dialog حوار FirstIdxDialog First indexing setup إعداد فهرسة البحث الأولية <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">يبدو أن الفهرس لهذه الإعدادات غير موجود.</span><br /><br />إذا كنت ترغب فقط في فهرسة دليل المنزل الخاص بك باستخدام مجموعة من القيم الافتراضية المعقولة، اضغط على زر <span style=" font-style:italic;">بدء الفهرسة الآن</span>. ستتمكن من ضبط التفاصيل لاحقًا. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">إذا كنت ترغب في المزيد من التحكم، استخدم الروابط التالية لضبط إعدادات الفهرسة والجدول الزمني.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">يمكن الوصول إلى هذه الأدوات لاحقًا من قائمة <span style=" font-style:italic;">التفضيلات</span>.</p></body></html> Indexing configuration تكوين الفهرسة This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. سيتيح لك ذلك ضبط الدلائل التي ترغب في فهرسة، ومعلمات أخرى مثل مسارات الملفات المستبعدة أو الأسماء، ومجموعات الأحرف الافتراضية، وما إلى ذلك. Indexing schedule جدول الفهرسة This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). سيتيح لك ذلك اختيار بين فهرسة الدفعات والوقت الحقيقي، وإعداد جدول زمني تلقائي لفهرسة الدفعات (باستخدام cron). Start indexing now ابدأ الفهرسة الآن FragButs %1 not found. لم يتم العثور على %1. %1: %2 النص الأصلي: %1: %2 الترجمة: %1: %2 Query Fragments شظايا الاستعلامات IdxSchedW Index scheduling setup إعداد جدولة الفهرس <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> يمكن أن يعمل بشكل دائم في فهرسة الملفات أثناء تغييرها، أو يمكن أن يعمل بفواصل زمنية diskrete. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">قراءة الدليل قد تساعدك في اتخاذ القرار بين هذه النهجين (اضغط على F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">يمكن لهذه الأداة مساعدتك في إعداد جدول زمني لتشغيل فهرسة الدفعات تلقائيًا، أو بدء فهرسة في الوقت الحقيقي عند تسجيل الدخول (أو كليهما، وهو نادراً ما يكون منطقيًا). </p></body></html> Cron scheduling جدولة كرون The tool will let you decide at what time indexing should run and will install a crontab entry. سيتيح لك الأداة تحديد وقت تشغيل الفهرسة وستقوم بتثبيت إدخال crontab. Real time indexing start up بدء فهرسة الوقت الحقيقي Decide if real time indexing will be started when you log in (only for the default index). قرر ما إذا كان سيتم بدء فهرسة الوقت الحقيقي عند تسجيل الدخول (فقط للفهرس الافتراضي). ListDialog Dialog حوار GroupBox مربع المجموعة Main "history" file is damaged, please check or remove it: ملف "history" تالف، يرجى التحقق أو إزالته: No db directory in configuration لا توجد دليل قاعدة بيانات في التكوين Needs "Show system tray icon" to be set in preferences! يحتاج "عرض أيقونة صينية النظام" إلى أن يتم تعيينه في التفضيلات! PTransEdit Path in index المسار في الفهرس Translated path المسار المترجم Config error خطأ في التكوين Original path المسار الأصلي Local path المسار المحلي PTransEditBase Path Translations ترجمة المسارات Select one or several file types, then use the controls in the frame below to change how they are processed اختر نوعًا واحدًا أو عدة أنواع من الملفات، ثم استخدم الضوابط في الإطار أدناه لتغيير كيفية معالجتها Add إضافة Delete حذف Cancel إلغاء Save حفظ Preview Form نموذج Tab 1 الجدول ١ &Search for: البحث عن: &Next التالي &Previous السابق Clear واضح Match &Case تطابق & حالة Previous result document المستند النتيجي السابق Next result document المستند النتيجة التالي Open افتح Preview Window نافذة المعاينة Close preview window أغلق نافذة المعاينة Show next result عرض النتيجة التالية Show previous result عرض النتيجة السابقة Close tab إغلاق العلامة Print طباعة Error loading the document: file missing. خطأ في تحميل المستند: الملف مفقود. Error loading the document: no permission. خطأ في تحميل المستند: لا توجد إذن. Error loading: backend not configured. خطأ في التحميل: الخلفية غير مكونة. Error loading the document: other handler error<br>Maybe the application is locking the file ? خطأ في تحميل المستند: خطأ في المعالج الآخر ربما التطبيق يقوم بقفل الملف؟ Error loading the document: other handler error. خطأ في تحميل المستند: خطأ في المعالج الآخر. <br>Attempting to display from stored text. محاولة عرض النص المخزن. Missing helper program: برنامج المساعد المفقود: Can't turn doc into internal representation for لا يمكن تحويل المستند إلى تمثيل داخلي ل Canceled تم إلغاء Cancel إلغاء Could not fetch stored text تعذر جلب النص المخزن Creating preview text إنشاء نص معاينة Loading preview text into editor تحميل نص معاينة إلى المحرر PreviewTextEdit Show fields عرض الحقول Show image عرض الصورة Show main text عرض النص الرئيسي Reload as Plain Text إعادة تحميل كنص عادي Reload as HTML إعادة تحميل كـ HTML Select All تحديد الكل Copy نسخ Print طباعة Fold lines خطوط الطي Preserve indentation الحفاظ على التباعد Save document to file حفظ المستند إلى ملف Open document فتح المستند Print Current Preview طباعة المعاينة الحالية QObject <b>Customised subtrees الأشجار الفرعية المخصصة The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. قائمة الدلائل الفرعية في التسلسل الهرمي المفهرس حيث تحتاج بعض المعلمات إلى إعادة تعريفها. الافتراضي: فارغ. <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. المعلمات التي تتبعها مضبوطة إما على المستوى العلوي، إذا لم يتم تحديد شيء أو سطر فارغ في صندوق القائمة أعلاه، أو للدليل الفرعي المحدد. يمكنك إضافة أو إزالة الدلائل عن طريق النقر على الأزرار +/- . Skipped names الأسماء المتخطاة These are patterns for file or directory names which should not be indexed. هذه هي الأنماط لأسماء الملفات أو الدلائل التي لا يجب فهرستها. Ignored endings النهايات المتجاهلة These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). هذه هي نهايات أسماء الملفات للملفات التي سيتم فهرسة اسمها فقط (لا محاولة لتحديد نوع MIME، لا فك الضغط، لا فهرسة المحتوى). Default<br>character set الإعداد الافتراضي<br>لمجموعة الأحرف Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. مجموعة الأحرف المستخدمة لقراءة الملفات التي لا تحدد مجموعة الأحرف داخليًا، على سبيل المثال ملفات النص النقي. القيمة الافتراضية فارغة، ويتم استخدام القيمة من بيئة NLS. Follow symbolic links اتبع الروابط الرمزية Follow symbolic links while indexing. The default is no, to avoid duplicate indexing اتبع الروابط الرمزية أثناء فهرسة المحتوى. الإعداد الافتراضي هو لا، لتجنب فهرسة مكررة Index all file names فهرسة جميع أسماء الملفات Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true فهرسة أسماء الملفات التي لا يمكن تحديد محتواها أو معالجته (بدون نوع MIME غير مدعوم). القيمة الافتراضية صحيحة QWidget Create or choose save directory إنشاء أو اختيار دليل الحفظ Choose exactly one directory اختر دليلًا واحدًا تمامًا Could not read directory: تعذر قراءة الدليل: Unexpected file name collision, cancelling. تصادم غير متوقع في أسماء الملفات، إلغاء. Cannot extract document: لا يمكن استخراج المستند: &Preview &معاينة &Open &فتح Open With افتح بواسطة Run Script تشغيل النصية Copy &File Path انسخ مسار الملف Copy &URL انسخ الرابط &URL Copy File Name انسخ اسم الملف Copy Text نسخ النص &Write to File اكتب إلى الملف Save selection to files حفظ التحديد في ملفات Preview P&arent document/folder معاينة المستند/المجلد الأصلي &Open Parent document افتح المستند الأصلي &Open Parent Folder افتح المجلد الأصلي Find &similar documents البحث عن المستندات المماثلة Open &Snippets window افتح نافذة القصاصات Show subdocuments / attachments عرض الوثائق الفرعية / المرفقات QxtConfirmationMessage Do not show again. لا تظهر مرة أخرى. RTIToolW Real time indexing automatic start بدء التجهيز التلقائي لفهرسة الوقت الحقيقي <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p، li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> يمكن تكوين فهرسة لتعمل كميزان، تحدث الفهرس بمجرد تغيير الملفات، في الوقت الحقيقي. تحصل على فهرس دائماً محدث، ولكن يتم استخدام موارد النظام بشكل دائم.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. ابدأ تشغيل الشيطان مع جلسة سطح المكتب الخاصة بي. Also start indexing daemon right now. ابدأ أيضًا تشغيل مشغل فهرسة الآن. Configuration name اسم التكوين Short alphanumeric nickname for this config اسم مستعار قصير مكون من أحرف وأرقام لهذا التكوين Replacing: استبدال: Replacing file استبدال الملف Could not find تعذر العثور على Can't create: لا يمكن إنشاء: Warning تحذير Could not execute recollindex تعذر تنفيذ recollindex Deleting: حذف: Deleting file حذف الملف Removing autostart إزالة التشغيل التلقائي Autostart file deleted. Kill current process too ? تم حذف ملف التشغيل التلقائي. هل تريد إيقاف العملية الحالية أيضًا؟ RclCompleterModel Hits النتائج Hits RclMain Indexing in progress: الفهرسة قيد التقدم: None لا شيء Updating تحديث Flushing تفريغ Purge تطهير Stemdb قاعدة البيانات Closing إغلاق Done تم Monitor مراقب Unknown غير معروف documents المستندات document مستند files ملفات file ملف errors أخطاء error خطأ total files) ملفات الإجمالي) Indexing interrupted تم توقيف التخزين في الفهرس Indexing failed فشل التجهيز with additional message: with additional message: مع رسالة إضافية: Non-fatal indexing message: رسالة فهرسة غير قاتلة: Stop &Indexing توقف الفهرسة Index locked الفهرس مقفل Update &Index تحديث الفهرس Indexing done تم الفهرسة Bad paths مسارات سيئة Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): مسارات فارغة أو غير موجودة في ملف التكوين. انقر على موافق لبدء فهرسة على أي حال (لن يتم حذف البيانات الغائبة من الفهرس) Erasing index مسح الفهرس Reset the index and start from scratch ? إعادة تعيين الفهرس والبدء من الصفر؟ Selection patterns need topdir أنماط الاختيار تحتاج إلى الدليل الرئيسي Selection patterns can only be used with a start directory يمكن استخدام أنماط الاختيار فقط مع دليل البدء Warning تحذير Can't update index: indexer running لا يمكن تحديث الفهرس: المؤشر يعمل Can't update index: internal error لا يمكن تحديث الفهرس: خطأ داخلي Simple search type نوع البحث البسيط Any term أي مصطلح All terms جميع المصطلحات File name اسم الملف Query language لغة الاستعلام Stemming language لغة التقليم (no stemming) (بدون تقليم) (all languages) (جميع اللغات) error retrieving stemming languages خطأ في استرداد لغات التشتيت Can't access file: لا يمكن الوصول إلى الملف: Index not up to date for this file.<br> الفهرس غير محدّث لهذا الملف. <em>Also, it seems that the last index update for the file failed.</em><br/> أيضاً، يبدو أن آخر تحديث للفهرس للملف فشل. Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> انقر على موافق لمحاولة تحديث الفهرس لهذا الملف. ستحتاج إلى تشغيل الاستعلام مرة أخرى عند الانتهاء من الفهرسة. The indexer is running so things should improve when it's done. الفهرس يعمل لذا يجب أن تتحسن الأمور عندما ينتهي. The document belongs to an external index which I can't update. المستند ينتمي إلى فهرس خارجي لا أستطيع تحديثه. Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> انقر على إلغاء للعودة إلى القائمة. انقر على تجاهل لعرض المعاينة على أي حال (وتذكر لهذه الجلسة). هناك خطر في عرض الإدخال الخاطئ. Can't create preview window لا يمكن إنشاء نافذة المعاينة This search is not active anymore هذا البحث لم يعد نشطًا Cannot retrieve document info from database لا يمكن استرداد معلومات المستند من قاعدة البيانات No search لا توجد نتائج بحث No preserved previous search لا توجد بحث سابق محفوظ Choose file to save اختر ملف للحفظ Saved Queries (*.rclq) الاستعلامات المحفوظة (*.rclq) Write failed فشل الكتابة Could not write to file تعذر الكتابة إلى الملف Read failed فشلت القراءة Could not open file: تعذر فتح الملف: Load error خطأ في التحميل Could not load saved query تعذر تحميل الاستعلام المحفوظ Filter directories تصفية الدلائل Bad desktop app spec for %1: [%2] Please check the desktop file مواصفات تطبيق سطح المكتب السيئة لـ %1: [%2] يرجى التحقق من ملف سطح المكتب No external viewer configured for mime type [ لا توجد عارض خارجي مكون لنوع الوسائط [ Bad viewer command line for %1: [%2] Please check the mimeview file سطر أمر المشاهد السيئ لـ %1: [%2] يرجى التحقق من ملف mimeview The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? العارض المحدد في mimeview ل٪1:٪2 غير موجود. هل ترغب في بدء حوار التفضيلات؟ Viewer command line for %1 specifies parent file but URL is not file:// : unsupported سطر الأوامر للعارض لـ %1 يحدد ملف الأصل ولكن عنوان URL ليس ملفًا: غير مدعوم. Viewer command line for %1 specifies both file and parent file value: unsupported سطر الأوامر للعارض لـ %1 يحدد قيمة الملف والملف الأصلي: غير مدعوم Cannot find parent document لا يمكن العثور على المستند الأصلي Cannot extract document or create temporary file لا يمكن استخراج المستند أو إنشاء ملف مؤقت Can't uncompress file: لا يمكن فك ضغط الملف: Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. فتح نسخة مؤقتة. ستفقد التعديلات إذا لم تقم بحفظها في موقع دائم. Do not show this warning next time (use GUI preferences to restore). لا تظهر هذا التحذير في المرة القادمة (استخدم تفضيلات واجهة المستخدم الرسومية لاستعادته). Executing: [ تنفيذ: [ Unknown indexer state. Can't access webcache file. حالة المؤشر غير معروفة. لا يمكن الوصول إلى ملف الذاكرة المؤقتة على الويب. Indexer is running. Can't access webcache file. الفهرس يعمل. لا يمكن الوصول إلى ملف الذاكرة المؤقتة على الويب. Batch scheduling جدولة الدفعة The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. سيتيح لك الأداة تحديد وقت تشغيل فهرسة البيانات. تستخدم جدول المهام في نظام Windows. Disabled because the real time indexer was not compiled in. تم تعطيله بسبب عدم تضمين مؤشر الوقت الحقيقي في الترجمة. About Recoll حول Recoll No information: initial indexing not yet performed. لا توجد معلومات: لم يتم بعد إجراء فهرسة أولية. External applications/commands needed for your file types and not found, as stored by the last indexing pass in التطبيقات/الأوامر الخارجية اللازمة لأنواع الملفات الخاصة بك والتي لم يتم العثور عليها، كما تم تخزينها خلال آخر عملية فهرسة في No helpers found missing لم يتم العثور على مساعدين مفقودين Missing helper programs البرامج المساعدة المفقودة Error خطأ Index query error خطأ في استعلام الفهرس Indexed MIME Types أنواع MIME المُفَهَرَسَة Content has been indexed for these MIME types: تم فهرسة المحتوى لهذه الأنواع MIME: Types list empty: maybe wait for indexing to progress? قائمة الأنواع فارغة: ربما يجب الانتظار حتى يتقدم عملية الفهرسة؟ Duplicates التكرارات Main Window النافذة الرئيسية Clear search مسح البحث Move keyboard focus to search entry نقل التركيز إلى مدخل البحث Move keyboard focus to search, alt. نقل التركيز إلى البحث، alt. Toggle tabular display تبديل العرض الجدولي Show menu search dialog عرض قائمة حوار البحث Move keyboard focus to table نقل التركيز إلى الجدول Show advanced search dialog عرض مربع حوار البحث المتقدم Tools أدوات Results النتائج All الكل media وسائل الإعلام message رسالة other آخر presentation العرض spreadsheet جدول بيانات text نص sorted مرتب filtered تمت تصفية Document filter تصفية المستندات F&ilter تصفية Main index open error: خطأ في فتح الفهرس الرئيسي: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. قد يكون الفهرس تالفًا. ربما حاول تشغيل xapian-check أو إعادة بناء الفهرس؟. Could not open external index. Db not open. Check external index list. تعذر فتح الفهرس الخارجي. قاعدة البيانات غير مفتوحة. يرجى التحقق من قائمة الفهارس الخارجية. Can't set synonyms file (parse error?) لا يمكن تعيين ملف المرادفات (خطأ في التحليل؟) Query results نتائج الاستعلامات Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program الاستعلام قيد التقدم. نظرًا لقيود مكتبة الفهرسة، سيؤدي إلغاء العملية إلى خروج البرنامج. Result count (est.) عدد النتائج (تقديري) No results found لم يتم العثور على نتائج Save file حفظ الملف Sub-documents and attachments الوثائق الفرعية والمرفقات History data بيانات التاريخ Document history سجل المستندات Confirm تأكيد Erasing simple and advanced search history lists, please click Ok to confirm مسح قوائم تاريخ البحث البسيط والمتقدم، يرجى النقر على موافق للتأكيد Could not open/create file تعذر فتح/إنشاء الملف RclMainBase Recoll Recoll ريكول Query Language Filters فلاتر لغة الاستعلامات Filter dates تصفية التواريخ Filter birth dates تصفية تواريخ الميلاد E&xit خروج Ctrl+Q Ctrl+Q ضبط+Q Update &index تحديث &الفهرس Trigger incremental pass تحفيز المرور التدريجي Start real time indexer بدء فهرس الوقت الحقيقي &Rebuild index إعادة بناء الفهرس &Erase document history مسح تاريخ المستندات &Erase search history مسح سجل البحث E&xport simple search history تصدير سجل البحث البسيط Missing &helpers المفقودين والمساعدين Indexed &MIME types الفهرسة وأنواع MIME &About Recoll حول Recoll &User manual (local, one HTML page) الدليل الإرشادي للمستخدم (محلي، صفحة HTML واحدة) &Online manual (Recoll Web site) الدليل الإلكتروني (موقع Recoll على الويب) Document &History الوثيقة والتاريخ Document History سجل الوثائق &Advanced Search البحث المتقدم Assisted complex search البحث المعقد المساعد &Sort parameters معايير الترتيب Sort parameters معايير الترتيب Term &explorer مستكشف المصطلحات Term explorer tool أداة استكشاف المصطلحات Next page الصفحة التالية Next page of results الصفحة التالية من النتائج PgDown الصفحة التالية First page الصفحة الأولى Go to first page of results الانتقال إلى الصفحة الأولى من النتائج Shift+PgUp تحويل النص التالي من الإنجليزية إلى العربية، في سياق واجهة المستخدم الرسومية للبحث عن النص. مقتطف النص: Shift+PgUp Previous page الصفحة السابقة Previous page of results الصفحة السابقة من النتائج PgUp صفحة للأعلى &Index configuration تكوين الفهرس Path translations ترجمة المسارات Indexing &schedule الفهرسة والجدولة &GUI configuration تكوين واجهة المستخدم (GUI) E&xternal index dialog حوار فهرس خارجي External index dialog مربع حوار الفهرس الخارجي Enable synonyms تمكين المرادفات &Full Screen شاشة كاملة Full Screen شاشة كاملة F11 F11 المفتاح F11 Increase results text font size زيادة حجم الخط لنص النتائج Increase Font Size زيادة حجم الخط Decrease results text font size تقليل حجم خط نص النتائج Decrease Font Size تقليل حجم الخط Sort by date, oldest first فرز حسب التاريخ، الأقدم أولاً Sort by dates from oldest to newest فرز حسب التواريخ من الأقدم إلى الأحدث Sort by date, newest first فرز حسب التاريخ، الأحدث أولاً Sort by dates from newest to oldest فرز حسب التواريخ من الأحدث إلى الأقدم Show Query Details عرض تفاصيل الاستعلام Show as table عرض كجدول Show results in a spreadsheet-like table عرض النتائج في جدول يشبه جدول الجداول الإلكترونية Save as CSV (spreadsheet) file حفظ كملف CSV (جدول بيانات) Saves the result into a file which you can load in a spreadsheet يحفظ النتيجة في ملف يمكنك تحميله في جدول بيانات Next Page الصفحة التالية Previous Page الصفحة السابقة First Page الصفحة الأولى Query Fragments قطع الاستعلامات With failed files retrying With failed files retrying مع إعادة محاولة الملفات الفاشلة Next update will retry previously failed files التحديث القادم سيعيد محاولة تنزيل الملفات التي فشلت سابقاً Save last query حفظ الاستعلام الأخير Load saved query تحميل الاستعلام المحفوظ Special Indexing الفهرسة الخاصة Indexing with special options الفهرسة بخيارات خاصة Switch Configuration... تكوين التبديل... Choose another configuration to run on, replacing this process اختر تكوينًا آخر لتشغيله، لاستبدال هذه العملية Index &statistics الفهرس والإحصائيات Webcache Editor محرر ذاكرة التخزين المؤقت على الويب &File ملف &View عرض &Tools أدوات &Preferences التفضيلات &Help المساعدة &Results النتائج &Query استعلام RclTrayIcon Restore استعادة Quit إنهاء RecollModel Abstract ملخص Author الكاتب Document size حجم المستندات Document date تاريخ الوثيقة File size حجم الملفات File name اسم الملف File date تاريخ الملفات Ipath مسار Keywords الكلمات الرئيسية MIME type نوع MIME Original character set مجموعة الأحرف الأصلية Relevancy rating تصنيف الصلة Title العنوان URL رابط الإنترنت Date تاريخ Date and time التاريخ والوقت Can't sort by inverse relevance لا يمكن فرز حسب الأهمية العكسية ResList <p><b>No results found</b><br> <p><b>لم يتم العثور على نتائج</b><br> Documents المستندات out of at least على الأقل for لـ Previous السابق Next التالي Unavailable document المستند غير متوفر Preview معاينة Open افتح Snippets مقتطفات (show query) (عرض الاستعلام) <p><i>Alternate spellings (accents suppressed): </i> التهجئة البديلة (اللكنات مكبوتة): <p><i>Alternate spellings: </i> التهجئة البديلة: This spelling guess was added to the search: تمت إضافة هذه العملية التخمينية للبحث: These spelling guesses were added to the search: تمت إضافة هذه التخمينات الإملائية إلى البحث: Document history سجل المستندات Result list قائمة النتائج Result count (est.) عدد النتائج (تقديري) Query details تفاصيل الاستعلام ResTable Use Shift+click to display the text instead. استخدم Shift + انقر لعرض النص بدلاً من ذلك. Result Table جدول النتائج Open current result document افتح مستند النتيجة الحالي Open current result and quit افتح النتيجة الحالية وانسحب Preview معاينة Show snippets عرض مقتطفات Show header عرض العنوان Show vertical header عرض العنوان الرأسي Copy current result text to clipboard انسخ نص النتيجة الحالية إلى الحافظة Copy result text and quit انسخ نص النتيجة وانهِ البرنامج Save table to CSV file حفظ الجدول إلى ملف CSV Can't open/create file: لا يمكن فتح/إنشاء الملف: %1 bytes copied to clipboard %1 بايت تم نسخها إلى الحافظة &Reset sort إعادة تعيين الترتيب &Save as CSV حفظ كملف CSV &Delete column حذف العمود Add "%1" column إضافة عمود "%1" SSearch Any term أي مصطلح All terms جميع المصطلحات File name اسم الملف Query language لغة الاستعلام Simple search البحث البسيط History التاريخ <html><head><style> ترجمة النص السابق إلى العربية: <html><head><style> table, th, td { الجدول، th، td { border: 1px solid black; الحد: 1 بكسل صلب أسود; border-collapse: collapse; تحطيم الحدود: انهيار; } نص البحث: } th,td { th، td { text-align: center; محاذاة النص: وسط </style></head><body> </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; ورقة غش لغة الاستعلام. في حال الشك: انقر على <b>إظهار تفاصيل الاستعلام</b>. You should really look at the manual (F1)</p> يجب عليك حقًا النظر في الدليل (F1) <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> :جدول الحدود='1' تباعد الخلايا='0' <tr><th>What</th><th>Examples</th> <tr><th>ماذا</th><th>أمثلة</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>و</td><td>واحد اثنان&nbsp;&nbsp;&nbsp;واحد و اثنان&nbsp;&nbsp;&nbsp;واحد && اثنان</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>أو</td><td>واحد أو اثنان&nbsp;&nbsp;&nbsp;واحد || اثنان</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>معقد بولياني. OR لديه أولوية، استخدم الأقواس&nbsp; where needed</td><td>(one AND two) OR three</td></tr> حيثما يلزم</td><td>(واحد واثنان) أو ثلاثة</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>لا</td><td>-مصطلح</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>العبارة</td><td>"الكبرياء والتحامل"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>القرب المرتب (المرونة = 1)</td><td>"فخر وتحامل" o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>القرب غير المرتب (الفجوة = 1)</td><td>"التحيز الفخر" po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>التقريب غير المرتب (الانزلاق الافتراضي = 10)</td><td>"التحيز الكبرياء"p</td></tr> <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>تكبير الحروف لكبح توسيع الجذر</td><td>الأرضية</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>محدد حسب الحقل</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>وD داخل الحقل (بدون ترتيب)</td><td>المؤلف: جين أوستن</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>أو داخل الحقل</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>أسماء الحقول</td><td>العنوان/الموضوع/التسمية&nbsp;&nbsp;المؤلف/المرسل<br>المستلم/إلى&nbsp;&nbsp;اسم الملف&nbsp;&nbsp;الامتداد</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>مرشح مسار الدليل</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>مرشح نوع MIME</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>فترات التاريخ</td><td>تاريخ: 2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> التاريخ: 2018&nbsp;&nbsp;التاريخ: 2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>الحجم</td><td>الحجم>100 كيلوبايت الحجم<1 ميجابايت</td></tr> </table></body></html> </table></body></html> </table></body></html> </table></body></html> </table></body></html> Enter file name wildcard expression. أدخل تعبير البحث الخاص بأسماء الملفات. Enter search terms here. أدخل مصطلحات البحث هنا. Bad query string سلسلة الاستعلام غير صحيحة Out of memory نفذت الذاكرة Can't open index لا يمكن فتح الفهرس Stemming languages for stored query: تقليص اللغات للاستعلامات المخزنة: differ from current preferences (kept) differ from current preferences (kept) تختلف عن التفضيلات الحالية (المحفوظة) Auto suffixes for stored query: اللاحقات التلقائية للاستعلامات المخزنة: Could not restore external indexes for stored query:<br> تعذر استعادة الفهارس الخارجية للاستعلام المخزن: ??? Unfortunately, the text fragment provided is "???" which does not contain any meaningful information to be translated. Please provide a complete sentence or phrase for translation. Using current preferences. استخدام التفضيلات الحالية. Autophrase is set but it was unset for stored query تم تعيين Autophrase ولكن تم إلغاء تعيينه للاستعلام المخزن Autophrase is unset but it was set for stored query لم يتم تعيين Autophrase ولكن تم تعيينه للاستعلام المخزن SSearchBase SSearchBase قاعدة البحث Erase search entry مسح إدخال البحث Clear واضح Start query بدء الاستعلام Search البحث Choose search type. اختر نوع البحث. Show query history عرض تاريخ الاستعلامات Main menu القائمة الرئيسية SearchClauseW Any أي All الكل None لا شيء Phrase عبارة Proximity القرب File name اسم الملف No field لا يوجد حقل Select the type of query that will be performed with the words حدد نوع الاستعلام الذي سيتم تنفيذه باستخدام الكلمات Number of additional words that may be interspersed with the chosen ones عدد الكلمات الإضافية التي يمكن أن تتخلل الكلمات المختارة Snippets Snippets مقتطفات Find: البحث: العثور على Next التالي Prev السابق SnippetsW Search البحث Snippets Window نافذة المقتطفات Find ابحث Find (alt) البحث (alt) Find next البحث عن التالي Find previous العثور على السابق Close window إغلاق النافذة Increase font size زيادة حجم الخط Decrease font size تصغير حجم الخط Sort By Relevance ترتيب حسب الصلة Sort By Page ترتيب حسب الصفحة <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>عذرًا، لم يتم العثور على تطابق دقيق ضمن الحدود. ربما يكون المستند كبيرًا جدًا وضاع مولد القصاصات في متاهة...</p> SpecIdxW Special Indexing الفهرسة الخاصة Retry previously failed files. إعادة محاولة الملفات التي فشلت سابقًا. Else only modified or failed files will be processed. وإلا سيتم معالجة الملفات المعدلة أو التي فشلت فقط. Erase selected files data before indexing. امسح بيانات الملفات المحددة قبل الفهرسة. Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). الدليل الذي يتم فهرسة بشكل متكرر. يجب أن يكون داخل منطقة الفهرسة العادية كما هو محدد في ملف التكوين (topdirs). Browse تصفح Start directory. Must be part of the indexed tree. Use full indexed area if empty. المجلد الابتدائي. يجب أن يكون جزءًا من الشجرة المُفهرسة. استخدم المنطقة المُفهرسة بالكامل إذا كانت فارغة. Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. اتركه فارغًا لتحديد جميع الملفات. يمكنك استخدام أنماط عديدة منفصلة بمسافات من نوع القذيفة.<br>يجب تقديم اقتباسات مزدوجة للأنماط التي تحتوي على مسافات مضمنة.<br>يمكن استخدامها فقط إذا تم تعيين الهدف البدء. Selection patterns: أنماط الاختيار: Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). ملف الإخراج التشخيصي. سيتم قصه واستلام تشخيصات الفهرسة (أسباب عدم فهرسة الملفات). Top indexed entity الكيان المُفهرس الأعلى Diagnostics file ملف التشخيصات SpellBase Term Explorer مستكشف المصطلحات Match تطابق Case حالة Accents اللكنات &Expand توسيع Alt+E الترجمة: Alt+E السياق: وظيفة البحث في واجهة المستخدم. &Close إغلاق Alt+C الترجمة: Alt+C السياق: في واجهة المستخدم الرسومية للبحث في النصوص. No db info. لا توجد معلومات قاعدة بيانات. SpellW Wildcards الباحث النصي: Wildcards Regexp تعبير منتظم Stem expansion توسيع الجذع Spelling/Phonetic الإملائي/الصوتي Show index statistics عرض إحصائيات الفهرس List files which could not be indexed (slow) قائمة الملفات التي لم يتم فهرستها (بطيئة) error retrieving stemming languages خطأ في استرداد لغات التشتيت Index: %1 documents, average length %2 terms.%3 results الفهرس: %1 مستند، متوسط الطول %2 مصطلح. %3 نتائج Spell expansion error. خطأ في توسيع الإملاء. %1 results نتائج %1 No expansion found لم يتم العثور على توسيع List was truncated alphabetically, some frequent تم قص قائمة بشكل أبجدي، بعض العناصر المتكررة terms may be missing. Try using a longer root. قد تكون الكلمات مفقودة. جرب استخدام جذر أطول. Number of documents عدد الوثائق Average terms per document متوسط عدد المصطلحات في كل وثيقة Smallest document length (terms) أصغر طول للمستند (مصطلحات) Longest document length (terms) أطول طول للمستند (مصطلحات) Results from last indexing: النتائج من آخر فهرسة: Documents created/updated Files tested Unindexed files Documents created/updated المستندات التي تم إنشاؤها / تحديثها Files tested الملفات المختبرة Unindexed files الملفات غير المُفهرسة Database directory size حجم دليل قاعدة البيانات MIME types: أنواع MIME: Item العنصر Value القيمة Term المصطلح Doc. / Tot. المستندات / الإجمالي UIPrefsDialog Any term أي مصطلح All terms جميع المصطلحات File name اسم الملف Query language لغة الاستعلام Value from previous program exit القيمة من خروج البرنامج السابق Light ضوء Dark داكر System النظام Choose اختر error retrieving stemming languages خطأ في استرداد لغات التشتيت Context السياق Description الوصف Shortcut اختصار Default الافتراضي Default QtWebkit font الخط الافتراضي لـ QtWebkit Result list paragraph format (erase all to reset to default) تنسيق الفقرة في قائمة النتائج (امسح الكل لإعادة الضبط إلى الوضع الافتراضي) Result list header (default is empty) عنوان قائمة النتائج (الافتراضي فارغ) Choose QSS File اختر ملف QSS At most one index should be selected يجب تحديد فهرس واحد على الأكثر Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) حدد دليل تكوين recoll أو دليل فهرس xapian (على سبيل المثال: /home/me/.recoll أو /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read يبدو أن المجلد المحدد يشبه مجلد تكوين Recoll ولكن لم يتم قراءة التكوين. The selected directory does not appear to be a Xapian index الدليل المحدد لا يبدو أنه فهرس Xapian Can't add index with different case/diacritics stripping option. لا يمكن إضافة فهرس بخيار تجريد الحالات/الحركات المختلفة. This is the main/local index! هذا هو الفهرس الرئيسي/المحلي! The selected directory is already in the index list المجلد المحدد موجود بالفعل في قائمة الفهرس. ViewAction Desktop Default الإعدادات الافتراضية لسطح المكتب MIME type نوع MIME Command الأمر Changing entries with different current values تغيير الإدخالات ذات القيم الحالية المختلفة ViewActionBase Native Viewers المشاهدين الأصليين Select one or several mime types then use the controls in the bottom frame to change how they are processed. اختر نوع MIME واحد أو أكثر ثم استخدم عناصر التحكم في الإطار السفلي لتغيير كيفية معالجتها. Use Desktop preferences by default استخدم تفضيلات سطح المكتب بشكل افتراضي Select one or several file types, then use the controls in the frame below to change how they are processed اختر نوعًا واحدًا أو عدة أنواع من الملفات، ثم استخدم الضوابط في الإطار أدناه لتغيير كيفية معالجتها Recoll action: إجراء Recoll: current value القيمة الحالية Select same حدد نفسه <b>New Values:</b> <b>القيم الجديدة:</b> Exception to Desktop preferences استثناء لتفضيلات سطح المكتب Action (empty -> recoll default) الإجراء (فارغ -> افتراضي recoll) The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. القيمة هي سطر أوامر يجب تنفيذه. الاستبدالات: %s: سلسلة البحث؛ %p: رقم الصفحة؛ <br>%f: اسم ملف المستند. اضغط F1 للمزيد من المساعدة. Apply to current selection تطبيق على التحديد الحالي Close إغلاق Webcache Webcache editor محرر ذاكرة التخزين المؤقت على الويب TextLabel علامة النص Search regexp بحث بتعبير منتظم WebcacheEdit Maximum size %1 (Index config.). Current size %2. Write position %3. الحجم الأقصى %1 (تكوين الفهرس). الحجم الحالي %2. موضع الكتابة %3. Copy URL نسخ عنوان الرابط Save to File حفظ إلى ملف Unknown indexer state. Can't edit webcache file. حالة المؤشر غير معروفة. لا يمكن تحرير ملف الذاكرة المؤقتة على الويب. Indexer is running. Can't edit webcache file. الفهرس يعمل. لا يمكن تحرير ملف الذاكرة المؤقتة على الويب. Delete selection حذف التحديد File creation failed: فشل إنشاء الملف: Webcache was modified, you will need to run the indexer after closing this window. تم تعديل ذاكرة التخزين المؤقت على الويب، ستحتاج إلى تشغيل المؤشر بعد إغلاق هذه النافذة. WebcacheModel MIME نوع الوسائط (MIME) Date تاريخ Size الحجم URL رابط الموقع WinSchedToolW Recoll Batch indexing فهرسة دفعية لـ Recoll Start Windows Task Scheduler tool ابدأ أداة جدول المهام في ويندوز Error خطأ Configuration not initialized التكوين غير مهيأ Could not create batch file تعذر إنشاء ملف دفعة <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>جدولة دفعة فهرسة Recoll</h3><p>نحن نستخدم جدول المهام القياسي في Windows لهذا الغرض. سيتم تشغيل البرنامج عند النقر على الزر أدناه.</p><p>يمكنك استخدام الواجهة الكاملة (<i>إنشاء مهمة</i> في القائمة على اليمين)، أو معالج <i>إنشاء مهمة أساسية</i> المبسط. في كلا الحالتين، قم بنسخ/لصق مسار ملف الدفعة المدرج أدناه كـ <i>الإجراء</i> الذي يجب تنفيذه. Command already started الأمر بدأ بالفعل confgui::ConfParamFNW Choose اختر confgui::ConfParamSLW + نص البحث: + Add entry إضافة إدخال - - وقد تم العثور على 10 نتائج. Delete selected entries حذف العناصر المحددة ~ البحث في النصوص Edit selected entries تحرير الإدخالات المحددة confgui::ConfTabsW Apply تطبيق uiPrefsDialogBase Recoll - User Preferences Recoll - تفضيلات المستخدم User interface واجهة المستخدم Choose editor applications اختر تطبيقات المحرر If set, starting a new instance on the same index will raise an existing one. إذا تم تعيينه، سيؤدي بدء نسخة جديدة على نفس الفهرس إلى رفع النسخة الحالية. Single application تطبيق واحد Start with simple search mode: ابدأ بوضع البحث البسيط: Limit the size of the search history. Use 0 to disable, -1 for unlimited. قم بتحديد حجم سجل البحث. استخدم 0 لتعطيله، -1 لغير محدود. Maximum size of search history (0: disable, -1: unlimited): الحد الأقصى لحجم سجل البحث (0: تعطيل، -1: غير محدود): Start with advanced search dialog open. ابدأ بفتح حوار البحث المتقدم. Remember sort activation state. تذكر حالة تنشيط الترتيب. Set to 0 to disable and speed up startup by avoiding tree computation. تعيين القيمة على 0 لتعطيل وتسريع بدء التشغيل عن طريق تجنب حساب الشجرة. Depth of side filter directory tree عمق شجرة دليل تصفية الجانب See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. انظر إلى وثائق Qt QDateTimeEdit. على سبيل المثال، yyyy-MM-dd. اتركه فارغًا لاستخدام تنسيق Qt/System الافتراضي. Side filter dates format (change needs restart) تنسيق تواريخ تصفية الجانب (التغيير يتطلب إعادة التشغيل) Decide if document filters are shown as radio buttons, toolbar combobox, or menu. قرر ما إذا كانت عوامل تصفية المستندات تُعرض كأزرار إذاعية، أو مربع اندماج في شريط الأدوات، أو قائمة. Document filter choice style: نمط اختيار تصفية المستندات: Buttons Panel لوحة الأزرار Toolbar Combobox قائمة تحديد في شريط الأدوات Menu القائمة Hide some user interface elements. إخفاء بعض عناصر واجهة المستخدم. Hide: إخفاء: Toolbars أشرطة الأدوات Status bar شريط الحالة Show button instead. عرض الزر بدلاً من ذلك. Menu bar شريط القوائم Show choice in menu only. عرض الخيار في القائمة فقط. Simple search type نوع البحث البسيط Clear/Search buttons أزرار مسح/بحث واضحة Show system tray icon. عرض أيقونة صينية النظام. Close to tray instead of exiting. أغلق إلى علبة النظام بدلاً من الخروج. Generate desktop notifications. توليد إشعارات سطح المكتب. Suppress all beeps. كتم جميع الصفارات. Show warning when opening temporary file. أظهر تحذير عند فتح الملف المؤقت. Disable Qt autocompletion in search entry. تعطيل إكمال Qt التلقائي في مدخل البحث. The completion only changes the entry when activated. الإكمال يغير الإدخال فقط عند تنشيطه. Completion: no automatic line editing. الإكمال: لا تحرير تلقائي للسطر. Start search on completer popup activation. ابدأ البحث عند تنشيط نافذة الاكمال. Maximum number of history entries in completer list الحد الأقصى لعدد الإدخالات في قائمة الاكمال التاريخية Number of history entries in completer: عدد الإدخالات التاريخية في المكمل: Displays the total number of occurences of the term in the index يعرض إجمالي عدد حالات ظهور المصطلح في الفهرس Show hit counts in completer popup. عرض عدد النتائج في نافذة الاكمال التلقائي. Highlight CSS style for query terms نمط CSS لتسليط الضوء على مصطلحات البحث Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... تسليط الضوء على مصطلحات البحث في النتائج. <br> جرب شيئًا مثل "اللون: أحمر؛ الخلفية: أصفر" لشيء أكثر حيوية من اللون الأزرق الافتراضي... Zoom factor for the user interface. Useful if the default is not right for your screen resolution. عامل التكبير لواجهة المستخدم. مفيد إذا كان الإعداد الافتراضي غير مناسب لدقة شاشتك. Display scale (default 1.0): عرض المقياس (الافتراضي 1.0): Color scheme نظام الألوان Application Qt style sheet تطبيق ورقة أنماط Qt Resets the style sheet to default إعادة تعيين ورقة الأنماط إلى الإعدادات الافتراضية None (default) لا شيء (افتراضي) Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. يفتح حوار لتحديد ملف ورقة الأنماط. انظر إلى /usr/share/recoll/examples/recoll[-dark].qss لمثال. Choose QSS File اختر ملف QSS Interface language (needs restart): لغة الواجهة (تحتاج إلى إعادة تشغيل) Note: most translations are incomplete. Leave empty to use the system environment. ملاحظة: معظم الترجمات غير كاملة. اتركها فارغة لاستخدام بيئة النظام. Result List قائمة النتائج Number of entries in a result page عدد الإدخالات في صفحة النتائج Result list font خط قائمة النتائج Opens a dialog to select the result list font يفتح حوار لتحديد خط قائمة النتائج Helvetica-10 هيلفيتيك-١٠ Resets the result list font to the system default يعيد تعيين خط قائمة النتائج إلى الإعداد الافتراضي للنظام Reset إعادة تعيين Edit result paragraph format string تحرير سلسلة تنسيق فقرة النتيجة Edit result page html header insert تحرير إدراج رأس صفحة نتائج HTML Date format (strftime(3)) تنسيق التاريخ (strftime(3)) Abstract snippet separator فاصل مقتطف الملخص User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. النمط الذي يتم تطبيقه على نافذة المقتطفات للمستخدم.<br> ملاحظة: إدراج رأس صفحة النتائج مضمن أيضًا في رأس نافذة المقتطفات. Snippets window CSS file ملف CSS لنافذة المقتطفات Opens a dialog to select the Snippets window CSS style sheet file يفتح حوار لتحديد ملف ورقة الأنماط CSS لنافذة مقتطفات النصوص Choose اختر Resets the Snippets window style إعادة تعيين نمط نافذة القصاصات Maximum number of snippets displayed in the snippets window الحد الأقصى لعدد المقتطفات المعروضة في نافذة المقتطفات Sort snippets by page number (default: by weight). فرز المقتطفات حسب رقم الصفحة (الافتراضي: حسب الوزن). Display a Snippets link even if the document has no pages (needs restart). عرض رابط المقتطفات حتى لو لم يكن للمستند صفحات (يحتاج إلى إعادة تشغيل). Result Table جدول النتائج Hide result table header. إخفاء رأس جدول النتائج. Show result table row headers. عرض رؤوس صفوف جدول النتائج. Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. تعطيل اختصارات Ctrl+[0-9]/Shift+[a-z] للانتقال إلى صفوف الجدول. To display document text instead of metadata in result table detail area, use: لعرض نص المستند بدلاً من البيانات الوصفية في منطقة التفاصيل لجدول النتائج، استخدم: left mouse click انقر بزر الفأرة الأيسر Shift+click النقر بالزر الأيمن ثم النقر بالزر الأيسر Do not display metadata when hovering over rows. لا تعرض البيانات الوصفية عند تحويم المؤشر فوق الصفوف. Preview معاينة Texts over this size will not be highlighted in preview (too slow). النصوص التي تزيد عن هذا الحجم لن يتم تحديدها في المعاينة (بطيء جدًا). Maximum text size highlighted for preview (kilobytes) الحد الأقصى لحجم النص المميز للمعاينة (كيلوبايت) Prefer HTML to plain text for preview. التفضيل HTML على النص العادي للمعاينة. When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. عند عرض HTML في وضع الظلام، حاول استخدام خلفية داكنة (ولون فاتح). هذا يتعارض مع العديد من المستندات التي ستتجاوز إعدادنا الفاتح بلون النص الخلفي الخاص بها (الداكن)، مما يؤدي إلى وثيقة غير قابلة للقراءة، لذا يتم تعطيله افتراضيًا. Use dark background when displaying HTML in dark mode. استخدم خلفية داكنة عند عرض HTML في وضع الظلام. Make links inside the preview window clickable, and start an external browser when they are clicked. جعل الروابط داخل نافذة المعاينة قابلة للنقر، وبدء متصفح خارجي عند النقر عليها. Activate links in preview. تفعيل الروابط في المعاينة. Set to 0 to disable details/summary feature تعيين القيمة إلى 0 لتعطيل ميزة التفاصيل/الملخص Fields display: max field length before using summary: عرض الحقول: الحد الأقصى لطول الحقل قبل استخدام الملخص: Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. الأسطر في النص المهيأ مسبقًا لا تُطوى. استخدام عنصر BR يفقد بعض التباعد. قد يكون النمط PRE + Wrap هو ما تريده. Plain text to HTML line style نص عادي إلى نمط سطر HTML <BR> <BR> ترجمة النص التالي من الإنجليزية إلى العربية، في سياق واجهة مستخدم البحث عن النص. النص: <BR> <PRE> <PRE> ترجمة النص التالي من الإنجليزية إلى العربية، في سياق واجهة المستخدم الرسومية للبحث عن النص. قطعة النص: <PRE> + wrap + التفاف Number of lines to be shown over a search term found by preview search. عدد الأسطر التي ستظهر فوق مصطلح البحث الذي تم العثور عليه بواسطة البحث المسبق. Search term line offset: موضع السطر لمصطلح البحث: Shortcuts اختصارات Use F1 to access the manual استخدم F1 للوصول إلى الدليل Reset shortcuts defaults إعادة تعيين افتراضيات الاختصارات Search parameters معايير البحث If checked, results with the same content under different names will only be shown once. إذا تم تحديد الخانة، سيتم عرض النتائج التي تحتوي على نفس المحتوى تحت أسماء مختلفة مرة واحدة فقط. Hide duplicate results. إخفاء النتائج المكررة. Stemming language لغة التقليم A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. سيتم تغيير البحث عن [rolling stones] (2 مصطلحات) إلى [rolling or stones or (rolling phrase 2 stones)]. سيتم منح أولوية أعلى للنتائج التي تظهر فيها مصطلحات البحث بالضبط كما تم إدخالها. Automatically add phrase to simple searches أضف العبارة تلقائيًا إلى البحوث البسيطة Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). الحد الأدنى لنسبة التكرار التي لا نستخدم فيها المصطلحات داخل الـ autophrase. المصطلحات المتكررة هي مشكلة أداء رئيسية مع العبارات. تزيد المصطلحات المتخطاة من مرونة العبارة وتقلل من كفاءة الـ autophrase. القيمة الافتراضية هي 2 (بالمئة). Autophrase term frequency threshold percentage نسبة عتبة تكرار مصطلح Autophrase Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. هل نحاول بناء ملخصات لإدخالات قائمة النتائج باستخدام سياق مصطلحات الاستعلام؟ قد يكون بطيئًا للمستندات الكبيرة. Dynamically build abstracts بناء ملخصات بشكل ديناميكي Do we synthetize an abstract even if the document seemed to have one? هل نقوم بتوليف ملخص حتى لو بدا الوثيقة بأنها تحتوي على واحد؟ Replace abstracts from documents استبدال الملخصات من الوثائق Synthetic abstract size (characters) الحجم الاصطناعي للملخص (الأحرف) Synthetic abstract context words كلمات سياقية مجردة اصطناعية The words in the list will be automatically turned to ext:xxx clauses in the query language entry. سيتم تحويل الكلمات في القائمة تلقائيًا إلى عبارات ext:xxx في مدخل لغة الاستعلام. Query language magic file name suffixes. البحث عن اللغة السحرية للاسماء الملفات الختامية. Enable تمكين Add common spelling approximations for rare terms. أضف تقريبات للتهجئة الشائعة للمصطلحات النادرة. Automatic spelling approximation. تقريب تلقائي للإملاء. Max spelling distance أقصى مسافة للتهجئة Synonyms file ملف القواميس المرادفة Wild card characters *?[] will processed as punctuation instead of being expanded سيتم معالجة حروف الباحث الذي يحتوي على الرموز البارزة *؟[] كعلامات ترقيم بدلاً من توسيعها Ignore wild card characters in ALL terms and ANY terms modes تجاهل الرموز المميزة في وضعي "جميع المصطلحات" و"أي مصطلح" External Indexes الفهارس الخارجية Toggle selected تبديل المحدد Activate All تنشيط الكل Deactivate All إلغاء تنشيط الكل Set path translations for the selected index or for the main one if no selection exists. تعيين ترجمات المسار للفهرس المحدد أو للفهرس الرئيسي إذا لم يتم تحديد أي اختيار. Paths translations ترجمة المسارات Remove from list. This has no effect on the disk index. إزالة من القائمة. هذا لا يؤثر على فهرس القرص. Remove selected إزالة المحدد Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. انقر لإضافة دليل فهرس آخر إلى القائمة. يمكنك اختيار إما دليل تكوين Recoll أو فهرس Xapian. Add index إضافة فهرس Misc متفرقات The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. يتسبب الخلل في عرض أحرف دائرية غريبة داخل الكلمات التاميلية المظللة. الحل البديل يقوم بإدراج مسافة إضافية تبدو وكأنها تصلح المشكلة. Work around Tamil QTBUG-78923 by inserting space before anchor text العمل حول Tamil QTBUG-78923 عن طريق إدراج مسافة قبل نص الرابط Apply changes تطبيق التغييرات &OK موافق Discard changes تجاهل التغييرات &Cancel إلغاء recoll-1.43.12/qtgui/i18n/recoll_el.ts0000644000175000017500000113375015124431112016670 0ustar dockesdockes ActSearchDLG Menu search Μενού αναζήτησης AdvSearch All clauses Όλες οι ρήτρες Any clause Οποιαδήποτε ρήτρα texts κείμενα spreadsheets φύλλα εργασίας presentations παρουσιάσεις media πολυμέσα messages Μηνύματα other άλλα Bad multiplier suffix in size filter Κακό επίθεμα πολλαπλασιαστή στο φίλτρο μεγέθους text κείμενο spreadsheet λογιστικό φύλλο presentation παρουσίαση message μήνυμα Advanced Search Προχωρημένη αναζήτηση History Next Ιστορικό Επόμενο History Prev Προηγούμενο Ιστορικό Load next stored search Φόρτωση της επόμενης αποθηκευμένης αναζήτησης Load previous stored search Φόρτωση προηγούμενης αποθηκευμένης αναζήτησης AdvSearchBase Advanced search Προχωρημένη αναζήτηση Restrict file types Περιορισμός του τύπου αρχείων Save as default Αποθήκευση ως προεπιλογή Searched file types Αναζητούμενοι τύποι αρχείων All ----> Όλα ----> Sel -----> Επιλ ----> <----- Sel <----- Επιλ <----- All <----- Όλα Ignored file types Τύποι αρχείων που θα αγνοηθούν Enter top directory for search Εισαγάγετε τον κατάλογο εκκίνησης της αναζήτησης Browse Περιήγηση Restrict results to files in subtree: Περιορισμός των αποτελεσμάτων στα αρχεία του δέντρου: Start Search Εκκίνηση αναζήτησης Search for <br>documents<br>satisfying: Αναζήτηση <br>εγγράφων<br>που ικανοποιούν: Delete clause Διαγραφή ρήτρας Add clause Προσθήκη ρήτρας Check this to enable filtering on file types Ενεργοποιήστε αυτή την επιλογή για να χρησιμοποιηθεί το φιλτράρισμα στους τύπους αρχείων By categories Ανά κατηγορία Check this to use file categories instead of raw mime types Επιλέξτε το για να χρησιμοποιήσετε τις κατηγορίες αρχείων αντί των τύπων mime Close Κλείσιμο All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Όλα τα μη κενά πεδία στα δεξιά θα συνδυαστούν με ένα συνδυασμό ΚΑΙ (επιλογή «Όλες οι ρήτρες») ή Ή (επιλογή «Μια από τις ρήτρες»). <br> Τα πεδία του τύπου «Μια από αυτές τις λέξεις», «Όλες οι λέξεις» και «Καμιά από αυτές τις λέξεις» δέχονται ένα ανακάτεμα λέξεων και φράσεων σε εισαγωγικά. <br>Τα κενά πεδία αγνοούνται. Invert Αντιστροφή Minimum size. You can use k/K,m/M,g/G as multipliers Ελάχιστο μέγεθος: Μπορείτε να χρησιμοποιήσετε τα k/K,m/M,g/G ως πολλαπλασιαστές Min. Size Ελαχ. μέγεθος Maximum size. You can use k/K,m/M,g/G as multipliers Μέγιστο μέγεθος: Μπορείτε να χρησιμοποιήσετε τα k/K,m/M,g/G ως πολλαπλασιαστές Max. Size Μέγ. μέγεθος Select Επιλογή Filter Φίλτρο From Από To Έως Check this to enable filtering on dates Επιλέξτε αυτό για να ενεργοποιήσετε το φίλτρο στις ημερομηνίες Filter dates Φίλτρο ημερομηνίας Find Αναζήτηση Check this to enable filtering on sizes Επιλέξτε αυτό για να ενεργοποιήσετε το φιλτράρισμα στο μέγεθος αρχείων Filter sizes Φίλτρο μεγέθους Filter birth dates Φιλτράρισμα ημερομηνιών γέννησης ConfIndexW Can't write configuration file Αδύνατη η εγγραφή του αρχείου διαμόρφωσης Global parameters Καθολικές ρυθμίσεις Local parameters Τοπικές ρυθμίσεις Search parameters Ρυθμίσεις αναζήτησης Top directories Κατάλογοι εκκίνησης The list of directories where recursive indexing starts. Default: your home. Η λίστα των καταλόγων για την έναρξη της αναδρομικής ευρετηρίασης. Προεπιλογή: ο προσωπικός σας κατάλογος. Skipped paths Παραλειπόμενες διαδρομές These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Αυτά είναι ονόματα διαδρομών καταλόγων που δεν θα εισέλθουν στο ευρετήριο.<br>Τα στοιχεία της διαδρομής μπορεί να περιέχουν μπαλαντέρ (wildcards). Οι καταχωρήσεις πρέπει να ταιριάζουν με τις διαδρομές που βλέπει ο ευρετής (π.χ. εάν οι topdirs περιλαμβάνουν '/home/me' και '/home' είναι στην πραγματικότητα ένας σύνδεσμος με '/usr/home', μια σωστή καταχώρηση skippedPath θα είναι '/home/me/tmp*', όχι '/usr/home/me/tmp*') Stemming languages Γλώσσα για την επέκταση των όρων The languages for which stemming expansion<br>dictionaries will be built. Οι γλώσσες για τις οποίες θα δημιουργηθούν τα λεξικά επεκτάσεων<br>των όρων. Log file name Όνομα του αρχείου καταγραφών The file where the messages will be written.<br>Use 'stderr' for terminal output Το αρχείο που θα εγγραφούν τα μηνύματα.<br>Χρησιμοποιήστε 'stderr' για την έξοδο τερματικού Log verbosity level Επίπεδο ανάλυσης των καταγραφών This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Αυτή η τιμή ρυθμίζει την ποσότητα των απεσταλμένων μηνυμάτων,<br>από μόνο τα σφάλματα μέχρι πολλά δεδομένα αποσφαλμάτωσης. Index flush megabytes interval Καθυστέρηση εγγραφής του ευρετηρίου σε megabyte This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Αυτή η τιμή ρυθμίζει την ποσότητα των δεδομένων που δεικτοδοτούνται μεταξύ των εγγραφών στο δίσκο.<br>Βοηθά στον έλεγχο χρήσης της μνήμης. Προεπιλογή: 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Αυτό είναι το ποσοστό χρήσης δίσκου - συνολική χρήση δίσκων, όχι μέγεθος δείκτη - στο οποίο ευρετηρίαση θα αποτύχει και να σταματήσει.<br>Η προεπιλεγμένη τιμή του 0 αφαιρεί οποιοδήποτε όριο. No aspell usage Χωρίς χρήση του aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Απενεργοποιεί τη χρήση του aspell για τη δημιουργία των ορθογραφικών προσεγγίσεων.<br>Χρήσιμο αν το aspell δεν είναι εγκατεστημένο ή δεν λειτουργεί. Aspell language Γλώσσα του aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Η γλώσσα για το λεξικό aspell. Αυτό θα πρέπει να είναι του τύπου «en» ή «el» ...<br> Αν αυτή η τιμή δεν οριστεί, χρησιμοποιείται το εθνικό περιβάλλον NLS για να την υπολογίσει, που συνήθως δουλεύει. Για να πάρετε μια ιδέα του τι είναι εγκατεστημένο στο σύστημά σας, πληκτρολογήστε «aspell config» και παρατηρήστε τα αρχεία .dat στον κατάλογο «data-dir». Database directory name Κατάλογος αποθήκευσης του ευρετηρίου The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Το όνομα του καταλόγου αποθήκευσης του ευρετηρίου<br>Μια σχετική διαδρομή αναφερόμενη στη διαδρομή διαμόρφωσης. Η εξ' ορισμού είναι «xapiandb». Unac exceptions Εξαιρέσεις unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Αυτές είναι εξαιρέσεις για τον μηχανισμό unac, ο οποίος εξ' ορισμού, αφαιρεί όλους τους τονισμούς, και πραγματοποιεί κανονική αποσύνθεση. Μπορείτε να αναιρέσετε την αφαίρεση των τονισμών για ορισμένους χαρακτήρες, ανάλογα με τη γλώσσα σας, και διευκρινίστε άλλους αποσυνθέσεις, για παράδειγμα συμπλεγμένους χαρακτήρες. Στη λίστα διαχωρισμένη με κενά, ο πρώτος χαρακτήρας ενός αντικειμένου είναι η πηγή, το υπόλοιπο είναι η μετάφραση. Process the WEB history queue Επεξεργασία της ουράς ιστορικού του Ιστού Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Ενεργοποιεί τη δεικτοδότηση των επισκεπτόμενων σελίδων στον Firefox.<br>(θα πρέπει να εγκαταστήσετε και το πρόσθετο Firefox Recoll) Web page store directory name Όνομα καταλόγου αποθήκευσης ιστοσελίδων The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Το όνομα του καταλόγου αποθήκευσης αντιγράφων των επισκεφθέντων ιστοσελίδων.<br>Μια σχετική διαδρομή αναφερόμενη στη διαδρομή διαμόρφωσης. Max. size for the web store (MB) Μέγ. μέγεθος της λανθάνουσας μνήμης ιστού (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Οι εγγραφές θα ανακυκλωθούν μόλις επιτευχθεί το μέγεθος.<br>Μόνο η αύξηση του μεγέθους έχει πραγματικά νόημα, επειδή η μείωση της τιμής δεν θα περικόψει ένα υπάρχον αρχείο (μόνο χώρο αποβλήτων στο τέλος). Automatic diacritics sensitivity Αυτόματη ευαισθησία στους τόνους <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Αυτόματη εναλλαγή ευαισθησίας τονισμού αν ο όρος αναζήτησης διαθέτει τονισμένους χαρακτήρες (εκτός αυτών του unac_except_trans). Διαφορετικά θα πρέπει να χρησιμοποιήσετε τη γλώσσα της αναζήτησης και τον τροποποιητή <i>D</i> για τον καθορισμό της ευαισθησίας τονισμών. Automatic character case sensitivity Αυτόματη ευαισθησία πεζών/κεφαλαίων <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Αυτόματη εναλλαγή ευαισθησίας διάκρισης πεζών/κεφαλαίων αν η ο όρος αναζήτησης διαθέτει κεφαλαία γράμματα (εκτός του πρώτου γράμματος). Διαφορετικά θα πρέπει να χρησιμοποιήσετε τη γλώσσα της αναζήτησης και τον τροποποιητή <i>C</i> για τον καθορισμό της ευαισθησίας διάκρισης πεζών / κεφαλαίων. Maximum term expansion count Μέγιστο μέγεθος επέκτασης ενός όρου <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Μέγιστος αριθμός επέκτασης για έναν όρο (π.χ.: κατά τη χρήση χαρακτήρων υποκατάστασης). Η προκαθορισμένη τιμή 10000 είναι λογική και θα αποφύγει ερωτήματα που εμφανίζονται σαν παγωμένα την ίδια στιγμή που η μηχανή διαπερνά τη λίστα όρων. Maximum Xapian clauses count Μέγιστος αριθμός ρητρών Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Μέγιστος αριθμός στοιχειωδών ρητρών που προσθέτουμε σε ένα απλό ερώτημα Xapian. Σε μερικές περιπτώσεις, το αποτέλεσμα της επέκτασης των όρων μπορεί να είναι πολλαπλασιαστικό, και θα χρησιμοποιούσε υπερβολική μνήμη. Η προκαθορισμένη τιμή 100000 θα πρέπει να είναι επαρκής και συμβατή με μια τυπική διαμόρφωση υλικού. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... Οι γλώσσες για τις οποίες θα κατασκευαστούν οριοθετημένα λεξικά επέκτασης.<br>Δείτε την τεκμηρίωση Xapian stemmer για πιθανές αξίες. Π.χ. αγγλικά, γαλλικά, γερμανικά... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Η γλώσσα για το λεξικό aspell. Οι τιμές είναι κωδικοί γλώσσας 2 γραμμάτων, π.χ. 'en', 'fr' . .<br>Εάν αυτή η τιμή δεν οριστεί, το περιβάλλον NLS θα χρησιμοποιηθεί για τον υπολογισμό, το οποίο συνήθως λειτουργεί. Για να πάρετε μια ιδέα για το τι είναι εγκατεστημένο στο σύστημά σας, πληκτρολογήστε 'aspell config' και αναζητήστε . στα αρχεία μέσα στον κατάλογο 'data-dir'. Indexer log file name Όνομα αρχείου καταγραφής ευρετηρίου If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Αν είναι κενό, θα χρησιμοποιηθεί το παραπάνω όνομα αρχείου καταγραφής. Μπορεί να είναι χρήσιμο να έχετε ένα ξεχωριστό αρχείο καταγραφής για διαγνωστικούς σκοπούς, επειδή το κοινό αρχείο καταγραφής θα διαγραφεί όταν ξεκινήσει<br>το γραφικό περιβάλλον. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Δίσκος πλήρες όριο ποσοστό στο οποίο σταματάμε ευρετηρίαση<br>Π.χ. 90% για να σταματήσει σε 90% πλήρη, 0 ή 100 σημαίνει χωρίς όριο) Web history Ιστορικό ιστού Process the Web history queue Επεξεργασία της ουράς αναμονής ιστορικού ιστού (by default, aspell suggests mispellings when a query has no results). (εξ ορισμού, το aspell προτείνει ορθογραφικά λάθη όταν ένα ερώτημα δεν φέρει αποτελέσματα). Page recycle interval Χρονικό διάστημα ανακύκλωσης της σελίδας <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. <p>Εξ ορισμού, μόνο μια υπόσταση ενός URL διατηρείται στην κρυφή μνήμη. Αυτό μπορείτε να το αλλάξετε θέτοντας μια τιμή που καθορίζει την συχνότητα διατήρησης πολλαπλών υποστάσεων ('ημέρα', 'εβδομάδα', 'μήνας', 'έτος'). Σημειώστε ότι ξ αύξηση του χρονικού διαστήματος δεν διαγράφει τις υπάρχουσες καταχωρήσεις. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Σημείωση: οι παλιές σελίδες θα διαγραφούν ούτως ώστε να δημιουργηθεί χώρος για νέες σελίδες όταν θα επιτευχθεί το μέγιστο μέγεθος. Τρέχον μέγεθος: %1 Start folders Έναρξη φακέλων The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Η λίστα των φακέλων/καταλόγων που πρέπει να ευρετηριαστούν. Οι υποφάκελοι θα επεξεργαστούν αναδρομικά. Προεπιλογή: το σπίτι σας. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Ποσοστό κατωφλίου γεμάτωμα δίσκου στο οποίο σταματάμε τον δείκτη<br>(Π.χ. 90 για να σταματήσει στο 90% γεμάτο, 0 ή 100 σημαίνει ότι δεν υπάρχει όριο) Browser add-on download folder Φάκελος λήψης πρόσθετου προγράμματος περιήγησης Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Ορίστε αυτό μόνο αν έχετε ορίσει την παράμετρο "Υποφάκελος Λήψεων" στις ρυθμίσεις του πρόσθετου περιηγητή ιστού. Σε αυτήν την περίπτωση, πρέπει να είναι ο πλήρης δρόμος προς τον φάκελο (π.χ. /home/[εγώ]/Downloads/my-subdir) Store some GUI parameters locally to the index Αποθηκεύστε τις τοπικά κάποιες παραμέτρους GUI στον ευρετήριο <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index Ρυθμίσεις διεπαφής χρήστη (GUI) αποθηκεύονται συνήθως σε ένα γενικό αρχείο, έγκυρο για όλους τους δείκτες. Η ρύθμιση αυτή θα κάνει ορισμένες ρυθμίσεις, όπως η διάταξη του πίνακα αποτελεσμάτων, ειδικές για τον δείκτη. Suspend the real time indexer when running on battery Αναστείλετε τον δείκτη πραγματικού χρόνου κατά τη λειτουργία με μπαταρία. The indexer will wait for a return on AC and reexec itself when it happens Ο δείκτης θα περιμένει για επιστροφή στο AC και θα εκτελέσει ξανά τον εαυτό του όταν συμβεί αυτό. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Η λίστα των φακέλων/καταλόγων που πρέπει να ευρετηριαστούν, αναδρομικά με τους υπο-φακέλους τους. Το χαρακτήρας '~' επεκτείνεται στον φάκελο του αρχικού σας καταλόγου, που είναι η προεπιλεγμένη αρχική τιμή. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Μόνο οι τύποι MIME An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Μια αποκλειστική λίστα δεικτοδοτημένων τύπων mime.<br>Δεν θα δεικτοδοτηθεί τίποτα άλλο. Φυσιολογικά κενό και αδρανές Exclude mime types Αποκλεισμός τύπων αρχείων Mime types not to be indexed Οι τύποι Mime που δεν θα δεικτοδοτηθούν Max. compressed file size (KB) Μεγ.μέγεθος για τα συμπιεσμένα αρχεία (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Αυτή η τιμή καθορίζει ένα όριο πέραν του οποίου τα συμπιεσμένα αρχεία δεν θα επεξεργάζονται. Χρησιμοποιήστε -1 για κανένα όριο, 0 για να μην επεξεργάζονται τα συμπιεσμένα αρχεία. Max. text file size (MB) Μεγ. μέγεθος αρχείων κειμένου (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Αυτή η τιμή ορίζει ένα όριο πέραν του οποίου δεν θα γίνεται ευρετηρίαση για τα αρχεία κειμένου. Ορίστε -1 για κανένα όριο. Αυτό χρησιμεύει για τον αποκλεισμό από την ευρετηρίαση τεράστιων αρχείων καταγραφών. Text file page size (KB) Μέγεθος κοπής για τα αρχεία κειμένου (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Αν αυτή η τιμή έχει οριστεί και είναι θετική, τα αρχεία κειμένου θα κοπούν σε κομμάτια αυτού του μεγέθους για την ευρετηρίαση. Αυτό βοηθά στη μείωση των καταναλωμένων πόρων από την ευρετηρίαση και βοηθά τη φόρτωση για την προεπισκόπηση. Max. filter exec. time (s) Μέγιστο φίλτρο exec. χρόνος (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Τα εξωτερικά φίλτρα σε λειτουργία μεγαλύτερη από αυτό θα διακόπτονται. Χρήσιμο για τη σπάνια περίπτωση (π.χ. postscript) όπου ένα έγγραφο μπορεί να προκαλέσει ένα βρόγχο στο φίλτρο. Ορίστε το σε -1 για να αφαιρέσετε το όριο. Global Γενικά ConfigSwitchDLG Switch to other configuration Μετάβαση σε άλλη διαμόρφωση ConfigSwitchW Choose other Επιλέξτε άλλο Choose configuration directory Επιλέξτε τον κατάλογο διαμόρφωσης CronToolW Cron Dialog Διάλογος Cron <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> προγραμματισμός της περιοδικής ευρετηρίασης (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Κάθε πεδίο μπορεί να περιέχει ένα χαρακτήρα υποκατάστασης (*), μια απλή αριθμητική τιμή, λίστες διαχωρισμένες με κόμμα (1,3,5) και εύρη (1-7). Γενικότερα, τα πεδία θα χρησιμοποιηθούν <span style=" font-style:italic;">ως έχουν</span> στο αρχείο crontab, και η γενική σύνταξη crontab μπορεί να χρησιμοποιηθεί, δείτε στη σελίδα του εγχειριδίου crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Για παράδειγμα, εισάγοντας <span style=" font-family:'Courier New,courier';">*</span> στις <span style=" font-style:italic;">Ημέρες, </span><span style=" font-family:'Courier New,courier';">12,19</span> στις <span style=" font-style:italic;">Ώρες</span> και <span style=" font-family:'Courier New,courier';">15</span> στα <span style=" font-style:italic;">Λεπτά</span>, το recollindex θα ξεκινά κάθε μέρα στις 12:15 AM και 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ο προγραμματισμός με πολύ συχνές ενεργοποιήσεις είναι πιθανώς λιγότερο αποτελεσματικός από την ευρετηρίαση σε πραγματικό χρόνο.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Ημέρες της εβδομάδας (* ή 0-7, 0 ή 7 σημαίνει Κυριακή) Hours (* or 0-23) Ώρες (* ή 0-23) Minutes (0-59) Λεπτά (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Κάντε κλικ στο <span style=" font-style:italic;">Απενεργοποίηση</span> για να διακόψετε την περιοδική αυτόματη ευρετηρίαση, στο <span style=" font-style:italic;">Ενεργοποίηση</span> για να την ενεργοποιήσετε, και <span style=" font-style:italic;">Ακύρωση</span> για να μην αλλάξει τίποτα.</p></body></html> Enable Ενεργοποίηση Disable Απενεργοποίηση It seems that manually edited entries exist for recollindex, cannot edit crontab Φαίνεται ότι υπάρχουν καταχωρήσεις δημιουργημένες χειροκίνητα για το recollindex. Η επεξεργασία του αρχείου Cron δεν είναι δυνατή Error installing cron entry. Bad syntax in fields ? Σφάλμα κατά την εγκατάσταση της καταχώρησης cron. Κακή σύνταξη των πεδίων; EditDialog Dialog Διάλογος EditTrans Source path Διαδρομή πηγής Local path Τοπική διαδρομή Config error Σφάλμα διαμόρφωσης Original path Αρχική διαδρομή Path in index Διαδρομή στον ευρετήριο Translated path Μεταφρασμένη διαδρομή EditTransBase Path Translations Διαδρομή μεταφράσεων Setting path translations for Ορισμός διαδρομής μεταφράσεων για Select one or several file types, then use the controls in the frame below to change how they are processed Επιλέξτε έναν οι περισσότερους τύπους αρχείων, και στη συνέχεια χρησιμοποιήστε τα κουμπιά ελέγχου στο παρακάτω πλαίσιο για να αλλάξετε τον τρόπο επεξεργασίας Add Προσθήκη Delete Διαγραφή Cancel Ακύρωση Save Αποθήκευση FirstIdxDialog First indexing setup Διαμόρφωση της πρώτης δεικτοδότησης <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Φαίνεται ότι το ευρετήριο για αυτήν τη διαμόρφωση δεν υπάρχει ακόμα..</span><br /><br />Αν θέλετε απλά να δεικτοδοτήσετε τον προσωπικό σας κατάλογο με ένα ικανοποιητικό σύνολο προεπιλογών, πατήστε το κουμπί <span style=" font-style:italic;">«Έναρξη της ευρετηρίασης τώρα»</span>. Μπορείτε να ρυθμίσετε τις λεπτομέρειες αργότερα. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Αν επιθυμείτε περισσότερο έλεγχο, χρησιμοποιήστε τους παρακάτω συνδέσμους για να ρυθμίσετε τη διαμόρφωση της ευρετηρίασης και του προγραμματισμού.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Μπορείτε να έχετε πρόσβαση στα εργαλεία αυτά αργότερα από το μενού <span style=" font-style:italic;">Προτιμήσεις</span>.</p></body></html> Indexing configuration Διαμόρφωση ευρετηρίασης This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Σας επιτρέπει τη ρύθμιση των καταλόγων που επιθυμείτε να δεικτοδοτήσετε, και άλλων παραμέτρων όπως οι εξαιρούμενες διαδρομές αρχείων ή ονομάτων, των προκαθορισμένων συνόλων χαρακτήρων, κλπ. Indexing schedule Προγραμματισμός ευρετηρίασης This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Σας επιτρέπει την επιλογή μεταξύ της προγραμματισμένης ευρετηρίασης και αυτής σε πραγματικό χρόνο, και τον καθορισμό του προγραμματισμού για την πρώτη (βασισμένη στο εργαλείο cron). Start indexing now Έναρξη της ευρετηρίασης τώρα FragButs %1 not found. Δεν βρέθηκε το %1. %1: %2 %1: %2 Fragment Buttons Πλήκτρα θραυσμάτων Query Fragments Θραύσματα ερωτήματος IdxSchedW Index scheduling setup Διαμόρφωση του προγραμματισμού ευρετηρίασης <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Η ευρετηρίαση του <span style=" font-weight:600;">Recoll</span> μπορεί να βρίσκεται μόνιμα σε λειτουργία, επεξεργάζοντας τα αρχεία αμέσως μετά αφού τροποποιηθούν, ή να εκτελείται σε προκαθορισμένες στιγμές. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Μια ανάγνωση του εγχειριδίου μπορεί να σας βοηθήσει να επιλέξετε μεταξύ αυτών των προσεγγίσεων (πατήστε F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Αυτό το εργαλείο μπορεί να σας βοηθήσει να διαμορφώσετε την προγραμματισμένη ευρετηρίαση ή να ορίσετε μια αυτόματη έναρξη της ευρετηρίασης σε πραγματικό χρόνο κατά τη σύνδεσή σας (ή και τα δύο, κάτι που σπάνια χρειάζεται). </p></body></html> Cron scheduling Προγραμματισμός Cron The tool will let you decide at what time indexing should run and will install a crontab entry. Ο διάλογος σας επιτρέπει να προσδιορίσετε την ώρα έναρξης της ευρετηρίασης και θα εισάγει μια καταχώρηση crontab. Real time indexing start up Έναρξη της ευρετηρίασης σε πραγματικό χρόνο Decide if real time indexing will be started when you log in (only for the default index). Προσδιορίστε αν η ευρετηρίαση σε πραγματικό χρόνο θα ξεκινά με τη σύνδεσή σας (μόνο για το προκαθορισμένο ευρετήριο). ListDialog Dialog Διάλογος GroupBox Πλαίσιο Ομάδας Main No db directory in configuration Δεν έχει προσδιοριστεί ο κατάλογος της βάσης δεδομένων στη διαμόρφωση Could not open database in Αδυναμία ανοίγματος βάσης δεδομένων στο . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Κάντε κλικ στο κουμπί Ακύρωση αν θέλετε να επεξεργαστείτε το αρχείο ρυθμίσεων πριν ξεκινήσετε την ευρετηρίαση ή Εντάξει για να το αφήσετε να προχωρήσει. Configuration problem (dynconf Πρόβλημα ρύθμισης (dynconf "history" file is damaged or un(read)writeable, please check or remove it: Το αρχείο ιστορικού είτε είναι κατεστραμμένο είτε δεν είναι αναγνώσιμο/εγγράψιμο, παρακαλώ ελέγξτε το ή διαγράψτε το: "history" file is damaged, please check or remove it: "το ιστορικό" το αρχείο είναι κατεστραμμένο, παρακαλώ ελέγξτε ή αφαιρέστε το: Needs "Show system tray icon" to be set in preferences! Χρειάζεται να οριστεί το "Εμφάνιση εικονιδίου στη γραμμή εργασιύ" στις προτιμήσεις! PTransEdit Path in index Διαδρομή στον ευρετήριο Translated path Μεταφρασμένη διαδρομή Config error Σφάλμα διαμόρφωσης Original path Αρχική διαδρομή Local path Τοπική διαδρομή PTransEditBase Path Translations Διαδρομή μεταφράσεων Select one or several file types, then use the controls in the frame below to change how they are processed Επιλέξτε έναν οι περισσότερους τύπους αρχείων, και στη συνέχεια χρησιμοποιήστε τα κουμπιά ελέγχου στο παρακάτω πλαίσιο για να αλλάξετε τον τρόπο επεξεργασίας Add Προσθήκη Delete Διαγραφή Cancel Ακύρωση Save Αποθήκευση Preview &Search for: &Αναζήτηση για: &Next &Επόμενο &Previous &Προηγούμενο Match &Case Διάκριση &πεζών/κεφαλαίων Clear Καθαρισμός Creating preview text Δημιουργία του κειμένου προεπισκόπησης Loading preview text into editor Φόρτωση του κειμένου προεπισκόπησης στον επεξεργαστή Cannot create temporary directory Αδυναμία δημιουργίας προσωρινού καταλόγου Cancel Ακύρωση Close Tab Κλείσιμο της καρτέλας Missing helper program: Ελλείποντα εξωτερικά προγράμματα φίλτρου: Can't turn doc into internal representation for Αδύνατη η μεταγλώττιση του εγγράφου σε εσωτερική αναπαράσταση για Cannot create temporary directory: Αδυναμία δημιουργίας του προσωρινού καταλόγου: Error while loading file Σφάλμα κατά τη φόρτωση του αρχείου Form Φόρμα Tab 1 Καρτέλα 1 Open Άνοιγμα Canceled Ακυρώθηκε Error loading the document: file missing. Σφάλμα κατά τη φόρτωση του εγγράφου: το αρχείο λείπει. Error loading the document: no permission. Σφάλμα κατά τη φόρτωση του εγγράφου: δεν υπάρχει άδεια. Error loading: backend not configured. Σφάλμα φόρτωσης: το σύστημα υποστήριξης δεν έχει ρυθμιστεί. Error loading the document: other handler error<br>Maybe the application is locking the file ? Σφάλμα κατά τη φόρτωση του εγγράφου: άλλο σφάλμα χειριστή<br>Ίσως η εφαρμογή να κλειδώνει το αρχείο ? Error loading the document: other handler error. Σφάλμα κατά τη φόρτωση του εγγράφου: άλλο σφάλμα χειρισμού. <br>Attempting to display from stored text. <br>Προσπάθεια εμφάνισης από το αποθηκευμένο κείμενο. Could not fetch stored text Αδύνατη η ανάκτηση του αποθηκευμένου κειμένου Previous result document Έγγραφο προηγούμενου αποτελέσματος Next result document Έγγραφο επόμενου αποτελέσματος Preview Window Προεπισκόπηση Παραθύρου Close Window Κλείσιμο Παραθύρου Next doc in tab Επόμενο doc στην καρτέλα Previous doc in tab Προηγούμενο doc στην καρτέλα Close tab Κλείσιμο καρτέλας Print tab Εκτύπωση καρτέλας Close preview window Κλείσιμο παραθύρου προεπισκόπησης Show next result Εμφάνιση επόμενου αποτελέσματος Show previous result Εμφάνιση προηγούμενου αποτελέσματος Print Εκτύπωση PreviewTextEdit Show fields Εμφάνιση των πεδίων Show main text Εμφάνιση του σώματος του κειμένου Print Εκτύπωση Print Current Preview Εκτύπωση του παραθύρου προεπισκόπησης Show image Εμφάνιση της εικόνας Select All Επιλογή όλων Copy Αντιγραφή Save document to file Αποθήκευση του εγγράφου Fold lines Αναδίπλωση των γραμμών Preserve indentation Διατήρηση της εσοχής Open document Άνοιγμα εγγράφου Reload as Plain Text Επαναφόρτωση ως Απλό Κείμενο Reload as HTML Επαναφόρτωση ως HTML QObject Global parameters Καθολικές ρυθμίσεις Local parameters Τοπικές ρυθμίσεις <b>Customised subtrees <b>Κατάλογοι με προσαρμοσμένες ρυθμίσεις The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Η λίστα των υποκαταλόγων της ζώνης με ευρετήριο<br>όπου έχουν προκαθοριστεί ορισμένες παράμετροι. Προεπιλογή: κενό. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Οι παράμετροι που ακολουθούν έχουν καθοριστεί είτε καθολικά, αν η επιλογή στην παραπάνω λίστα<br>είναι κενή ή μια κενή γραμμή, είτε για τον επιλεγμένο κατάλογο.<br>Μπορείτε να προσθέσετε και να αφαιρέσετε καταλόγους κάνοντας κλικ στα κουμπιά +/-. Skipped names Αγνοημένα ονόματα These are patterns for file or directory names which should not be indexed. Μοτίβα που καθορίζουν τα αρχεία ή καταλόγους που δεν θα πρέπει να έχουν ευρετήριο. Default character set Σύνολο χαρακτήρων<br>εξ ορισμού This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Το σύνολο των χαρακτήρων που χρησιμοποιείται για την ανάγνωση των αρχείων στα οποία δεν μπορεί να αναγνωριστεί το σύνολο χαρακτήρων με εσωτερικό τρόπο, για παράδειγμα τα αρχεία απλού κειμένου.<br>Η προκαθορισμένη τιμή είναι κενή, και το πρόγραμμα χρησιμοποιεί αυτή του περιβάλλοντος. Follow symbolic links Ακολούθηση των συμβολικών δεσμών Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Να δημιουργηθεί ευρετήριο για αρχεία και καταλόγους που υποδεικνύονται από συμβολικούς δεσμούς. Η προκαθορισμένη τιμή είναι όχι, για την αποφυγή διπλότυπης ευρετηρίασης Index all file names Ευρετήριο για όλα τα ονόματα αρχείων Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Ευρετήριο για τα ονόματα των αρχείων των οποίων το περιεχόμενο δεν έχει αναγνωριστεί ή επεξεργαστεί (χωρίς τύπο mime, ή μη υποστηριζόμενος τύπος). Η προκαθορισμένη τιμή είναι αληθές Beagle web history Ιστορικό ιστού Beagle Search parameters Ρυθμίσεις αναζήτησης Web history Ιστορικό ιστού Default<br>character set Σύνολο χαρακτήρων<br>εξ ορισμού Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Το σύνολο των χαρακτήρων που χρησιμοποιείται για την ανάγνωση των αρχείων που δεν έχουν εσωτερικό αναγνωριστικό των χαρακτήρων, για παράδειγμα αρχεία απλού κειμένου: <br>Η τιμή εξ ορισμού είναι κενή, και χρησιμοποιείται η τιμή του περιβάλλοντος NLS. Ignored endings Αγνοημένες καταλήξεις These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Αυτές είναι καταλήξεις ονομάτων αρχείων για αρχεία τα οποία θα αναπροσαρμόζονται μόνο από περιεχόμενο (καμία προσπάθεια ταυτοποίησης τύπου MIME, καμία αποσυμπίεση, δεν ευρετηρίαση περιεχομένου. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Αυτές είναι καταλήξεις αρχείων στα οποία η ευρετηρίαση θα γίνει μόνο βάσει του ονόματος (χωρίς προσπάθεια αναγνώρισης του τύπου MIME, χωρίς αποσυμπίεση, χωρίς δεικτοδότηση του περιεχομένου). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>Οι παράμετροι που ακολουθούν έχουν οριστεί είτε στο ανώτερο επίπεδο, αν δεν έχει επιλεγεί τίποτα ή μια κενή γραμμή στο πλαίσιο λίστας παραπάνω, ή για τον επιλεγμένο υποκατάλογο. Μπορείτε να προσθέσετε ή να καταργήσετε καταλόγους κάνοντας κλικ στα πλήκτρα +/. These are patterns for file or directory names which should not be indexed. Αυτά είναι μοτίβα για ονόματα αρχείων ή φακέλων τα οποία δεν πρέπει να ευρετηριαστούν. QWidget Create or choose save directory Δημιουργία ή επιλογή του καταλόγου αποθήκευσης Choose exactly one directory Επιλέξτε μόνο έναν κατάλογο Could not read directory: Αδύνατη η ανάγνωση του καταλόγου: Unexpected file name collision, cancelling. Απροσδόκητη σύγκρουση ονομάτων αρχείων, ακύρωση. Cannot extract document: Αδύνατη η εξαγωγή του εγγράφου: &Preview &Προεπισκόπηση &Open Ά&νοιγμα Open With Άνοιγμα με Run Script Εκτέλεση μακροεντολής Copy &File Name Αντιγραφή του ονόματος του α&ρχείου Copy &URL Αντιγραφή του &URL &Write to File &Εγγραφή σε αρχείο Save selection to files Αποθήκευση της επιλογής σε αρχεία Preview P&arent document/folder Προεπισκόπηση του &γονικού εγγράφου/καταλόγου &Open Parent document/folder &Άνοιγμα του γονικού εγγράφου/καταλόγου Find &similar documents Αναζήτηση παρό&μοιων εγγράφων Open &Snippets window Άνοιγμα του παραθύρου απο&σπασμάτων Show subdocuments / attachments Εμφάνιση των υπο-εγγράφων / συνημμένων &Open Parent document &Άνοιγμα γονικού εγγράφου &Open Parent Folder &Άνοιγμα Γονικού Φακέλου Copy Text Αντιγραφή κειμένου Copy &File Path Αντιγραφή της &πλήρους διαδρομής αρχείου Copy File Name Αντιγραφή του ονόματος του αρχείου QxtConfirmationMessage Do not show again. Να μην εμφανιστεί ξανά. RTIToolW Real time indexing automatic start Αυτόματη έναρξη ευρετηρίασης σε πραγμ. χρόνο <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Η ευρετηρίαση του <span style=" font-weight:600;">Recoll</span> μπορεί να έχει ρυθμιστεί να εκτελείται στο παρασκήνιο, ενημερώνοντας το ευρετήριο σταδιακά κατά την τροποποίηση του αρχείου. Επωφελείστε από ένα ευρετήριο πάντα ενημερωμένο, αλλά καταναλώνονται συνέχεια πόροι του συστήματος (μνήμη και επεξεργαστής).</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Εκκίνηση του δαίμονα ευρετηρίασης κατά τη σύνδεσή μου. Also start indexing daemon right now. Επίσης να γίνει έναρξη της ευρετηρίασης τώρα. Replacing: Αντικατάσταση του: Replacing file Αντικατάσταση του αρχείου Can't create: Αδυναμία δημιουργίας: Warning Προσοχή Could not execute recollindex Αδυναμία εκτέλεσης του recollindex Deleting: Διαγραφή: Deleting file Διαγραφή του αρχείου Removing autostart Αφαίρεση του autostart Autostart file deleted. Kill current process too ? Το αρχείο autostart διαγράφτηκε. Τερματισμός της διεργασίας σε εξέλιξη; Configuration name Όνομα διαμόρφωσης Short alphanumeric nickname for this config Σύντομο αλφαριθμητικό ψευδώνυμο για αυτή τη διαμόρφωση Could not find Δεν μπόρεσα να βρω RclCompleterModel Hits Εντοπισμοί Hits RclMain About Recoll Σχετικά με το Recoll Executing: [ Εκτέλεση του: [ Cannot retrieve document info from database Αδύνατη η πρόσβαση στο έγγραφο στη βάση δεδομένων Warning Προσοχή Can't create preview window Αδύνατη η δημιουργία του παραθύρου προεπισκόπησης Query results Αποτελέσματα της αναζήτησης Document history Ιστορικό των ανοιγμένων εγγράφων History data Δεδομένα του ιστορικού Indexing in progress: Ευρετηρίαση σε εξέλιξη: Files Αρχεία Purge Καθαρισμός Stemdb Stemdb Closing Κλείσιμο Unknown Άγνωστο This search is not active any more Η αναζήτηση δεν είναι ενεργή πια Can't start query: Μπορεί't ερώτημα εκκίνησης: Bad viewer command line for %1: [%2] Please check the mimeconf file Κακοδιατυπωμένη εντολή για %1: [%2] Παρακαλώ ελέγξτε το αρχείο mimeconf Cannot extract document or create temporary file Αδύνατη η εξαγωγή του εγγράφου ή η δημιουργία ενός προσωρινού αρχείου (no stemming) (χωρίς επέκταση) (all languages) (όλες οι γλώσσες) error retrieving stemming languages σφάλμα στη λήψη της λίστας των γλωσσών επέκτασης Update &Index Ενημέρωση του &ευρετηρίου Indexing interrupted Η ευρετηρίαση διεκόπη Stop &Indexing Διακοπή της &ευρετηρίασης All Όλα media πολυμέσα message μήνυμα other άλλα presentation παρουσίαση spreadsheet λογιστικό φύλλο text κείμενο sorted ταξινομημένο filtered φιλτραρισμένο External applications/commands needed and not found for indexing your file types: Απαιτούνται εξωτερικές εφαρμογές/εντολές που δεν βρέθηκαν για την ευρετηρίαση των τύπων των αρχείων σας: No helpers found missing Δεν λείπει καμιά εφαρμογή Missing helper programs Ελλείπουσες βοηθητικές εφαρμογές Save file dialog Διάλογος αποθήκευσης αρχείου Choose a file name to save under Επιλέξτε ένα όνομα αρχείου για αποθήκευση στο Document category filter Φίλτρο κατηγοριών των εγγράφων No external viewer configured for mime type [ Κανένας ρυθμισμένος προβολέας για τον τύπο MIME [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Ο καθορισμένος προβολέας στο mimeview για %1: %2 δεν βρέθηκε. Θέλετε να ξεκινήσετε το διάλογο με τις προτιμήσεις; Can't access file: Αδύνατη η πρόσβαση στο αρχείο: Can't uncompress file: Αδύνατη η αποσυμπίεση του αρχείου: Save file Αποθήκευση του αρχείου Result count (est.) Αριθμός αποτελεσμάτων (εκτίμ.) Query details Λεπτομέρειες της αναζήτησης Could not open external index. Db not open. Check external index list. Αδύνατο το άνοιγμα ενός εξωτερικού ευρετηρίου. Η βάση δεδομένων δεν είναι ανοιχτή. Ελέγξτε τη λίστα των εξωτερικών ευρετηρίων. No results found Δεν βρέθηκαν αποτελέσματα None Τίποτα Updating Ενημέρωση Done Έγινε Monitor Παρακολούθηση Indexing failed Η ευρετηρίαση απέτυχε The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Η διεργασία ευρετηρίασης σε εξέλιξη δεν ξεκίνησε από αυτή τη διεπαφή. Κάντε κλικ στο Εντάξει για να τη σκοτώσετε όπως και να 'χει, ή στο Ακύρωση για να την αφήσετε ήσυχη Erasing index Διαγραφή του ευρετηρίου Reset the index and start from scratch ? Διαγραφή του ευρετηρίου και επανέναρξη από το μηδέν; Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Αίτημα σε εξέλιξη.<br>Λόγω εσωτερικών περιορισμών,<br>η ακύρωση θα τερματίσει την εκτέλεση του προγράμματος Error Σφάλμα Index not open Το ευρετήριο δεν είναι ανοιχτό Index query error Σφάλμα στην αναζήτηση στο ευρετήριο Indexed Mime Types Τύποι Mime Με Ευρετήριο Content has been indexed for these MIME types: Το περιεχόμενο έχει ευρεθεί για αυτούς τους τύπους MIME: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Το ευρετήριο δεν είναι ενημερωμένο για αυτό το αρχείο. Υπάρχει κίνδυνος εμφάνισης μιας εσφαλμένης καταχώρησης. Κάντε κλικ στο Εντάξει για να ενημερώσετε το ευρετήριο για αυτό το αρχείο, και επανεκκινήστε το αίτημα μετά την ολοκλήρωση της ενημέρωσης του ευρετηρίου. Διαφορετικά, κάντε κλικ στο Ακύρωση. Can't update index: indexer running Αδύνατη η ενημέρωση του ευρετηρίου: μια εργασία ευρετηρίασης βρίσκεται σε εξέλιξη Indexed MIME Types Τύποι MIME με ευρετήριο Bad viewer command line for %1: [%2] Please check the mimeview file Λανθασμένη γραμμή εντολής για %1: [%2] Παρακαλώ ελέγξτε το αρχείο mimeview Viewer command line for %1 specifies both file and parent file value: unsupported Η γραμμή εντολής για %1 καθορίζει την ίδια στιγμή το αρχείο και τον γονέα του: δεν υποστηρίζεται Cannot find parent document Αδύνατη η εύρεση του γονικού εγγράφου Indexing did not run yet Η δεικτοδότηση δεν έχει εκτελεστή ακόμα External applications/commands needed for your file types and not found, as stored by the last indexing pass in Εξωτερικές εφαρμογές και εντολές απαραίτητες για τους τύπους των εγγράφων σας, και που δεν έχουν βρεθεί, όπως έχουν ταξινομηθεί από την τελευταία δεικτοδότηση που έλαβε χώρα στις Index not up to date for this file. Refusing to risk showing the wrong entry. Η δεικτοδότηση δεν είναι ενημερωμένη για αυτό το αρχείο. Πιθανός κίνδυνος εμφάνισης μιας λανθασμένης εισαγωγής. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Κάντε κλικ στο Εντάξει για να ενημερώσετε τη δεικτοδότηση για αυτό το αρχείο, και στη συνέχεια επανεκκινήστε την αναζήτηση όταν θα έχει ολοκληρωθεί η δημιουργία του ευρετηρίου. Διαφορετικά, κλικ στο Ακύρωση. Indexer running so things should improve when it's done Η δημιουργία του ευρετηρίου βρίσκεται σε εξέλιξη, το αρχείο θα ενημερωθεί μετά το πέρας της ενημέρωσης Sub-documents and attachments Υπο-έγγραφα και συνημμένα Document filter Φίλτρο εγγράφου Index not up to date for this file. Refusing to risk showing the wrong entry. Το ευρετήριο δεν είναι ενημερωμένο για αυτό το αρχείο. Άρνηση της διακινδυνευμένης εμφάνισης μιας λανθασμένης καταχώρησης. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Κάντε κλικ στο Εντάξει για να ενημερώσετε το ευρετήριο για αυτό το αρχείο, στη συνέχεια θα πρέπει να εκτελέσετε εκ νέου το ερώτημα μετ το πέρας της δεικτοδότησης. The indexer is running so things should improve when it's done. Τα πράγματα θα βελτιωθούν μετά το πέρας της δεικτοδότησης. The document belongs to an external indexwhich I can't update. Το έγγραφο ανήκει σε ένα εξωτερικό ευρετήριο το οποίο δεν μπορώ να ενημερώσω. Click Cancel to return to the list. Click Ignore to show the preview anyway. Κάντε κλικ στο Ακύρωση για να επιστρέψετε στον κατάλογο. Κάντε κλικ στο Αγνόηση για την εμφάνιση της προεπισκόπησης ούτως ή άλλως. Duplicate documents Διπλότυπα έγγραφα These Urls ( | ipath) share the same content: Αυτά τα Url (| ipath) μοιράζονται το ίδιο περιεχόμενο: Bad desktop app spec for %1: [%2] Please check the desktop file Κακοδιατυπωμένος προσδιορισμός εφαρμογής επιφάνειας εργασίας για το %1: [%2] Παρακαλώ ελέγξτε το αρχείο της επιφάνειας εργασίας Bad paths Λανθασμένες διαδρομές Bad paths in configuration file: Λάθος μονοπάτια στο αρχείο ρυθμίσεων: Selection patterns need topdir Τα μοτίβα επιλογής χρειάζονται topdir Selection patterns can only be used with a start directory Τα μοτίβα επιλογής μπορούν να χρησιμοποιηθούν μόνο με έναν κατάλογο έναρξης No search Καμία αναζήτηση No preserved previous search Δεν υπάρχει διατηρημένη προηγούμενη αναζήτηση Choose file to save Επιλέξτε αρχείο για αποθήκευση Saved Queries (*.rclq) Αποθηκευμένα Ερωτήματα (*.rclq) Write failed Η εγγραφή απέτυχε Could not write to file Αδυναμία εγγραφής στο αρχείο Read failed Η ανάγνωση απέτυχε Could not open file: Αδυναμία ανοίγματος αρχείου: Load error Σφάλμα φόρτωσης Could not load saved query Αδύνατη η φόρτωση του αποθηκευμένου ερωτήματος Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Άνοιγμα ενός προσωρινού αντιγράφου. Οι αλλαγές θα χαθούν αν don't τις αποθηκεύσετε<br/>σε μια μόνιμη θέση. Do not show this warning next time (use GUI preferences to restore). Να μην εμφανιστεί αυτή η προειδοποίηση την επόμενη φορά (χρησιμοποιήστε τις προτιμήσεις GUI για επαναφορά). Disabled because the real time indexer was not compiled in. Απενεργοποιήθηκε επειδή το ευρετήριο πραγματικού χρόνου δεν μεταγλωττίστηκε. This configuration tool only works for the main index. Αυτό το εργαλείο ρύθμισης παραμέτρων λειτουργεί μόνο για τον κύριο δείκτη. The current indexing process was not started from this interface, can't kill it Η τρέχουσα διαδικασία ευρετηρίασης δεν ξεκίνησε από αυτή τη διασύνδεση· αδύνατη η διακοπή της. The document belongs to an external index which I can't update. Το έγγραφο ανήκει σε ένα εξωτερικό ευρετήριο το οποίο δεν μπορώ να ενημερώσω. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Κάντε κλικ στο κουμπί Ακύρωση για να επιστρέψετε στη λίστα. <br>Κάντε κλικ στο κουμπί Παράβλεψη για να εμφανίσετε την προεπισκόπηση ούτως ή άλλως (και θυμηθείτε για αυτή τη συνεδρία). Index scheduling Προγραμματισμός ευρετηρίου Sorry, not available under Windows for now, use the File menu entries to update the index Λυπούμαστε, δεν είναι διαθέσιμο στα Windows για τώρα, χρησιμοποιήστε τις καταχωρήσεις μενού αρχείου για να ενημερώσετε το ευρετήριο Can't set synonyms file (parse error?) Αδύνατος ο ορισμός του αρχείου συνώνυμων (σφάλμα ανάλυσης;) Index locked Το ευρετήριο κλειδώθηκε Unknown indexer state. Can't access webcache file. Άγνωστη κατάσταση ευρετηρίου. Αδύνατη η πρόσβαση στο webcache. Indexer is running. Can't access webcache file. Το ευρετήριο εκτελείται. Αδύνατη η πρόσβαση στο αρχείο webcache. with additional message: με πρόσθετο μήνυμα: Non-fatal indexing message: Μη μοιραίο σφάλμα ευρετηρίασης: Types list empty: maybe wait for indexing to progress? Κενή λίστα τύπων: αναμονή της εξέλιξης της ευρετηρίασης; Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Η γραμμή εντολών προβολής για το %1 καθορίζει το γονικό αρχείο αλλά το URL είναι http[s]: δεν υποστηρίζεται Tools Εργαλεία Results Αποτελέσματα (%d documents/%d files/%d errors/%d total files) (%d έγγραφα/%d αρχεία/%d σφάλματα/%d συνολικά αρχεία) (%d documents/%d files/%d errors) (%d έγγραφα/%d αρχεία/%d σφάλματα) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Κενές ή ανύπαρκτες διαδρομές στο αρχείο ρυθμίσεων. Κάντε κλικ στο κουμπί Εντάξει για να ξεκινήσετε την ευρετηρίαση ούτως ή άλλως (δεν θα εκκαθαριστούν δεδομένα από το ευρετήριο): Indexing done Ολοκλήρωση ευρετηρίου Can't update index: internal error Αδύνατη η ενημέρωση του ευρετηρίου: εσωτερικό σφάλμα Index not up to date for this file.<br> Το ευρετήριο δεν είναι ενημερωμένο για αυτό το αρχείο.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Επίσης, φαίνεται ότι η τελευταία ενημέρωση ευρετηρίου για το αρχείο απέτυχε.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Κάντε κλικ στο κουμπί Εντάξει για να προσπαθήσετε να ενημερώσετε το ευρετήριο για αυτό το αρχείο. Θα πρέπει να εκτελέσετε ξανά το ερώτημα όταν ολοκληρωθεί η ευρετηρίαση.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Κάντε κλικ στο κουμπί Ακύρωση για να επιστρέψετε στη λίστα.<br>Κάντε κλικ στο κουμπί Παράβλεψη για να εμφανίσετε την προεπισκόπηση ούτως ή άλλως (και θυμηθείτε για αυτή τη συνεδρία). Υπάρχει κίνδυνος να παρουσιαστεί λανθασμένη είσοδος.<br/> documents έγγραφα document έγγραφο files αρχεία file αρχείο errors σφάλματα error σφάλμα total files) συνολικά αρχεία) No information: initial indexing not yet performed. Δεν υπάρχουν πληροφορίες: η αρχική ευρετηρίαση δεν έχει πραγματοποιηθεί ακόμα. Batch scheduling Ομαδικός προγραμματισμός The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Χρησιμοποιήστε αυτό το εργαλείο για τον προγραμματισμό εκτέλεσης της ευρετηρίασης. Χρησιμοποιεί τον προγραμματιστή εργασιών των Windows. Confirm Επιβεβαίωση Erasing simple and advanced search history lists, please click Ok to confirm Διαγραφή απλών και προηγμένων λιστών ιστορικού αναζήτησης, παρακαλώ κάντε κλικ στο κουμπί Εντάξει για επιβεβαίωση Could not open/create file Αδυναμία ανοίγματος/δημιουργίας αρχείου F&ilter Φί&λτρο Could not start recollindex (temp file error) Αδυναμία εκκίνησης του recollindex (προσωρινό σφάλμα αρχείου) Could not read: Αδυναμία ανάγνωσης: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Αυτό θα αντικαταστήσει τα τρέχοντα περιεχόμενα της λίστας αποτελεσμάτων συμβολοσειράς κεφαλίδας και το όνομα αρχείου GUI qss. Συνέχεια ? You will need to run a query to complete the display change. Θα χρειαστεί να εκτελέσετε ένα ερώτημα για να ολοκληρώσετε την αλλαγή της οθόνης. Simple search type Απλός τύπος αναζήτησης Any term Οποιοσδήποτε όρος All terms Όλοι οι όροι File name Όνομα του αρχείου Query language Γλώσσα ερωτημάτων Stemming language Γλώσσα για την ανάπτυξη των όρων Main Window Κύριο παράθυρο Focus to Search Εστίαση στην αναζήτηση Focus to Search, alt. Εστίαση στην Αναζήτηση, alt. Clear Search Καθαρισμός αναζήτησης Focus to Result Table Εστίαση στον πίνακα αποτελεσμάτων Clear search Εκκαθάριση αναζήτησης Move keyboard focus to search entry Μετακίνηση εστίασης πληκτρολογίου στην καταχώρηση αναζήτησης Move keyboard focus to search, alt. Μετακίνηση εστίασης πληκτρολογίου στην αναζήτηση, alt. Toggle tabular display Εναλλαγή εμφάνισης πίνακα Move keyboard focus to table Μετακίνηση εστίασης πληκτρολογίου στον πίνακα Flushing Εγγραφή του δείκτη Show menu search dialog Εμφάνιση του διαλόγου του μενού αναζήτησης Duplicates Διπλότυπα Filter directories Φιλτράρισμα καταλόγων Main index open error: Σφάλμα ανοίγματος του βασικού ευρετηρίου: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. . Το ευρετήριο ίσως είναι κατεστραμμένο. Προσπαθήστε να εκτελέσετε το xapian-check ή την επανακατασκευή του ευρετηρίου. This search is not active anymore Αυτή η αναζήτηση δεν είναι ενεργή πλέον Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Η γραμμή εντολών του προβολέα για το %1 καθορίζει το γονικό αρχείο αλλά η διεύθυνση URL δεν είναι file:// : μη υποστηριζόμενη The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Ο προβολέας που καθορίζεται στο mimeview για το %1: %2 δεν βρέθηκε. Θέλετε να ξεκινήσετε το παράθυρο προτιμήσεων; Show advanced search dialog Εμφάνιση προχωρημένου παραθύρου αναζήτησης with additional message: RclMainBase Previous page Προηγούμενη σελίδα Next page Επόμενη σελίδα &File &Αρχείο E&xit Έ&ξοδος &Tools &Εργαλεία &Help &Βοήθεια &Preferences &Προτιμήσεις Search tools Εργαλεία αναζήτησης Result list Λίστα αποτελεσμάτων &About Recoll &Σχετικά με το Recoll Document &History &Ιστορικό των εγγράφων Document History Ιστορικό των εγγράφων &Advanced Search &Προχωρημένη αναζήτηση Advanced/complex Search Προχωρημένη αναζήτηση &Sort parameters &Ρυθμίσεις ταξινόμησης Sort parameters Ρυθμίσεις ταξινόμησης Next page of results Επόμενη σελίδα των αποτελεσμάτων Previous page of results Προηγούμενη σελίδα αποτελεσμάτων &Query configuration Δια&μόρφωση της αναζήτησης &User manual Ε&γχειρίδιο Recoll Recoll Ctrl+Q Ctrl+Q Update &index Ε&νημέρωση ευρετηρίου Term &explorer Ε&ξερευνητής του ευρετηρίου Term explorer tool Εργαλείο εξερεύνησης του ευρετηρίου External index dialog Εξωτερικά ευρετήρια &Erase document history &Διαγραφή του ιστορικού εγγράφων First page Πρώτη σελίδα Go to first page of results Μετάβαση στην πρώτη σελίδα αποτελεσμάτων &Indexing configuration Διαμόρφωση ευρετηρίασης All Όλα &Show missing helpers Ε&μφάνιση των ελλειπουσών εφαρμογών PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen Π&λήρης οθόνη F11 F11 Full Screen Πλήρης οθόνη &Erase search history Δια&γραφή του ιστορικού αναζητήσεων sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Ταξινόμηση ανά ημερομηνία από την παλαιότερη στη νεότερη sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Ταξινόμηση ανά ημερομηνία από τη νεότερη στην παλαιότερη Show Query Details Εμφάνιση της αναζήτησης λεπτομερειακά Show results as table Εμφάνιση των αποτελεσμάτων σε πίνακα &Rebuild index Α&νακατασκευή του ευρετηρίου &Show indexed types Εμ&φάνιση των τύπων με ευρετήριο Shift+PgUp Shift+PgUp &Indexing schedule &Προγραμματισμός της ευρετηρίασης E&xternal index dialog Δια&μόρφωση των εξωτερικών ευρετηρίων &Index configuration Διαμόρφωση &ευρετηρίου &GUI configuration Διαμόρφωση &περιβάλλοντος &Results Αποτε&λέσματα Sort by date, oldest first Ταξινόμηση ανά ημερομηνία, τα παλαιότερα πρώτα Sort by date, newest first Ταξινόμηση ανά ημερομηνία, τα νεότερα πρώτα Show as table Εμφάνιση ως πίνακας Show results in a spreadsheet-like table Εμφάνιση των αποτελεσμάτων σε έναν πίνακα ως φύλλο εργασίας Save as CSV (spreadsheet) file Αποθήκευση ως αρχείο CSV (φύλλο εργασίας) Saves the result into a file which you can load in a spreadsheet Αποθηκεύει το αποτέλεσμα σε ένα αρχείο το οποίο μπορείτε να φορτώσετε σε ένα φύλλο εργασίας Next Page Επόμενη σελίδα Previous Page Προηγούμενη σελίδα First Page Πρώτη σελίδα Query Fragments Θραύσματα ερωτήματος With failed files retrying Με επανεπεξεργασία των αποτυχημένων αρχείων Next update will retry previously failed files Η επόμενη ενημέρωση θα επιχειρήσει ξανά με τα αποτυχημένα αρχεία Save last query Αποθήκευση τελευταίου ερωτήματος Load saved query Φόρτωση αποθηκευμένου ερωτήματος Special Indexing Ειδική ευρετηρίαση Indexing with special options Ευρετηρίαση με ειδικές επιλογές Indexing &schedule &Προγραμματισμός ευρετηρίου Enable synonyms Ενεργοποίηση συνώνυμων &View &Προβολή Missing &helpers Ελλείποντες &βοηθοί Indexed &MIME types Τύποι &MIME ευρετηρίου Index &statistics &Στατιστικά ευρετηρίου Webcache Editor Επεξεργαστής Webcache Trigger incremental pass Ενεργοποίηση προοδευτικής ευρετηρίασης E&xport simple search history &Εξαγωγή ιστορικού απλής αναζήτησης Use default dark mode Χρήση προεπιλεγμένης σκοτεινής λειτουργίας Dark mode Σκοτεινή λειτουργία &Query &Ερώτημα Increase results text font size Αύξηση μεγέθους γραμματοσειράς του κειμένου των αποτελεσμάτων Increase Font Size Αύξηση μεγέθους γραμματοσειράς Decrease results text font size Μείωση μεγέθους γραμματοσειράς του κειμένου των αποτελεσμάτων Decrease Font Size Μείωση μεγέθους γραμματοσειράς Start real time indexer Έναρξη ευρετηρίασης ανά διαστήματα Query Language Filters Φίλτρα αναζήτησης (λειτουργία γλώσσας) Filter dates Φίλτρο ημερομηνίας Assisted complex search Υποβοηθούμενη σύνθετη αναζήτηση Filter birth dates Φιλτράρισμα ημερομηνιών γέννησης Switch Configuration... Ρύθμιση Διακόπτη... Choose another configuration to run on, replacing this process Επιλέξτε μια άλλη διαμόρφωση για να τρέξετε, αντικαθιστώντας αυτή τη διαδικασία. &User manual (local, one HTML page) Εγχειρίδιο χρήστη (τοπικό, μία σελίδα HTML) &Online manual (Recoll Web site) Ηλεκτρονικό εγχειρίδιο (Ιστοσελίδα του Recoll) Path translations Μεταφράσεις διαδρομής With failed files retrying RclTrayIcon Restore Επαναφορά Quit Έξοδος RecollModel Abstract Απόσπασμα Author Συγγραφέας Document size Μέγεθος εγγράφου Document date Ημερομηνία εγγράφου File size Μέγεθος αρχείου File name Όνομα αρχείου File date Ημερομηνία αρχείου Ipath Ipath Keywords Λέξεις κλειδιά Mime type Τύπος MIME Original character set Αρχικό σύνολο χαρακτήρων Relevancy rating Εγγύτητα Title Τίτλος URL URL Mtime Ωριαία Date Ημερομηνία Date and time Ημερομηνία και ώρα MIME type Τύπος MIME Can't sort by inverse relevance Αδύνατη η ταξινόμηση ανά αντίστροφή εγγύτητα ResList Result list Λίστα αποτελεσμάτων Unavailable document Μη διαθέσιμο έγγραφο Previous Προηγούμενο Next Επόμενο <p><b>No results found</b><br> <p><b>Κανένα αποτέλεσμα</b><br> &Preview &Προεπισκόπηση Copy &URL Αντιγραφή URL Find &similar documents Αναζήτηση παρό&μοιων εγγράφων Query details Λεπτομέρειες της αναζήτησης (show query) (ερώτημα) Copy &File Name Αντιγραφή του ονόματος του α&ρχείου filtered φιλτραρισμένο sorted ταξινομημένο Document history Ιστορικό των ανοιγμένων εγγράφων Preview Προεπισκόπηση Open Άνοιγμα <p><i>Alternate spellings (accents suppressed): </i> <p><i>Προτεινόμενη ορθογραφία (χωρίς τόνους): </i> &Write to File Απο&θήκευση σε Preview P&arent document/folder Προεπισκόπηση του &γονικού εγγράφου/καταλόγου &Open Parent document/folder &Άνοιγμα του γονικού εγγράφου/καταλόγου &Open Ά&νοιγμα Documents Έγγραφα out of at least από τουλάχιστον for για <p><i>Alternate spellings: </i> <p><i>Εναλλακτικά λεξικά: </i> Open &Snippets window Άνοιγμα του παραθύρου απο&σπασμάτων Duplicate documents Διπλότυπα έγγραφα These Urls ( | ipath) share the same content: Αυτά τα URL (| ipath) μοιράζονται το ίδιο περιεχόμενο: Result count (est.) Αριθμός αποτελεσμάτων (εκτίμ.) Snippets Αποσπάσματα This spelling guess was added to the search: Προσθήκη ορθογραφικής προσέγγισης στην αναζήτηση: These spelling guesses were added to the search: Προσθήκες ορθογραφικής προσέγγισης στην αναζήτηση: ResTable &Reset sort &Επαναφορά της ταξινόμησης &Delete column &Αφαίρεση της στήλης Add " Προσθήκη " " column " στήλη Save table to CSV file Αποθήκευση σε ένα αρχείο CSV Can't open/create file: Αδύνατο το άνοιγμα/δημιουργία του αρχείου: &Preview &Προεπισκόπηση &Open Ά&νοιγμα Copy &File Name Αντιγραφή του ονόματος του α&ρχείου Copy &URL Αντιγραφή URL &Write to File Απο&θήκευση σε Find &similar documents Αναζήτηση παρό&μοιων εγγράφων Preview P&arent document/folder Προεπισκόπηση του &γονικού εγγράφου/καταλόγου &Open Parent document/folder &Άνοιγμα του γονικού εγγράφου/καταλόγου &Save as CSV &Αποθήκευση ως CSV Add "%1" column Προσθήκη μιας στήλης «%1» Result Table Πίνακας Αποτελεσμάτων Open Άνοιγμα Open and Quit Άνοιγμα και έξοδος Preview Προεπισκόπηση Show Snippets Εμφάνιση αποσπασμάτων Open current result document Άνοιγμα τρέχοντος εγγράφου αποτελεσμάτων Open current result and quit Άνοιγμα τρέχοντος αποτελέσματος και τερματισμού Show snippets Εμφάνιση αποσπασμάτων Show header Εμφάνιση κεφαλίδας Show vertical header Εμφάνιση κάθετης κεφαλίδας Copy current result text to clipboard Αντιγραφή κειμένου τρέχοντος αποτελέσματος στο πρόχειρο Use Shift+click to display the text instead. Χρησιμοποιήστε Shift +κλικ για την εμφάνιση του κειμένου. %1 bytes copied to clipboard %1 δυφιοσυλλαβές αντιγράφηκαν στο πρόχειρο Copy result text and quit Αντιγραφή του κειμένου του αποτελέσματος και εγκατάλειψη της εφαρμογής ResTableDetailArea &Preview &Προεπισκόπηση &Open Ά&νοιγμα Copy &File Name Αντιγραφή του ονόματος του α&ρχείου Copy &URL Αντιγραφή URL &Write to File Απο&θήκευση σε Find &similar documents Αναζήτηση παρό&μοιων εγγράφων Preview P&arent document/folder Προεπισκόπηση του &γονικού εγγράφου/καταλόγου &Open Parent document/folder &Άνοιγμα του γονικού εγγράφου/καταλόγου ResultPopup &Preview &Προεπισκόπηση &Open Ά&νοιγμα Copy &File Name Αντιγραφή του ονόματος του α&ρχείου Copy &URL Αντιγραφή URL &Write to File Απο&θήκευση σε Save selection to files Αποθήκευση της επιλογής σε αρχεία Preview P&arent document/folder Προεπισκόπηση του &γονικού εγγράφου/καταλόγου &Open Parent document/folder &Άνοιγμα του γονικού εγγράφου/καταλόγου Find &similar documents Αναζήτηση παρό&μοιων εγγράφων Open &Snippets window Άνοιγμα του παραθύρου απο&σπασμάτων Show subdocuments / attachments Εμφάνιση των υπο-εγγράφων / συνημμένων Open With Άνοιγμα με Run Script Εκτέλεση μακροεντολής SSearch Any term Οποιοσδήποτε όρος All terms Όλοι οι όροι File name Όνομα αρχείου Completions Συμπληρώσεις Select an item: Επιλέξτε ένα αντικείμενο: Too many completions Πολλές πιθανές συμπληρώσεις Query language Γλώσσα ερωτημάτων Bad query string Μη αναγνωρισμένο ερώτημα Out of memory Δεν υπάρχει διαθέσιμη μνήμη Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (<F1>) for more detail. Εισάγετε μια έκφραση γλώσσας ερωτήματος. Σκονάκι:<br> <i>term1 term2</i> : 'term1' ΚΑΙ 'term2' σε οποιοδήποτε πεδίο.<br> <i>field:term1</i> : 'term1' αναζήτηση στο πεδίο 'field'.<br> Πρότυπα ονόματα/συνώνυμα πεδίων (χρήση αγγλικών λέξεων):<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Παράδειγμα διαστημάτων ημερομηνιών: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> ΜΗΝ βάλετε τις παρενθέσεις.<br> <i>"term1 term2"</i> : ακριβής πρόταση. Επιλογές:<br> <i>"term1 term2"p</i> : εγγύτητα (χωρίς σειρά).<br> Χρησιμοποιήστε το δεσμό <b>Λεπτομερειακή εμφάνιση του ερωτήματος</b> σε περίπτωση που υπάρχει αμφιβολία στα αποτελέσματα και δείτε το εγχείρίδιο (στα αγγλικά) (<F1>) για περισσότερες λεπτομέρειες. Enter file name wildcard expression. Εισάγετε ένα όνομα αρχείου (επιτρέπονται και σύμβολα υποκατάστασης). Enter search terms here. Type ESC SPC for completions of current term. Εισάγετε εδώ τους όρους της αναζήτησης. Πατήστε ESC SPC για να εμφανίσετε τις λέξεις που αρχίζουν με τον τρέχοντα όρο. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (<F1>) for more detail. Εισαγωγή έκφρασης γλώσσας ερωτήματος. «Σκονάκι»:<br> <i>όρος1 όρος2</i> : 'όρος1' και 'όρος2' σε οποιοδήποτε πεδίο.<br> <i>πεδίο:όρος1</i> : 'όρος1' στο πεδίο 'πεδίο'.<br> Τυπικό πεδίο ονόματα/συνώνυμα:<br> τίτλος/θέμα/υπόμνημα, συγγραφέας/από, παραλήπτης/προς, όνομα αρχείου, επέκταση.<br> Ψευδο-πεδία: κατάλογος, mime/μορφή, τύπος/rclcat, ημερομηνία, μέγεθος.<br> Παραδείγματα δυο διαστημάτων ημερομηνιών: 2009-03-01/2009-05-20 2009-03-01/Π2Μ.<br> <i>όρος1 όρος2 OR όρος3</i> : όρος1 AND (όρος2 OR όρος3).<br> Μπορείτε να χρησιμοποιείτε παρενθέσεις για πιο ευανάγνωστες εκφράσεις.<br> <i>"όρος1 όρος2"</i> : φράση (πρέπει να αντιστοιχεί ακριβώς). Πιθανοί τροποποιητές:<br> <i>"όρος1 όρος2"p</i> : αταξινόμητη και κατά προσέγγιση αναζήτηση με προκαθορισμένη απόσταση.<br> Χρησιμοποιήστε τον δεσμό <b>Εμφάνιση ερωτήματος</b> σε περίπτωση αμφιβολίας σχετικά με το αποτέλεσμα και ανατρέξτε στο εγχειρίδιο χρήσης (<F1>) για περισσότερες λεπτομέρειες. Stemming languages for stored query: Οι γλώσσες ριζικοποίησης για το αποθηκευμένο ερώτημα: differ from current preferences (kept) διαφέρει από τις τρέχουσες προτιμήσεις (διατηρείται) Auto suffixes for stored query: Αυτόματα επιθήματα για αποθηκευμένο ερώτημα: External indexes for stored query: Εξωτερικά ευρετήρια για αποθηκευμένο ερώτημα: Autophrase is set but it was unset for stored query Το Autophrase έχει ρυθμιστεί αλλά δεν έχει οριστεί για αποθηκευμένο ερώτημα Autophrase is unset but it was set for stored query Το Autophrase δεν έχει ρυθμιστεί αλλά έχει οριστεί για αποθηκευμένο ερώτημα Enter search terms here. Εισαγάγετε εδώ τους όρους αναζήτησης. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border-collapse: collapse; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Σκονάκι γλώσσας ερωτημάτων. Σε περίπτωση αμφιβολίας κάντε κλικ στο <b>Εμφάνιση ερωτήματος</b>.&nbsp; You should really look at the manual (F1)</p> Θα πρέπει πραγματικά να εξετάσουμε το εγχειρίδιο (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Τι</th><th>Παραδείγματα</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>And</td><td>ένα δύο&nbsp;&nbsp;&nbsp;ένα AND δύο&nbsp;&nbsp;&nbsp;ένα && δύο</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Or</td><td>ένα OR δύο&nbsp;&nbsp;&nbsp;ένα || δύο</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Σύνθετη boolean. Το OR έχει προτεραιότητα, χρησιμοποιήστε παρένθεση&nbsp; where needed</td><td>(one AND two) OR three</td></tr> αν χρειάζεται</td><td>(ένα AND δύο) OR τρία</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Όχι</td><td>-όρος</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Φράση</td><td>"υπερηφάνεια και προκατάληψη"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Ονόματα πεδίων</td><td>τίτλος/θέμα&nbsp;&nbsp;συγγραφέας/από<br>παραλήπτη/έως&nbsp;&nbsp;όνομα αρχείου&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Φίλτρο διαδρομής καταλόγου</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Φίλτρο τύπου MIME</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size>100k size<1M</td></tr> <tr><td>Μέγεθος</td><td>size>100k size<1M</td></tr> </table></body></html> </table></body></html> Can't open index Αδύνατο το άνοιγμα του ευρετηρίου Could not restore external indexes for stored query:<br> Δεν ήταν δυνατή η επαναφορά εξωτερικών ευρετηρίων για αποθηκευμένο ερώτημα:<br> ??? ;;; Using current preferences. Χρησιμοποιώντας τις τρέχουσες προτιμήσεις. Simple search Απλός τύπος αναζήτησης History Ιστορικό <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Φύλλο απατεώνα γλώσσας ερωτήματος. Σε αμφιβολία: κάντε κλικ στο <b>Εμφάνιση λεπτομερειών ερωτήματος</b>. &nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Κεφαλαία για την κατάσβεση της επέκτασης του κορμού</td><td>Δάπεδο</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Μέγεθος</td><td>μέγεθος>100k μέγεθος<1M</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Καθαρισμός Ctrl+S Ctrl+S Erase search entry Καθαρισμός της καταχώρησης Search Αναζήτηση Start query Έναρξη της αναζήτησης Enter search terms here. Type ESC SPC for completions of current term. Εισαγάγετε εδώ τους όρους αναζήτησης. Πατήστε ESC SPC για να εμφανίσετε τις λέξεις που αρχίζουν από τον τρέχοντα όρο. Choose search type. Επιλογή του τύπου αναζήτησης. Show query history Εμφάνιση ιστορικού ερωτημάτων Enter search terms here. Εισάγετε εδώ τους όρους αναζήτησης. Main menu Κεντρικό μενού SearchClauseW SearchClauseW SearchClauseW Any of these Οποιαδήποτε από αυτές All of these Όλα αυτά None of these Κανένα από αυτά This phrase Αυτή η φράση Terms in proximity Όροι εγγύτητας File name matching Ταίριασμα ονόματος αρχείου Select the type of query that will be performed with the words Επιλέξτε τον τύπο του ερωτήματος που θα πραγματοποιηθεί με τις λέξεις Number of additional words that may be interspersed with the chosen ones Αριθμός των επιπρόσθετων λέξεων που μπορούν να βρεθούν μεταξύ των αναζητηθέντων όρων In field Στο πεδίο No field Χωρίς πεδίο Any Οποιοδήποτε All Όλα None Κανένα Phrase Φράση Proximity Εγγύτητα File name Όνομα του αρχείου Snippets Snippets Αποσπάσματα X X Find: Εύρεση: Next Επόμενο Prev Προηγούμενο SnippetsW Search Αναζήτηση <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Λυπάμαι, δεν βρέθηκε μια ακριβής αντιστοιχία εντός ορίων. Πιθανώς το έγγραφο να είναι ογκώδες και ο δημιουργός αποσπασμάτων χάθηκε σε έναν λαβύρινθο...</p> Sort By Relevance Ταξινόμηση ανά συνάφεια Sort By Page Ταξινόμηση ανά σελίδα Snippets Window Παράθυρο αποσπασμάτων Find Αναζήτηση Find (alt) Εύρεση (εναλλακτικό) Find Next Εύρεση επόμενου Find Previous Εύρεση προηγούμενου Hide Απόκρυψη Find next Εύρεση επόμενου Find previous Εύρεση προηγούμενου Close window Κλείσιμο παραθύρου Increase font size Αύξηση μεγέθους γραμματοσειράς Decrease font size Μείωση μεγέθους γραμματοσειράς SortForm Date Ημερομηνία Mime type Τύπος MIME SortFormBase Sort Criteria Κριτήρια Ταξινόμησης Sort the Ταξινόμηση του most relevant results by: τα πιο σχετικά αποτελέσματα από: Descending Φθίνουσα Close Κλείσιμο Apply Εφαρμογή SpecIdxW Special Indexing Ειδική ευρετηρίαση Do not retry previously failed files. Μην ξαναπροσπαθήσετε προηγουμένως αποτυχημένα αρχεία. Else only modified or failed files will be processed. Θα γίνει επεξεργασία μόνο τροποποιημένων ή αποτυχημένων αρχείων. Erase selected files data before indexing. Διαγραφή επιλεγμένων αρχείων πριν την ευρετηρίαση. Directory to recursively index Κατάλογος αναδρομικά ευρετηρίου Browse Περιήγηση Start directory (else use regular topdirs): Κατάλογος έναρξης (αλλιώς χρησιμοποιήστε κανονικές κορυφές): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Αφήστε κενό για να επιλέξετε όλα τα αρχεία. Μπορείτε να χρησιμοποιήσετε πολλαπλές σχηματομορφές τύπου κελύφους χωρισμένα με κενό.<br>Σχηματομορφές με ενσωματωμένα κενά θα πρέπει να αναφέρονται με διπλά εισαγωγικά.<br>Μπορεί να χρησιμοποιηθεί μόνο αν έχει οριστεί ο κατάλογος πηγής. Selection patterns: Πρότυπα επιλογής: Top indexed entity Πάνω ευρετήριο οντότητας Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Κατάλογος αναδρομικά δείκτη. Αυτό πρέπει να είναι μέσα στην κανονική περιοχή ευρετηρίου<br> όπως ορίζεται στο αρχείο ρύθμισης παραμέτρων (topdirs). Retry previously failed files. Επανάληψη αποτυχημένων αρχείων. Start directory. Must be part of the indexed tree. We use topdirs if empty. Κατάλογος εκκίνησης. Πρέπει να είναι μέρος του δέντρου ευρετηρίου. Χρησιμοποιούμε topdirs αν είναι κενό. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Κατάλογος έναρξης. Πρέπει να είναι μέρος του δέντρου με δείκτη . Χρησιμοποιήστε την πλήρη ευρετήριο περιοχής αν είναι κενή. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Αρχείο εξόδου διαγνώσεων. Περικομμένο αρχείο με τις διαγνώσεις της ευρετηρίασης (αιτίες μη δεικτοδότησης αρχείων). Diagnostics file Αρχείο διαγνώσεων SpellBase Term Explorer Εξερευνητής όρων &Expand &Ανάπτυξη Alt+E Alt+E &Close &Κλείσιμο Alt+C Alt+C Term Όρος No db info. Δεν υπάρχουν πληροφορίες για τη βάση δεδομένων. Doc. / Tot. Doc. / Tot. Match Ταίριασμα Case Πεζά/κεφαλαία Accents Τόνοι SpellW Wildcards Σύμβολα υποκατάστασης Regexp Κανονική έκφραση Spelling/Phonetic Ορθογραφία/Φωνητική Aspell init failed. Aspell not installed? Σφάλμα στην αρχικοποίηση του aspell. Μήπως δεν είναι εγκατεστημένο; Aspell expansion error. Σφάλμα επέκτασης του aspell. Stem expansion Γραμματική επέκταση error retrieving stemming languages σφάλμα κατά τη λήψη των γλωσσών επέκτασης No expansion found Κανένα αποτέλεσμα Term Όρος Doc. / Tot. Doc. / Tot. Index: %1 documents, average length %2 terms Ευρετήριο: %1 έγγραφα, μέσο μήκος %2 όροι Index: %1 documents, average length %2 terms.%3 results Ευρετήριο: %1 έγγραφα, μέσο μήκος %2 όροι.%3 αποτελέσματα %1 results %1 αποτελέσματα List was truncated alphabetically, some frequent Η λίστα έχει κοπεί αλφαβητικά, μερικοί συχνοί terms may be missing. Try using a longer root. όροι μπορεί να λείπουν. Προσπαθήστε να χρησιμοποιήσετε μια πιο μακριά ρίζα. Show index statistics Εμφάνιση στατιστικών του ευρετηρίου Number of documents Αριθμός εγγράφων Average terms per document Μέσος όρος όρων ανά έγγραφο Smallest document length Μικρότερο μήκος εγγράφου Longest document length Μεγαλύτερο μήκος εγγράφου Database directory size Μέγεθος καταλόγου βάσης δεδομένων MIME types: Τύποι MIME: Item Αντικείμενο Value Τιμή Smallest document length (terms) Μικρότερο μήκος εγγράφου (όροι) Longest document length (terms) Μακρύτερο μήκος εγγράφου (όροι) Results from last indexing: Αποτελέσματα από την τελευταία ευρετηρίαση: Documents created/updated Έγγραφα δημιουργήθηκαν/ενημερώθηκαν Files tested Αρχεία δοκιμάστηκαν Unindexed files Μη δεικτοδοτημένα αρχεία List files which could not be indexed (slow) Εμφάνιση των αρχείων που δεν μπορούν να δεικτοδοτηθούν (αργό) Spell expansion error. Σφάλμα επέκτασης ορθογραφίας. Spell expansion error. Σφάλμα διαστολής ξενόγλωσσων. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index Ο επιλεγμένος κατάλογος δεν φαίνεται ότι είναι ένα ευρετήριο Xapian This is the main/local index! Αυτό είναι το κύριο ευρετήριο! The selected directory is already in the index list Ο επιλεγμένος κατάλογος βρίσκεται ήδη στη λίστα Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Επιλέξτε έναν κατάλογο που περιέχει ένα ευρετήριο Xapian (π.χ. /home/buddy/.recoll/xapiandb) error retrieving stemming languages σφάλμα κατά τη λήψη των γλωσσών ριζικοποίησης Choose Επιλέξτε Result list paragraph format (erase all to reset to default) Μορφή λίστας παραγράφου αποτελεσμάτων (διαγραφή όλων για επαναφορά στην εξ' ορισμού) Result list header (default is empty) Επικεφαλίδα λίστας αποτελεσμάτων (η εξ' ορισμού είναι κενή) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Επιλέξτε τον κατάλογο διαμόρφωσης του recoll ή του καταλόγου ευρετηρίου του xapian (π.χ.: /home/me/.recoll ή /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Ο επιλεγμένος κατάλογος φαίνεται ως ένας κατάλογος διαμόρφωσης του Recoll αλλά δεν είναι δυνατή η ανάγνωση της διαμόρφωσης At most one index should be selected Ένα περισσότερο ευρετήριο θα πρέπει να επιλεχθεί Cant add index with different case/diacritics stripping option Αδύνατη η προσθήκη ευρετηρίου με διαφορετικές επιλογές διάκρισης πεζών / κεφαλαίων και αποσπασμάτων Default QtWebkit font Γραμματοσειρά εξ ορισμού QtWebkit Any term Οποιοσδήποτε όρος All terms Όλοι οι όροι File name Όνομα του αρχείου Query language Γλώσσα ερωτημάτων Value from previous program exit Τιμή από προηγούμενη έξοδο προγράμματος Context Πλαίσιο Description Περιγραφή Shortcut Συντόμευση Default Προεπιλογή Choose QSS File Επιλογή αρχείου QSS Can't add index with different case/diacritics stripping option. Δεν μπορείτε να προσθέσετε δείκτη με διαφορετική επιλογή αφαίρεσης πεζών/διακριτικών. Light Φως Dark Σκοτεινό System Σύστημα UIPrefsDialogBase User interface Περιβάλλον χρήστη Number of entries in a result page Αριθμός αποτελεσμάτων ανά σελίδα Result list font Γραμματοσειρά λίστας Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Ανοίγει έναν διάλογο για την επιλογή της γραμματοσειράς για τη λίστα αποτελεσμάτων Reset Επαναφορά Resets the result list font to the system default Επαναφέρει τη γραμματοσειρά της λίστας αποτελεσμάτων στην προκαθορισμένη του συστήματος Auto-start simple search on whitespace entry. Αυτόματη έναρξη μιας απλής αναζήτησης όταν εισαχθεί ένα κενό. Start with advanced search dialog open. Εκκίνηση με τον διάλογο της προχωρημένης αναζήτησης ανοιχτό. Start with sort dialog open. Έναρξη με άνοιγμα διαλόγου ταξινόμησης. Search parameters Ρυθμίσεις αναζήτησης Stemming language Γλώσσα για την ανάπτυξη των όρων Dynamically build abstracts Δυναμική δημιουργία των αποσπασμάτων Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Αποφασίζει αν θα δημιουργούνται αποσπάσματα από το περιεχόμενο των όρων αναζήτησης. Μπορεί να επιβραδύνει την απεικόνιση αν τα έγγραφα είναι μεγάλα. Replace abstracts from documents Αντικατάσταση των υπαρχόντων αποσπασμάτων στα έγγραφα Do we synthetize an abstract even if the document seemed to have one? Θα πρέπει να γίνεται σύνθεση μιας σύνοψης ακόμα και αν το αρχικό έγγραφο διαθέτει μια; Synthetic abstract size (characters) Μέγεθος του συνθετικού αποσπάσματος (χαρακτήρες) Synthetic abstract context words Αριθμός σχετικών λέξεων ανά εμφάνιση του όρου στο απόσπασμα External Indexes Εξωτερικά ευρετήρια Add index Προσθήκη ευρετηρίου Select the xapiandb directory for the index you want to add, then click Add Index Επιλέξτε τον κατάλογο xapiandb για το ευρετήριο που θέλετε να προσθέσετε και, στη συνέχεια, κάντε κλικ στο στοιχείο Προσθήκη ευρετηρίου Browse Περιήγηση &OK &Εντάξει Apply changes Εφαρμογή των αλλαγών &Cancel &Ακύρωση Discard changes Απόρριψη των αλλαγών Result paragraph<br>format string Συμβολοσειρά μορφής παράγραφος<br>αποτελέσματος Automatically add phrase to simple searches Προσθήκη αυτόματα μιας φράσης στις απλές αναζητήσεις A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Μια αναζήτηση για [χωριάτικη σαλάτα] (2 όροι) θα συμπληρωθεί ως [χωριάτικη Ή σαλάτα Ή (χωριάτικη ΦΡΑΣΗ 2 σαλάτα)].<br> Αυτό θα πρέπει να αποδώσει μια καλύτερη εγγύτητα των αποτελεσμάτων όπου οι αναζητούμενοι όροι εμφανίζονται ακριβώς με τη σειρά. User preferences Προτιμήσεις χρήστη Use desktop preferences to choose document editor. Χρήση ρυθμίσεων του περιβάλλοντος για την επιλογή της εφαρμογής προβολής. External indexes Εξωτερικοί δείκτες Toggle selected Αλλαγή κατάστασης επιλεγμένων Activate All Ενεργοποίηση όλων Deactivate All Απενεργοποίηση όλων Remove selected Αφαίρεση των επιλεγμένων Remove from list. This has no effect on the disk index. Αφαίρεση από τη λίστα. Δεν έχει επίπτωση στο αποθηκευμένο ευρετήριο. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Καθορίζει τη μορφή για κάθε παράγραφο καταλόγου αποτελεσμάτων. Χρησιμοποιήστε μορφή qt html και αντικαταστάσεις όπως εκτυπώσεις:<br>%A Αφηρημένη<br> %D Ημερομηνία<br> %I Όνομα εικόνας εικονιδίου<br> %K Λέξεις-κλειδιά (αν υπάρχει)<br> %L Προεπισκόπηση και επεξεργασία συνδέσμων<br> %M Τύπος Mime<br> %N Αριθμός αποτελέσματος<br> %R Ποσοστό συνάφειας<br> %S Πληροφορίες μεγέθους<br> %T Τίτλος<br> %U Url<br> Remember sort activation state. Απομνημόνευση της κατάστασης ενεργοποίησης της ταξινόμησης. Maximum text size highlighted for preview (megabytes) Μέγιστο μέγεθος τονισμένων κειμένων προς προεπισκόπηση (MB) Texts over this size will not be highlighted in preview (too slow). Τα κείμενα μεγαλύτερα από αυτό το μέγεθος δεν θα τονιστούν στην προεπισκόπηση (πολύ αργό). Highlight color for query terms Χρώμα τονισμού των όρων αναζήτησης Prefer Html to plain text for preview. Χρήση της μορφής HTML για την προεπισκόπηση. If checked, results with the same content under different names will only be shown once. Εμφανίζει μια μόνο καταχώρηση για τα αποτελέσματα με πανομοιότυπο περιεχόμενο. Hide duplicate results. Απόκρυψη των διπλοεγγραφών. Choose editor applications Επιλέξτε τους επεξεργαστές για τους διάφορους τύπους αρχείων Display category filter as toolbar instead of button panel (needs restart). Εμφάνιση φίλτρου. κατηγορίας ως γραμμή εργαλείων αντί για πίνακα κουμπιών (απαιτεί επανεκκίνηση). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Οι λέξεις στη λίστα θα αλλάξουν αυτόματα σε ρήτρες ext:xxx στις καταχωρήσεις σε γλώσσα ερωτημάτων. Query language magic file name suffixes. Αυτόματα επιθήματα για τη γλώσσα ερωτημάτων. Enable Ενεργοποίηση ViewAction Changing actions with different current values Αλλαγή των ενεργειών με διαφορετικές τρέχουσες τιμές Mime type Τύπος MIME Command Εντολή MIME type Τύπος MIME Desktop Default Προκαθορισμένο Επιφάνειας εργασίας Changing entries with different current values Αλλαγή αντικειμένων με τρέχουσες τιμές διαφορετικές ViewActionBase File type Τύπος αρχείου Action Ενέργεια Select one or several file types, then click Change Action to modify the program used to open them Επιλέξτε έναν ή περισσότερους τύπους αρχείων και κάντε κλικ στο «Αλλαγή» για να αλλάξετε το πρόγραμμα που χρησιμοποιείται για το άνοιγμά τους Change Action Αλλαγή Close Κλείσιμο Native Viewers Εφαρμογές απεικόνισης Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Επιλέξτε έναν ή περισσότερους τύπους MIME και κάντε κλικ στο «Αλλαγή της ενέργειας»<br>Μπορείτε επίσης να κλείσετε το διάλογο και να επιλέξετε «Χρήση των προτιμήσεων του περιβάλλοντος εργασίας»<br>στο κύριο παράθυρο για να αγνοήσετε αυτή τη λίστα. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Επιλέξτε έναν οι περισσότερους τύπους αρχείων, και στη συνέχεια χρησιμοποιήστε τα κουμπιά ελέγχου στο πλαίσιο στο κάτω μέρος για να αλλάξετε τον τρόπο επεξεργασίας. Use Desktop preferences by default Χρήση εξ' ορισμού των προτιμήσεων της Επιφάνειας εργασίας Select one or several file types, then use the controls in the frame below to change how they are processed Επιλέξτε έναν οι περισσότερους τύπους αρχείων, και στη συνέχεια χρησιμοποιήστε τα κουμπιά ελέγχου στο παρακάτω πλαίσιο για να αλλάξετε τον τρόπο επεξεργασίας Exception to Desktop preferences Εξαίρεση των προτιμήσεων Επιφάνειας εργασίας Action (empty -> recoll default) Ενέργεια (κενό -> προκαθορισμένη του recoll) Apply to current selection Εφαρμογή στην τρέχουσα επιλογή Recoll action: Ενέργεια Recoll: current value τρέχουσα τιμή Select same Επιλογή ανά τιμή <b>New Values:</b> <b>Νέες τιμές:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Η τιμή είναι μια γραμμή εντολών που πρέπει να εκτελεστεί. Αντικαταστάσεις: %s: συμβολοσειρά αναζήτησης; %p: αριθμός σελίδας; <br>%f: όνομα αρχείου εγγράφου. F1 για περισσότερη βοήθεια. Webcache Webcache editor Επεξεργαστής Webcache Search regexp Αναζήτηση regexp TextLabel ΕτικέταΚειμένου WebcacheEdit Copy URL Αντιγραφή URL Unknown indexer state. Can't edit webcache file. Άγνωστη κατάσταση ευρετηρίου. Μπορεί't επεξεργάζεται αρχείο webcache. Indexer is running. Can't edit webcache file. Η ευρετηρίαση εκτελείται. Αδύνατη η επεξεργασία του αρχείου webcache. Delete selection Διαγραφή επιλογής Webcache was modified, you will need to run the indexer after closing this window. Η Webcache τροποποιήθηκε, θα πρέπει να εκτελέσετε το ευρετήριο μετά το κλείσιμο αυτού του παραθύρου. Save to File Αποθήκευση σε αρχείο File creation failed: Η δημιουργία του αρχείου απέτυχε: Maximum size %1 (Index config.). Current size %2. Write position %3. Μέγιστο μέγεθος %1 (Ρυθμίσεις Δείκτη). Τρέχον μέγεθος %2. Θέση εγγραφής %3. WebcacheModel MIME MIME Url URL Date Ημερομηνία Size Μέγεθος URL URL WinSchedToolW Error Σφάλμα Configuration not initialized Οι ρυθμίσεις δεν αρχικοποιήθηκαν <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexing batch scheduling</h3><p>Χρησιμοποιούμε τον τυπικό προγραμματισμό εργασιών των Windows για αυτό. Το πρόγραμμα θα ξεκινήσει όταν κάνετε κλικ στο παρακάτω κουμπί.</p><p>Μπορείτε να χρησιμοποιήσετε είτε την πλήρη διεπαφή (<i>Δημιουργία εργασίας</i> στο μενού στα δεξιά), or the simplified <i>Create Basic task</i> wizard. Και στις δύο περιπτώσεις Αντιγράψτε/Επικολλήστε τη διαδρομή του αρχείου δέσμης εντολών που αναφέρονται παρακάτω ως <i>Ενέργεια</i> που θα εκτελεστεί.</p> Command already started Η εντολή ξεκίνησε ήδη Recoll Batch indexing Recoll ευρετηρίαση παρτίδων Start Windows Task Scheduler tool Ξεκινήστε το εργαλείο προγραμματισμού εργασιών των Windows Could not create batch file Δεν ήταν δυνατή η δημιουργία αρχείου πακέτου confgui::ConfBeaglePanelW Steal Beagle indexing queue Κλέψιμο της ουράς ευρετηρίασης του Beagle Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Το Beagle ΔΕΝ ΠΡΕΠΕΙ να εκτελείται. Επιτρέπει την επεξεργασία της ουράς του Beagle για ευρετηρίαση του ιστορικού των ιστοσελίδων του Firefox.<br>(θα πρέπει επίσης να εγκαταστήσετε το πρόσθετο του Beagle για το Firefox) Web cache directory name Όνομα καταλόγου προσωρινής μνήμης Web The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Το όνομα ενός καταλόγου στον οποίο θα αποθηκεύεται η προσωρινή μνήμη για επισκέψιμες ιστοσελίδες.<br>Μια μη απόλυτη διαδρομή λαμβάνεται σε σχέση με τον κατάλογο ρυθμίσεων. Max. size for the web cache (MB) Μέγιστο μέγεθος για την προσωρινή μνήμη ιστού (MB) Entries will be recycled once the size is reached Θα γίνεται αντικατάσταση των καταχωρήσεων όταν επιτευχθεί το καθορισμένο μέγεθος Web page store directory name Όνομα καταλόγου αποθήκευσης ιστοσελίδων The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Το όνομα του καταλόγου αποθήκευσης αντιγράφων των επισκεφθέντων ιστοσελίδων.<br>Μια σχετική διαδρομή αναφερόμενη στη διαδρομή διαμόρφωσης. Max. size for the web store (MB) Μέγιστο μέγεθος της κρυφής μνήμης ιστού (MB) Process the WEB history queue Επεξεργασία της ουράς ιστορικού του Ιστού Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Ενεργοποιεί τη δεικτοδότηση των επισκεπτόμενων σελίδων στον Firefox.<br>(θα πρέπει να εγκαταστήσετε και το πρόσθετο Firefox Recoll) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Οι εγγραφές θα ανακυκλωθούν μόλις επιτευχθεί το μέγεθος.<br>Μόνο η αύξηση του μεγέθους έχει πραγματικά νόημα, επειδή η μείωση της τιμής δεν θα περικόψει ένα υπάρχον αρχείο (μόνο χώρο αποβλήτων στο τέλος). confgui::ConfIndexW Can't write configuration file Αδύνατη η εγγραφή του αρχείου διαμόρφωσης Recoll - Index Settings: Recoll - Ρυθμίσεις Ευρετηρίου: confgui::ConfParamFNW Browse Περιήγηση Choose Επιλέξτε confgui::ConfParamSLW + + - - Add entry Προσθήκη καταχώρησης Delete selected entries Διαγραφή επιλεγμένων καταχωρήσεων ~ ~ Edit selected entries Επεξεργασία επιλεγμένων καταχωρήσεων confgui::ConfSearchPanelW Automatic diacritics sensitivity Αυτόματη ευαισθησία στους τόνους <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Αυτόματη εναλλαγή ευαισθησίας τονισμού αν ο όρος αναζήτησης διαθέτει τονισμένους χαρακτήρες (εκτός αυτών του unac_except_trans). Διαφορετικά θα πρέπει να χρησιμοποιήσετε τη γλώσσα της αναζήτησης και τον τροποποιητή <i>D</i> για τον καθορισμό της ευαισθησίας τονισμών. Automatic character case sensitivity Αυτόματη ευαισθησία πεζών/κεφαλαίων <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Αυτόματη εναλλαγή ευαισθησίας διάκρισης πεζών/κεφαλαίων αν η ο όρος αναζήτησης διαθέτει κεφαλαία γράμματα (εκτός του πρώτου γράμματος). Διαφορετικά θα πρέπει να χρησιμοποιήσετε τη γλώσσα της αναζήτησης και τον τροποποιητή <i>C</i> για τον καθορισμό της ευαισθησίας διάκρισης πεζών / κεφαλαίων. Maximum term expansion count Μέγιστο μέγεθος επέκτασης ενός όρου <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Μέγιστος αριθμός επέκτασης για έναν όρο (π.χ.: κατά τη χρήση χαρακτήρων υποκατάστασης). Η προκαθορισμένη τιμή 10000 είναι λογική και θα αποφύγει ερωτήματα που εμφανίζονται σαν παγωμένα την ίδια στιγμή που η μηχανή διαπερνά τη λίστα όρων. Maximum Xapian clauses count Μέγιστος αριθμός ρητρών Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Μέγιστος αριθμός στοιχειωδών ρητρών που προσθέτουμε σε ένα απλό ερώτημα Xapian. Σε μερικές περιπτώσεις, το αποτέλεσμα της επέκτασης των όρων μπορεί να είναι πολλαπλασιαστικό, και θα χρησιμοποιούσε υπερβολική μνήμη. Η προκαθορισμένη τιμή 100000 θα πρέπει να είναι επαρκής και συμβατή με μια τυπική διαμόρφωση υλικού. confgui::ConfSubPanelW Global Γενικά Max. compressed file size (KB) Μεγ.μέγεθος για τα συμπιεσμένα αρχεία (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Αυτή η τιμή καθορίζει ένα όριο πέραν του οποίου τα συμπιεσμένα αρχεία δεν θα επεξεργάζονται. Χρησιμοποιήστε -1 για κανένα όριο, 0 για να μην επεξεργάζονται τα συμπιεσμένα αρχεία. Max. text file size (MB) Μέγιστο μέγεθος αρχείων κειμένου (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Αυτή η τιμή ορίζει ένα όριο πέραν του οποίου δεν θα γίνεται ευρετηρίαση για τα αρχεία κειμένου. Ορίστε -1 για κανένα όριο. Αυτό χρησιμεύει για τον αποκλεισμό από την ευρετηρίαση τεράστιων αρχείων καταγραφών. Text file page size (KB) Μέγεθος κοπής για τα αρχεία κειμένου (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Αν αυτή η τιμή έχει οριστεί και είναι θετική, τα αρχεία κειμένου θα κοπούν σε κομμάτια αυτού του μεγέθους για την ευρετηρίαση. Αυτό βοηθά στη μείωση των καταναλωμένων πόρων από την ευρετηρίαση και βοηθά τη φόρτωση για την προεπισκόπηση. Max. filter exec. time (S) Μέγιστος. χρόνος εκτέλεσης για ένα φίλτρο (Δ) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Τα εξωτερικά φίλτρα σε λειτουργία μεγαλύτερη από αυτό θα διακόπτονται. Χρήσιμο για τη σπάνια περίπτωση (π.χ. postscript) όπου ένα έγγραφο μπορεί να προκαλέσει ένα βρόγχο στο φίλτρο. ορίστε το σε -1 για να αφαιρέσετε το όριο. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Τα εξωτερικά φίλτρα σε λειτουργία μεγαλύτερη από αυτό θα διακόπτονται. Χρήσιμο για τη σπάνια περίπτωση (π.χ. postscript) όπου ένα έγγραφο μπορεί να προκαλέσει ένα βρόγχο στο φίλτρο. Ορίστε το σε -1 για να αφαιρέσετε το όριο. Only mime types Μόνο οι τύποι MIME An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Μια αποκλειστική λίστα δεικτοδοτημένων τύπων mime.<br>Δεν θα δεικτοδοτηθεί τίποτα άλλο. Φυσιολογικά κενό και αδρανές Exclude mime types Αποκλεισμός τύπων αρχείων Mime types not to be indexed Οι τύποι Mime που δεν θα δεικτοδοτηθούν Max. filter exec. time (s) Μέγιστο φίλτρο exec. χρόνος (s) confgui::ConfTabsW Apply Εφαρμογή confgui::ConfTopPanelW Top directories Κατάλογοι εκκίνησης The list of directories where recursive indexing starts. Default: your home. Η λίστα των καταλόγων για την έναρξη της αναδρομικής ευρετηρίασης. Προεπιλογή: ο προσωπικός σας κατάλογος. Skipped paths Παραλειπόμενες διαδρομές These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Πρόκειται για ονόματα καταλόγων που δεν θα δεικτοδοτηθούν.<br>Μπορούν να περιέχουν χαρακτήρες υποκατάστασης. Οι διαδρομές πρέπει να αντιστοιχούν με αυτές που είδε ο δεικτοδότης (π.χ: αν ένας κατάλογος έναρξης είναι '/home/me' και το '/home' είναι ένας δεσμός στο '/usr/home', μια σωστή διαδρομή εδώ θα ήταν '/home/me/tmp*' , όχι '/usr/home/me/tmp*') Stemming languages Γλώσσα για την επέκταση των όρων The languages for which stemming expansion<br>dictionaries will be built. Οι γλώσσες για τις οποίες θα δημιουργηθούν τα λεξικά επεκτάσεων<br>των όρων. Log file name Όνομα του αρχείου καταγραφών The file where the messages will be written.<br>Use 'stderr' for terminal output Το αρχείο που θα εγγραφούν τα μηνύματα.<br>Χρησιμοποιήστε 'stderr' για την έξοδο τερματικού Log verbosity level Επίπεδο ανάλυσης των καταγραφών This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Αυτή η τιμή ρυθμίζει την ποσότητα των απεσταλμένων μηνυμάτων,<br>από μόνο τα σφάλματα μέχρι πολλά δεδομένα αποσφαλμάτωσης. Index flush megabytes interval Καθυστέρηση εγγραφής του ευρετηρίου σε megabyte This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Αυτή η τιμή ρυθμίζει την ποσότητα των δεδομένων που δεικτοδοτούνται μεταξύ των εγγραφών στο δίσκο.<br>Βοηθά στον έλεγχο χρήσης της μνήμης. Προεπιλογή: 10MB Max disk occupation (%) Μέγιστη χρήση του δίσκου (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Το ποσοστό χρήσης του δίσκου που θα σταματήσει η ευρετηρίαση (για να αποφευχθεί η υπερβολική πλήρωση).<br>0 σημαίνει χωρίς όριο (προεπιλογή). No aspell usage Χωρίς χρήση του aspell Aspell language Γλώσσα του aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Η γλώσσα για το λεξικό aspell. Αυτό θα πρέπει να είναι του τύπου «en» ή «el» ...<br> Αν αυτή η τιμή δεν οριστεί, χρησιμοποιείται το εθνικό περιβάλλον NLS για να την υπολογίσει, που συνήθως δουλεύει. Για να πάρετε μια ιδέα του τι είναι εγκατεστημένο στο σύστημά σας, πληκτρολογήστε «aspell config» και παρατηρήστε τα αρχεία .dat στον κατάλογο «data-dir». Database directory name Κατάλογος αποθήκευσης του ευρετηρίου The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Το όνομα του καταλόγου αποθήκευσης του ευρετηρίου<br>Μια σχετική διαδρομή αναφερόμενη στη διαδρομή διαμόρφωσης. Η εξ' ορισμού είναι «xapiandb». Use system's 'file' command Χρήση της εντολής 'file' του συστήματος Use the system's 'file' command if internal<br>mime type identification fails. Χρήση της εντολής 'file' αν ο εσωτερικός εντοπισμός<br>του τύπου mime δεν επιφέρει αποτελέσματα. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Απενεργοποιεί τη χρήση του aspell για τη δημιουργία των ορθογραφικών προσεγγίσεων.<br>Χρήσιμο αν το aspell δεν είναι εγκατεστημένο ή δεν λειτουργεί. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Η γλώσσα για το λεξικό aspell. Αυτό θα πρέπει να είναι του τύπου «en» ή «el» ...<br> Αν αυτή η τιμή δεν οριστεί, χρησιμοποιείται το εθνικό περιβάλλον NLS για να την υπολογίσει, που συνήθως δουλεύει. Για να πάρετε μια ιδέα του τι είναι εγκατεστημένο στο σύστημά σας, πληκτρολογήστε «aspell config» και παρατηρήστε τα αρχεία .dat στον κατάλογο «data-dir». The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Το όνομα του καταλόγου αποθήκευσης του ευρετηρίου<br>Μια σχετική διαδρομή αναφερόμενη στη διαδρομή διαμόρφωσης. Η εξ' ορισμού είναι «xapiandb». Unac exceptions Εξαιρέσεις unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Αυτές είναι εξαιρέσεις για τον μηχανισμό unac, ο οποίος εξ' ορισμού, αφαιρεί όλους τους τονισμούς, και πραγματοποιεί κανονική αποσύνθεση. Μπορείτε να αναιρέσετε την αφαίρεση των τονισμών για ορισμένους χαρακτήρες, ανάλογα με τη γλώσσα σας, και διευκρινίστε άλλους αποσυνθέσεις, για παράδειγμα συμπλεγμένους χαρακτήρες. Στη λίστα διαχωρισμένη με κενά, ο πρώτος χαρακτήρας ενός αντικειμένου είναι η πηγή, το υπόλοιπο είναι η μετάφραση. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Αυτά είναι ονόματα διαδρομών καταλόγων που δεν θα εισέλθουν στο ευρετήριο.<br>Τα στοιχεία της διαδρομής μπορεί να περιέχουν μπαλαντέρ (wildcards). Οι καταχωρήσεις πρέπει να ταιριάζουν με τις διαδρομές που βλέπει ο ευρετής (π.χ. εάν οι topdirs περιλαμβάνουν '/home/me' και '/home' είναι στην πραγματικότητα ένας σύνδεσμος με '/usr/home', μια σωστή καταχώρηση skippedPath θα είναι '/home/me/tmp*', όχι '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Μέγιστη κατάληψη δίσκου (%, 0 σημαίνει χωρίς όριο) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Αυτό είναι το ποσοστό χρήσης δίσκου - συνολική χρήση δίσκων, όχι μέγεθος δείκτη - στο οποίο ευρετηρίαση θα αποτύχει και να σταματήσει.<br>Η προεπιλεγμένη τιμή του 0 αφαιρεί οποιοδήποτε όριο. uiPrefsDialogBase User preferences Προτιμήσεις χρήστη User interface Περιβάλλον χρήστη Number of entries in a result page Αριθμός αποτελεσμάτων ανά σελίδα If checked, results with the same content under different names will only be shown once. Εμφανίζει μια μόνο καταχώρηση για τα αποτελέσματα με πανομοιότυπο περιεχόμενο. Hide duplicate results. Απόκρυψη των διπλοεγγραφών. Highlight color for query terms Χρώμα τονισμού των όρων αναζήτησης Result list font Γραμματοσειρά λίστας Opens a dialog to select the result list font Ανοίγει έναν διάλογο για την επιλογή της γραμματοσειράς για τη λίστα αποτελεσμάτων Helvetica-10 Helvetica-10 Resets the result list font to the system default Επαναφέρει τη γραμματοσειρά της λίστας αποτελεσμάτων στην προκαθορισμένη του συστήματος Reset Επαναφορά Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Καθορίζει τη μορφή για κάθε παράγραφο καταλόγου αποτελεσμάτων. Χρησιμοποιήστε μορφή qt html και αντικαταστάσεις όπως εκτυπώσεις:<br>%A Αφηρημένη<br> %D Ημερομηνία<br> %I Όνομα εικόνας εικονιδίου<br> %K Λέξεις-κλειδιά (αν υπάρχει)<br> %L Προεπισκόπηση και επεξεργασία συνδέσμων<br> %M Τύπος Mime<br> %N Αριθμός αποτελέσματος<br> %R Ποσοστό συνάφειας<br> %S Πληροφορίες μεγέθους<br> %T Τίτλος<br> %U Url<br> Result paragraph<br>format string Συμβολοσειρά μορφής παράγραφος<br>αποτελέσματος Texts over this size will not be highlighted in preview (too slow). Τα κείμενα μεγαλύτερα από αυτό το μέγεθος δεν θα επισημαίνονται στην προεπισκόπηση (πολύ αργό). Maximum text size highlighted for preview (megabytes) Μέγιστο. μέγεθος επισημασμένων κειμένων προς προεπισκόπηση (MB) Use desktop preferences to choose document editor. Χρήση ρυθμίσεων του περιβάλλοντος για την επιλογή της εφαρμογής προβολής. Choose editor applications Επιλέξτε τους επεξεργαστές για τους διάφορους τύπους αρχείων Display category filter as toolbar instead of button panel (needs restart). Εμφάνιση φίλτρου. κατηγορίας ως γραμμή εργαλείων αντί για πίνακα κουμπιών (απαιτεί επανεκκίνηση). Auto-start simple search on whitespace entry. Αυτόματη έναρξη μιας απλής αναζήτησης όταν εισαχθεί ένα κενό. Start with advanced search dialog open. Εκκίνηση με τον διάλογο της προχωρημένης αναζήτησης ανοιχτό. Start with sort dialog open. Έναρξη με άνοιγμα διαλόγου ταξινόμησης. Remember sort activation state. Απομνημόνευση της κατάστασης ενεργοποίησης της ταξινόμησης. Prefer Html to plain text for preview. Χρήση της μορφής HTML για την προεπισκόπηση. Search parameters Ρυθμίσεις αναζήτησης Stemming language Γλώσσα για την ανάπτυξη των όρων A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Μια αναζήτηση για [χωριάτικη σαλάτα] (2 όροι) θα συμπληρωθεί ως [χωριάτικη Ή σαλάτα Ή (χωριάτικη ΦΡΑΣΗ 2 σαλάτα)].<br> Αυτό θα πρέπει να αποδώσει μια καλύτερη εγγύτητα των αποτελεσμάτων όπου οι αναζητούμενοι όροι εμφανίζονται ακριβώς με τη σειρά. Automatically add phrase to simple searches Προσθήκη αυτόματα μιας φράσης στις απλές αναζητήσεις Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Αποφασίζει αν θα δημιουργούνται αποσπάσματα από το περιεχόμενο των όρων αναζήτησης. Μπορεί να επιβραδύνει την απεικόνιση αν τα έγγραφα είναι μεγάλα. Dynamically build abstracts Δυναμική δημιουργία των αποσπασμάτων Do we synthetize an abstract even if the document seemed to have one? Θα πρέπει να γίνεται σύνθεση μιας σύνοψης ακόμα και αν το αρχικό έγγραφο διαθέτει μια; Replace abstracts from documents Αντικατάσταση των υπαρχόντων αποσπασμάτων στα έγγραφα Synthetic abstract size (characters) Μέγεθος του συνθετικού αποσπάσματος (χαρακτήρες) Synthetic abstract context words Αριθμός σχετικών λέξεων ανά εμφάνιση του όρου στο απόσπασμα The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Οι λέξεις στη λίστα θα αλλάξουν αυτόματα σε ρήτρες ext:xxx στις καταχωρήσεις σε γλώσσα ερωτημάτων. Query language magic file name suffixes. Αυτόματα επιθήματα για τη γλώσσα ερωτημάτων. Enable Ενεργό External Indexes Εξωτερικά ευρετήρια Toggle selected Αλλαγή κατάστασης επιλεγμένων Activate All Ενεργοποίηση όλων Deactivate All Απενεργοποίηση όλων Remove from list. This has no effect on the disk index. Αφαίρεση από τη λίστα. Δεν έχει επίπτωση στο αποθηκευμένο ευρετήριο. Remove selected Αφαίρεση των επιλεγμένων Click to add another index directory to the list Κάντε κλικ για να προσθέσετε ένα άλλο ευρετήριο στη λίστα Add index Προσθήκη ευρετηρίου Apply changes Εφαρμογή των αλλαγών &OK &Εντάξει Discard changes Απόρριψη των αλλαγών &Cancel &Ακύρωση Abstract snippet separator Διαχωριστής αποσπάσματος Use <PRE> tags instead of <BR>to display plain text as html. Χρησιμοποιήστε <PRE> ετικέτες αντί για <BR>για να εμφανίσετε το απλό κείμενο ως html. Lines in PRE text are not folded. Using BR loses indentation. Γραμμές σε κείμενο PRE δεν διπλώνονται. Χρησιμοποιώντας BR χάνει εσοχή. Style sheet Φύλλο αισθητικής επικάλυψης Opens a dialog to select the style sheet file Ανοίγει έναν διάλογο για την επιλογή ενός αρχείου φύλλου αισθητικής επικάλυψης Choose Επιλογή Resets the style sheet to default Επαναφέρει την προκαθορισμένη τιμή για το φύλλο αισθητικής επικάλυψης Lines in PRE text are not folded. Using BR loses some indentation. Οι γραμμές στις ενότητες PRE δεν δικαιολογούνται. Χρησιμοποιώντας BR χάνονται μερικές εσοχές. Use <PRE> tags instead of <BR>to display plain text as html in preview. Χρήση <PRE> αντί <BR> για απλό κείμενο αντί html στην προεπισκόπηση. Result List Λίστα αποτελεσμάτων Edit result paragraph format string Επεξεργασία της μορφής της παραγράφου αποτελεσμάτων Edit result page html header insert Επεξεργασία του τμήματος για εισαγωγή στην κεφαλίδα HTML Date format (strftime(3)) Μορφή της ημερομηνίας (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Όριο συχνότητας (ποσοστό) πέραν του οποίου οι όροι δεν θα χρησιμοποιούνται. Οι φράσεις που περιέχουν πολύ συχνούς όρους δημιουργούν προβλήματα στην απόδοση. Οι αγνοημένοι όροι αυξάνουν την απόσταση της φράσης, και μειώνουν την αποτελεσματικότητα της λειτουργίας αναζήτησης αυτόματης φράσης. Η προκαθορισμένη τιμή είναι 2%. Autophrase term frequency threshold percentage Όριο συχνότητας του όρου (ποσοστό) για την αυτόματη δημιουργία φράσεων Plain text to HTML line style Στυλ μετάφρασης απλό κείμενο σε HTML Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Οι γραμμές που είναι έγκλειστες στα PRE δεν αναδιπλώνονται. Η χρήση BR οδηγεί σε απώλεια ορισμένων εσοχών. Το στυλ PRE + αναδίπλωση φαίνεται να είναι η καλύτερη επιλογή αλλά η σωστή του λειτουργία εξαρτάται από την έκδοση της Qt. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + αναδίπλωση Exceptions Εξαιρέσεις Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Τύποι Mime που δεν πρέπει να περάσουν στο xdg ανοιχτό ακόμη και όταν "Χρήση προτιμήσεων επιφάνειας εργασίας" έχει οριστεί.<br> Χρήσιμο για να περάσει ο αριθμός σελίδας και τις επιλογές αναζήτησης συμβολοσειρά, π.χ. evince. Disable Qt autocompletion in search entry. Απενεργοποίηση της αυτόματης συμπλήρωσης Qt στην εισαγωγή αναζήτησης. Search as you type. Αναζήτηση κατά την πληκτρολόγηση. Paths translations Διαδρομές μεταφράσεων Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Κάντε κλικ για να προσθέσετε έναν κατάλογο ευρετηρίου στη λίστα. Μπορείτε να επιλέξετε είτε έναν κατάλογο διαμόρφωσης Recoll ή ένα ευρετήριο Xapian. Snippets window CSS file Αρχείο CSS παραθύρου αποσπάσματος Opens a dialog to select the Snippets window CSS style sheet file Ανοίγει έναν διάλογο που σας επιτρέπει την επιλογή του αρχείου στυλ CSS για το αναδυόμενο παράθυρο αποσπασμάτων Resets the Snippets window style Επαναφορά του στυλ του παραθύρου αποσπασμάτων Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Καθορίζει αν τα φίλτρα των εγγράφων θα εμφανίζονται ως κουμπιά επιλογών, γραμμή εργαλείων πλαισίων συνδυασμών, ή μενού. Document filter choice style: Τεχνοτροπία επιλογής φίλτρου εγγράφων: Buttons Panel Πίνακας κουμπιών Toolbar Combobox Γραμμή εργαλείων πλαισίων συνδυασμών Menu Μενού Show system tray icon. Εμφάνιση του εικονιδίου πλαισίου συστήματος. Close to tray instead of exiting. Αντί για έξοδο, καταχώνιασμα στο πλαίσιο συστήματος. Start with simple search mode Έναρξη με απλή λειτουργία αναζήτησης Show warning when opening temporary file. Εμφάνιση προειδοποίησης κατά το άνοιγμα προσωρινού αρχείου. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Στυλ χρήστη που θα εφαρμοστεί στο παράθυρο αποσπάσματα.<br> Σημείωση: το ένθετο κεφαλίδας σελίδας αποτελέσματος περιλαμβάνεται επίσης στην κεφαλίδα του παραθύρου αποκοπής. Synonyms file Αρχείο συνώνυμων Highlight CSS style for query terms Τεχνοτροπία CSS για την επισήμανση των όρων ερωτήματος Recoll - User Preferences Recoll - Προτιμήσεις χρήστη Set path translations for the selected index or for the main one if no selection exists. Ορισμός μεταφράσεων διαδρομής για το επιλεγμένο ευρετήριο ή για το κύριο, αν δεν υπάρχει επιλογή. Activate links in preview. Ενεργοποίηση συνδέσμων στην προεπισκόπηση. Make links inside the preview window clickable, and start an external browser when they are clicked. Κάντε κλικ στους συνδέσμους μέσα στο παράθυρο προεπισκόπησης και ξεκινήστε ένα εξωτερικό πρόγραμμα περιήγησης όταν πατηθούν. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Επισημασμένοι όροι ερωτήματος στα αποτελέσματα. <br>Δοκιμάστε "color:red;background:yellow" για κάτι πιο ζωντανό από το προεπιλεγμένο μπλε... Start search on completer popup activation. Εκκίνηση αναζήτησης σε αναδυόμενη ενεργοποίηση. Maximum number of snippets displayed in the snippets window Μέγιστος αριθμός αποσπασμάτων που εμφανίζονται στο παράθυρο αποσπασμάτων Sort snippets by page number (default: by weight). Ταξινόμηση αποσπασμάτων ανά αριθμό σελίδας (προεπιλογή: κατά βάρος). Suppress all beeps. Αθόρυβη λειτουργία. Application Qt style sheet Φύλλο αισθητικής επικάλυψης Qt για την εφαρμογή Limit the size of the search history. Use 0 to disable, -1 for unlimited. Περιορίζει το μέγεθος του ιστορικού αναζήτησης. Χρησιμοποιήστε το 0 για απενεργοποίηση, το - 1 για απεριόριστα. Maximum size of search history (0: disable, -1: unlimited): Μέγιστο μέγεθος ιστορικού αναζήτησης (0: απενεργοποίηση, -1: απεριόριστος): Generate desktop notifications. Δημιουργία ειδοποιήσεων επιφάνειας εργασίας. Misc Διάφορα Work around QTBUG-78923 by inserting space before anchor text Παράκαμψη του σφάλματος QTBUG-78923 με την εισαγωγή διαστήματος πριν από το κείμενο αγκύρωσης Display a Snippets link even if the document has no pages (needs restart). Εμφάνιση συνδέσμου αποσπασμάτων ακόμα και αν το έγγραφο δεν έχει σελίδες (χρειάζεται επανεκκίνηση). Maximum text size highlighted for preview (kilobytes) Μέγιστο μέγεθος κειμένου επισημασμένο για προεπισκόπηση (kb) Start with simple search mode: Έναρξη με απλή λειτουργία αναζήτησης: Hide toolbars. Απόκρυψη γραμμών εργαλείων. Hide status bar. Απόκρυψη γραμμής κατάστασης. Hide Clear and Search buttons. Απόκρυψη κουμπιών εκκαθάρισης και αναζήτησης. Hide menu bar (show button instead). Απόκρυψη γραμμής μενού (εμφάνιση κουμπιού αντί). Hide simple search type (show in menu only). Απόκρυψη απλού τύπου αναζήτησης (εμφανίζεται μόνο στο μενού). Shortcuts Συντομεύσεις Hide result table header. Απόκρυψη επικεφαλίδας πίνακα αποτελεσμάτων. Show result table row headers. Εμφάνιση κεφαλίδων πίνακα αποτελεσμάτων. Reset shortcuts defaults Επαναφορά προεπιλογών συντομεύσεων Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Απενεργοποιήστε τις συντομεύσεις Ctrl+[0-9]/[a-z] για να μεταβείτε σε γραμμές πίνακα. Use F1 to access the manual Χρησιμοποιήστε το F1 για πρόσβαση στο εγχειρίδιο Hide some user interface elements. Απόκρυψη ορισμένων στοιχείων του περιβάλλοντος χρήστη. Hide: Απόκρυψη: Toolbars Εργαλειοθήκες Status bar Γραμμή κατάστασης Show button instead. Εμφάνιση του κουμπιού. Menu bar Γραμμή μενού Show choice in menu only. Εμφάνιση της επιλογής στο μενού μόνο. Simple search type Απλός τύπος αναζήτησης Clear/Search buttons Κουμπιά εκκαθάρισης/αναζήτησης Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Απενεργοποιήστε τις συντομεύσεις Ctrl+[0-9]/Shift+[a-z] για να μεταβείτε σε γραμμές πίνακα. None (default) Κανένα (προκαθορισμένο) Uses the default dark mode style sheet Χρήση του προκαθορισμένου φύλλου αισθητικής επικάλυψης σκοτεινής λειτουργίας Dark mode Σκοτεινή λειτουργία Choose QSS File Επιλογή αρχείου QSS To display document text instead of metadata in result table detail area, use: Για την εμφάνιση του κειμένου του εγγράφου αντί των μεταδεδομένων στην περιοχή των λεπτομερειών στον πίνακα των αποτελεσμάτων, χρησιμοποιήστε: left mouse click αριστερό κλικ του ποντικιού Shift+click Shift+κλικ Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Άνοιγμα διαλόγου για την επιλογή του φύλλου αισθητικής επικάλυψης.<br>Ανατρέξτε στο /usr/share/recoll/examples/recoll[-dark].qss για να δείτε ένα παράδειγμα. Result Table Πίνακας αποτελεσμάτων Do not display metadata when hovering over rows. Να μην εμφανίζονται τα μεταδεδομένα κατά το πέρασμα του ποντικιού στις σειρές. Work around Tamil QTBUG-78923 by inserting space before anchor text Παράκαμψη του σφάλματος Ταμίλ QTBUG-78923 με την εισαγωγή διαστήματος πριν από το κείμενο αγκύρωσης The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Αυτό το σφάλμα προκαλεί την εμφάνιση ενός παράξενου χαρακτήρα με κυκλικό σχήμα στο εσωτερικό Ταμίλ λέξεων. Για την παράκαμψη του προβλήματος γίνεται εισαγωγή ενός πρόσθετου χαρακτήρα διαστήματος και όπως φαίνεται λύνει το πρόβλημα. Depth of side filter directory tree Βάθος του δέντρου του φίλτρου των καταλόγων Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Συντελεστής εστίασης για το περιβάλλον χρήστη. Αυτό είναι χρήσιμο όταν η προκαθορισμένη εστίαση δεν αρμόζει στην ανάλυση της οθόνης. Display scale (default 1.0): Κλίμακα προβολής (εξ ορισμού 1.0): Automatic spelling approximation. Αυτόματη προσέγγιση ορθογραφίας. Max spelling distance Μέγιστη απόσταση ορθογραφίας Add common spelling approximations for rare terms. Προσθήκη συχνών όρων και με ορθογραφική προσέγγιση σπάνιων όρων αναζήτησης. Maximum number of history entries in completer list Μέγιστος αριθμός καταχωρήσεων ιστορικού στη λίστα συμπληρωτή Number of history entries in completer: Αριθμός εγγραφών ιστορικού στο συμπληρωτή: Displays the total number of occurences of the term in the index Εμφανίζει τον συνολικό αριθμό εμφανίσεων του όρου στον ευρετήριο. Show hit counts in completer popup. Εμφάνιση αριθμού εμφανίσεων στο αναδυόμενο παράθυρο συμπληρωτή. Prefer HTML to plain text for preview. Προτιμήστε το HTML αντί του απλού κειμένου για προεπισκόπηση. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Δείτε την τεκμηρίωση του Qt QDateTimeEdit. Π.χ. yyyy-MM-dd. Αφήστε κενό για να χρησιμοποιήσετε την προεπιλεγμένη μορφή Qt/System. Side filter dates format (change needs restart) Μορφή ημερομηνιών φίλτρου πλευρικού πλαισίου (η αλλαγή απαιτεί επανεκκίνηση) If set, starting a new instance on the same index will raise an existing one. Εάν οριστεί, η έναρξη μιας νέας περίπτωσης στον ίδιο δείκτη θα ενεργοποιήσει μια υπάρχουσα. Single application Μονό εφαρμογή Set to 0 to disable and speed up startup by avoiding tree computation. Ορίστε το σε 0 για να απενεργοποιήσετε και να επιταχύνετε την εκκίνηση αποφεύγοντας τον υπολογισμό του δέντρου. The completion only changes the entry when activated. Η ολοκλήρωση αλλάζει την καταχώρηση μόνο όταν ενεργοποιείται. Completion: no automatic line editing. Ολοκλήρωση: χωρίς αυτόματη επεξεργασία γραμμής. Interface language (needs restart): Γλώσσα διεπαφής (χρειάζεται επανεκκίνηση): Note: most translations are incomplete. Leave empty to use the system environment. Σημείωση: Οι περισσότερες μεταφράσεις είναι ατελείς. Αφήστε κενό για να χρησιμοποιήσετε το περιβάλλον του συστήματος. Preview Προεπισκόπηση Set to 0 to disable details/summary feature Ορίστε το σε 0 για να απενεργοποιήσετε το χαρακτηριστικό λεπτομερειών/σύνοψης Fields display: max field length before using summary: Πεδία εμφάνισης: μέγιστο μήκος πεδίου πριν από τη χρήση σύνοψης Number of lines to be shown over a search term found by preview search. Αριθμός γραμμών που θα εμφανίζονται πάνω από έναν όρο αναζήτησης που βρέθηκε με προεπισκόπηση αναζήτησης. Search term line offset: Αναζήτηση όρου μετατόπιση γραμμής: Wild card characters *?[] will processed as punctuation instead of being expanded Χαρακτήρες μπαλαντέρ *?[] θα επεξεργαστούν ως σημεία στίξης αντί να επεκταθούν Ignore wild card characters in ALL terms and ANY terms modes Αγνοήστε τους χαρακτήρες μπαλαντέρ σε όλους τους όρους και σε όλους τους τρόπους λειτουργίας. Color scheme Χρωματικό σχήμα When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Κατά την εμφάνιση HTML σε λειτουργία σκοτεινού χρώματος, προσπαθήστε να χρησιμοποιήσετε σκοτεινό φόντο (και ανοιχτό χρώμα). Αυτό δημιουργεί σύγκρουση με πολλά έγγραφα τα οποία θα αντικαταστήσουν τη ρύθμιση φωτεινότητας μας με το δικό τους CSS (σκοτεινό) χρώμα προσκηνίου, με αποτέλεσμα ένα αναγνώσιμο έγγραφο, γι' αυτό είναι απενεργοποιημένο από προεπιλογή. Use dark background when displaying HTML in dark mode. Χρησιμοποιήστε σκούρο φόντο κατά την εμφάνιση HTML σε λειτουργία σκοτεινού τρόπου. recoll-1.43.12/qtgui/i18n/recoll_cs.ts0000644000175000017500000076056715124431112016710 0ustar dockesdockes ActSearchDLG Menu search Vyhledávání v menu AdvSearch All clauses Všechny výrazy Any clause Některý z výrazů texts Texty spreadsheets Tabulky presentations Představení media Multimedia messages Zprávy other Jiné Bad multiplier suffix in size filter Špatná přípona násobitele ve filtru velikosti text Text spreadsheet Tabulky presentation Představení message Zpráva Advanced Search Pokročilé hledání History Next Další historie History Prev Předchozí historie Load next stored search Načíst další uložené vyhledávání Load previous stored search Načíst předchozí uložené vyhledávání AdvSearchBase Advanced search Pokročilé hledání Restrict file types Omezit souborových typů Save as default Uložit jako výchozí Searched file types Hledané souborové typy All ----> Vše ----> Sel -----> Výběr -----> <----- Sel <----- Výběr <----- All <----- Vše Ignored file types Přehlížené souborové typy Enter top directory for search Zadejte základní adresář pro hledání Browse Procházet Restrict results to files in subtree: Omezit výsledky na soubory v následujícím podadresáři: Start Search Spustit hledání Search for <br>documents<br>satisfying: Hledat <br>dokumenty<br>, které splňují následující hlediska: Delete clause Smazat poslední výraz Add clause Přidat nový výraz Check this to enable filtering on file types Zaškrtněte pro zapnutí filtrování podle souborových typů By categories Podle skupin Check this to use file categories instead of raw mime types Zaškrtněte pro používání skupin souborů místo MIME typů Close Zavřít All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Všechna pole napravo, která nejsou prázdná, budou spojována spojeními AND (volba "Všechny výrazy") nebo OR (volba "Některý z výrazů"). <br>Typy polí "Jakékoli" "Vše" a "Žádné" mohou přijmout směs jednoduchých slov, a věty uzavřené dvojitými uvozovkami.<br>Pole bez dat jsou přehlížena. Invert Obrátit Minimum size. You can use k/K,m/M,g/G as multipliers Nejmenší velikost: Můžete použít k/K,m/M,g/G jako násobitele Min. Size Nejmenší velikost Maximum size. You can use k/K,m/M,g/G as multipliers Největší velikost: Můžete použít k/K,m/M,g/G jako násobitele Max. Size Největší velikost Select Vybrat Filter Filtrovat From Od To Do Check this to enable filtering on dates Zaškrtněte pro zapnutí filtrování podle dat Filter dates Filtrovat data Find Najít Check this to enable filtering on sizes Zaškrtněte pro zapnutí filtrování podle velikostí Filter sizes Filtrovat velikosti Filter birth dates Filtrovat data narození ConfIndexW Can't write configuration file Nelze zapsat soubor s nastavením Global parameters Celkové parametry Local parameters Místní parametry Search parameters Parametry hledání Top directories Počáteční adresáře The list of directories where recursive indexing starts. Default: your home. Seznam adresářů, ve kterých začíná rejstříkování včetně podsložek. Výchozí: adresář Home. Skipped paths Přeskočené cesty These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Názvy názvy cest adresářů, které se nebudou rejstříkovat.<br>Může obsahovat zástupné symboly (žolíky). Musí odpovídat cestám, které rejstříkovač vidí (např. pokud v počátečních adresářích stojí '/home/me' a '/home' je ve skutečnosti odkazem na '/usr/home', potom by byl správným zápisem skippedPath '/home/me/tmp*' a ne '/usr/home/me/tmp*') Stemming languages Jazyky s kmeny slov The languages for which stemming expansion<br>dictionaries will be built. Jazyky, pro které se vytvoří <br>adresáře rozšíření kmenů slov. Log file name Název pro soubor se zápisem The file where the messages will be written.<br>Use 'stderr' for terminal output Soubor, do kterého se zapíše výstupní zpráva.<br>Pro výstupy na terminál použijte 'stderr' Log verbosity level Úroveň podrobnosti zápisu This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Tato hodnota upravuje množství zpráv,<br>od pouze chyb až po velké množství dat zajímavých pro ladění. Index flush megabytes interval Interval v megabytech pro vymazání rejstříku This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Tato hodnota upravuje množství dat, která jsou rejstříkována mezi spláchnutími na disk.<br>Pomáhá to řídit použití paměti rejstříkovače. Výchozí je 10 MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Toto je procentní podíl využívání disku - celkové využití disku, ne velikost rejstříku , kdy rejstříkování selže a zastaví se (kvůli vyhnutí se zaplnění vašeho disku).<br>Výchozí hodnota 0 odstraní všechna omezení, znamená žádné omezení. No aspell usage Nepoužívat aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Zakáže používání aspellu pro vytvoření přibližné podoby pravopisu v nástroji průzkumníka výrazů.<br> Užitečné, pokud aspell není přítomen anebo nepracuje. Aspell language Jazyk aspellu The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Jazyk pro adresář aspellu. Mělo by to vypadat jako 'en' nebo 'fr' nebo 'cs'...<br>Pokud není tato hodnota nastavena, použije se pro její vypočítání prostředí NLS, což obvykle pracuje. Pro získání představy o tom, co je ve vašem systému nainstalováno, napište 'aspell config' a hledejte soubory .dat v adresáři 'data-dir'. Database directory name Název adresáře s databází The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Název pro adresář, v němž se má ukládat rejstřík.<br>Neabsolutní cesta je vzata relativně k adresáři s nastavením. Výchozí je 'xapiandb'. Unac exceptions Výjimky unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Toto jsou výjimky pro mechanismus unac, který ve výchozím nastavení odstraňuje všechny diakritické znaky a nahrazuje je kanonickými obdobami. Toto odstraňování akcentů můžete (v závislosti na vaší řeči) pro některé znaky potlačit a zadat dodatečná nahrazení, např. pro ligatury. V každém mezerou odděleném záznamu je první znak zdrojovým (výchozím) a zbytek je nahrazení. Process the WEB history queue Zpracovat řadu historie WEBu Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Povolí rejstříkování Firefoxem navštívených stránek.<br>(také je potřeba, abyste nainstalovali přídavný modul Recollu pro Firefox) Web page store directory name Název adresáře pro ukládání internetové stránky The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Název pro adresář, kam se mají ukládat kopie navštívených internetových stránek.<br>Neabsolutní cesta je vzata relativně k adresáři s nastavením. Max. size for the web store (MB) Největší velikost pro ukládání internetových stránek (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Záznamy budou po dosažení velikosti vráceny do původního stavu.<br>Skutečně dává smysl jen zvětšení velikosti, protože zmenšení hodnoty neoseká stávající soubor (na konci jen plýtvání místem). Automatic diacritics sensitivity Automaticky rozlišovat diakritická znaménka <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Zapnout automaticky rozlišování diakritických znamének, když hledaný pojem obsahuje znaky a akcenty (ne v unac_except_trans). Jinak pro musíte použít jazyk dotazu a modifikátor <i>D</i>. Automatic character case sensitivity Automaticky rozlišovat velká a malá písmena <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Zapnout automaticky rozlišování velkých a malých písmen, když záznam obsahuje velká písmena (mimo na prvním místě). Jinak pro musíte použít jazyk dotazu a modifikátor <i>C</i>. Maximum term expansion count Největší počet rozšíření výrazu <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Největší počet rozšíření pro jeden výraz (např. při použití žolíků). Standardní výchozí hodnota 10 000 je rozumná a zabrání tomu, aby se hledaný pojem jevil jako zamrzlý, zatímco je procházen seznam pojmů. Maximum Xapian clauses count Největší počet výrazů Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Největší počet základních výrazů, které přidáme do jednoho dotazu Xapian. V některých případech se mohou výsledky rozšíření výrazu vynásobit, a my se chceme vyvarovat nadbytečné spotřebě paměti. Standardní výchozí hodnota 100 000 by měla ve většině případů naprosto postačovat a hodit se k typickému současnému sestavení zařízení (hardware). The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The language for which stemming expanzionaries will be build.<br>See Xapian stemmer documentation for possible values. Např. czech english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Jazyk pro aspell slovník. Hodnoty jsou dvoupísmenné jazykové kódy, např. 'cs', 'fr' . .<br>Pokud tato hodnota není nastavena, bude k výpočtu použita NLS prostředí, které obvykle funguje. Chcete-li získat představu o tom, co je instalováno na vašem systému, napište 'aspell config' a hledejte . u souborů v adresáři 'data-dir'. Indexer log file name Název souboru protokolu indexeru If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Je-li prázdné, bude použita výše uvedená hodnota názvu souboru protokolu. Může být užitečné mít samostatný záznam pro diagnostické účely, protože společný log bude vymazán při<br>spuštění GUI. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Procento plného limitu disku, na kterém přestaneme indexovat<br>Např. 90% se zastaví na 90% plné, 0 nebo 100 znamená bez limitu) Web history Historie webu Process the Web history queue Zpracovat frontu historie webového prohlížeče (by default, aspell suggests mispellings when a query has no results). (výchozí nastavení je, že aspell navrhuje překlepy, když dotaz nemá žádné výsledky) Page recycle interval Interval obnovy stránky <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Ve výchozím nastavení je v mezipaměti uchována pouze jedna instance URL adresy. Toto lze změnit nastavením hodnoty určující frekvenci, ve které uchováváme více instancí ('den', 'týden', 'měsíc', 'rok'). Upozorňujeme, že zvýšení intervalu nevymaže existující položky. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Poznámka: Staré stránky budou smazány, aby bylo místo pro nové, když je dosaženo maximální velikosti. Aktuální velikost: %1 Start folders Zahájit složky The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Seznam složek/adresářů, které mají být indexovány. Podadresáře budou zpracovány rekurzivně. Výchozí: váš domov. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Procentuální prahová hodnota plného disku, při které přestaneme indexovat (např. 90 pro zastavení při 90% plnosti, 0 nebo 100 znamená žádný limit) Browser add-on download folder Složka pro stahování doplňků pro prohlížeč Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Pouze nastavte toto, pokud jste nastavili parametr "Podadresář pro stahování" v nastavení doplňku pro webový prohlížeč. V tomto případě by to měla být úplná cesta k adresáři (např. /home/[me]/Downloads/my-subdir) Store some GUI parameters locally to the index Uložit některé parametry GUI lokálně do indexu. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index Nastavení GUI jsou obvykle uložena v globálním souboru platném pro všechny indexy. Nastavením tohoto parametru budou některá nastavení, jako například nastavení tabulky výsledků, specifická pro daný index. Suspend the real time indexer when running on battery Pozastavit indexování v reálném čase při běhu na baterii. The indexer will wait for a return on AC and reexec itself when it happens Indexér bude čekat na návrat na AC a znovu se spustí, když se to stane. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Seznam složek/adresářů k indexování rekurzivně s jejich podadresáři.<br>Znak '~' se rozšiřuje na váš domovský adresář, který je výchozí počáteční hodnotou. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Pouze typy MIME An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Vybraný seznam rejstříkovaných typů MIME.<br>Nic jiného se nebude rejstříkovat. Obyčejně je seznam prázdný a nečinný Exclude mime types Vyloučené typy MIME Mime types not to be indexed Typy MIME, které se nemají rejstříkovat Max. compressed file size (KB) Největší velikost zabaleného souboru (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Tato hodnota nastavuje práh, za kterým nebudou zabalené soubory zpracovávány. Nastavte na -1 pro žádné omezení, na 0 pro vůbec žádné rozbalování. Max. text file size (MB) Největší velikost textového souboru (KB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Tato hodnota nastavuje práh, za kterým nebudou textové soubory zpracovávány. Nastavte na -1 pro žádné omezení. Je to kvůli vyloučení obřích souborů se zápisem z rejstříkování. Text file page size (KB) Velikost stránky textového souboru (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Pokud je nastavena tato hodnota (nerovná se -1), textové soubory budou pro rejstříkování rozděleny na kousky o této velikosti. To pomůže při prohledávání velmi velkých textových souborů (např. souborů se zápisem). Max. filter exec. time (s) Max. doba trvání filtru (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Vnější filtry pracující déle než po tak dlouhou dobu budou přerušeny. Je to pro ten zřídkavý případ (např. postscript), kdy by dokument mohl zapříčinit vejití filtru do smyčky. Nastavte na -1 pro žádné omezení. Global Celkové ConfigSwitchDLG Switch to other configuration Přepnout na jinou konfiguraci. ConfigSwitchW Choose other Vyberte jiný Choose configuration directory Vyberte konfigurační adresář CronToolW Cron Dialog Dialog Cron <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> dávkový rejstříkovací rozvrh (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Každé pole může obsahovat zástupný symbol (*), jednoduchou číselnou hodnotu, čárkou oddělené seznamy (1,3,5) a rozsahy (1-7). Obecněji, pole se budou používat <span style=" font-style:italic;">jak je</span> uvnitř souboru crontab, a lze použít úplnou stavbu crontab, podívejte se na crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Například, zadání <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Dny, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> a <span style=" font-family:'Courier New,courier';">15</span> v <span style=" font-style:italic;">Minuty</span> spustí rejstříkování (recollindex) každý den v 12:15 dopoledne a 7:15 odpoledne</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Rozvrh s velmi častým spuštěním je pravděpodobně méně účinný než je rejstříkování ve skutečném čase.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Dny v týdnu (* nebo 0-7, 0 nebo 7 je neděle) Hours (* or 0-23) Hodiny (* nebo 0-23) Minutes (0-59) Minuty (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Klepněte na <span style=" font-style:italic;">Zakázat</span> pro zastavení automatického dávkového rejstříkování, <span style=" font-style:italic;">Povolit</span> pro jeho zapnutí, <span style=" font-style:italic;">Zrušit</span>, aby vše zůstalo beze změny.</p></body></html> Enable Povolit Disable Zakázat It seems that manually edited entries exist for recollindex, cannot edit crontab Zdá se, že pro recollindex existují ručně upravené záznamy, nelze upravit crontab Error installing cron entry. Bad syntax in fields ? Chyba při instalaci záznamu cron. Špatná skladba v polích? EditDialog Dialog Dialog EditTrans Source path Cesta ke zdroji Local path Místní cesta Config error Chyba v nastavení Original path Původní cesta Path in index Cesta v indexu Translated path Přeložená cesta EditTransBase Path Translations Překlady cest Setting path translations for Nastavení překladů cest pro Select one or several file types, then use the controls in the frame below to change how they are processed Vyberte jeden nebo více datových typů a použijte ovládací prvky v rámečku níže pro změnu způsobu, jakým jsou zpracovány Add Přidat Delete Smazat Cancel Zrušit Save Uložit FirstIdxDialog First indexing setup První nastavení rejstříkování <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Zdá se, že rejstřík pro toto nastavení neexistuje.</span><br /><br />Pokud chcete pouze zrejstříkovat svůj domovský adresář sadou rozumných výchozích nastavení, stiskněte tlačítko <span style=" font-style:italic;">Spustit rejstříkování nyní</span>. Podrobnosti budete moci upravit později. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Pokud chcete mít větší dohled, použijte následující odkazy pro upravení nastavení rejstříkování a rozvrhu.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">K těmto nástrojům lze přistupovat později v nabídce <span style=" font-style:italic;">Nastavení</span>.</p></body></html> Indexing configuration Nastavení rejstříkování This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Toto vám umožní nastavit adresáře, které chcete rejstříkovat, a další parametry, jako jsou cesty pro vyloučené soubory, výchozí znakové sady atd. Indexing schedule Rozvrh rejstříkování This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Toto vám umožní zvolit mezi dávkovým rejstříkováním a rejstříkováním ve skutečném čase, a nastavit automatický rozvrh pro dávkové rejstříkování (za použití cronu). Start indexing now Spustit rejstříkování nyní FragButs %1 not found. %1 nenalezen. %1: %2 %1: %2 Fragment Buttons Fragment tlačítka Query Fragments Kousky hledání IdxSchedW Index scheduling setup Nastavení rozvrhu rejstříkování <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> rejstříkování může běžet nepřetržitě, soubory se rejstříkují při jejich změně, nebo běžet v samostatných intervalech. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Četba příručky vám může pomoci při rozhodování se mezi těmito přístupy (stiskněte F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Tento nástroj vám může pomoci s nastavením rozvrhu pro automatizaci běhů dávkového rejstříkování, nebo spustit rejstříkování ve skutečném čase, když se přihlásíte (nebo obojí, což zřídkakdy dává smysl). </p></body></html> Cron scheduling Rozvrh cron The tool will let you decide at what time indexing should run and will install a crontab entry. Nástroj vám umožní rozhodnout se, kdy má rejstříkování běžet, a nainstaluje záznam crontab. Real time indexing start up Spuštění rejstříkování ve skutečném čase Decide if real time indexing will be started when you log in (only for the default index). Rozhodněte, zda se rejstříkování ve skutečném čase spustí, když se přihlásíte (pouze pro výchozí rejstřík). ListDialog Dialog Dialog GroupBox Seskupovací okénko Main No db directory in configuration Nenastaven žádný databázový adresář Could not open database in Nepodařilo se otevřít databázi v . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Klepněte na tlačítko Zrušit pro úpravu souboru s nastavením, předtím než se začne s rejstříkováním nebo na OK pro započetí s rejstříkováním. Configuration problem (dynconf Konfigurationsproblem (dynconf) "history" file is damaged or un(read)writeable, please check or remove it: Soubor "history" je poškozen nebo nezapisovatelný/nečitelný. Prověřte jej, prosím, anebo jej odstraňte: "history" file is damaged, please check or remove it: Soubor "history" je poškozen. Prověřte jej, prosím, anebo jej odstraňte: Needs "Show system tray icon" to be set in preferences! Potřebuje být nastaveno "Zobrazit ikonu v oznamovací oblasti systému" v nastavení! PTransEdit Path in index Cesta v indexu Translated path Přeložená cesta Config error Chyba v nastavení Original path Původní cesta Local path Místní cesta PTransEditBase Path Translations Překlady cest Select one or several file types, then use the controls in the frame below to change how they are processed Vyberte jeden nebo více datových typů a použijte ovládací prvky v rámečku níže pro změnu způsobu, jakým jsou zpracovány Add Přidat Delete Smazat Cancel Zrušit Save Uložit Preview &Search for: &Hledat: &Next &Další &Previous &Předchozí Match &Case Dbát na &psaní velkých a malých písmen Clear Vyprázdnit Creating preview text Vytváří se náhledový text Loading preview text into editor Náhledový text se nahrává do editoru Cannot create temporary directory Nelze vytvořit dočasný adresář Cancel Zrušit Close Tab Zavřít kartu Missing helper program: Chybí program s nápovědou: Can't turn doc into internal representation for Chyba při rejstříkování dokumentu Cannot create temporary directory: Nelze vytvořit dočasný adresář: Error while loading file Chyba při nahrávání souboru Form Formulář Tab 1 Tab 1 Open Otevřít Canceled Zrušeno Error loading the document: file missing. Chyba při načítání dokumentu: soubor chybí. Error loading the document: no permission. Chyba při načítání dokumentu: žádné oprávnění. Error loading: backend not configured. Chyba při načítání: backend není nakonfigurován. Error loading the document: other handler error<br>Maybe the application is locking the file ? Chyba při načítání dokumentu: jiná chyba handleru<br>Možná aplikace uzamčuje soubor? Error loading the document: other handler error. Chyba při načítání dokumentu: jiná chyba obsluhy. <br>Attempting to display from stored text. <br>Pokus o zobrazení z uloženého textu. Could not fetch stored text Nelze načíst uložený text Previous result document Dokument s předchozím výsledkem Next result document Dokument s dalším výsledkem Preview Window Náhled okna Close Window Zavřít okno Next doc in tab Další doc v záložce Previous doc in tab Předchozí doc v záložce Close tab Zavřít kartu Print tab Print tab Close preview window Zavřít náhled Show next result Zobrazit další výsledek Show previous result Zobrazit předchozí výsledek Print Tisk PreviewTextEdit Show fields Ukázat pole Show main text Ukázat hlavní text Print Tisk Print Current Preview Vytisknout nynější náhled Show image Ukázat obrázek Select All Vybrat vše Copy Kopírovat Save document to file Uložit dokument do souboru Fold lines Zalomit řádky Preserve indentation Zachovat odsazení Open document Otevřít dokument Reload as Plain Text Načíst znovu jako prostý text Reload as HTML Načíst znovu jako HTML QObject Global parameters Celkové parametry Local parameters Místní parametry <b>Customised subtrees <b>Vlastní podstromy The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Seznam podadresářů v rejstříkované hierarchii <br>kde některé parametry je potřeba nově vymezit. Výchozí: prázdný. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Parametry, které následují, jsou nastaveny buď na nejvyšší úrovni, pokud nic<br>, nebo pokud je v seznamu výše vybrán prázdný řádek, nebo pro vybraný podadresář.<br>Adresáře můžete přidat anebo odebrat klepnutím na tlačítka +/-. Skipped names Přeskočené názvy These are patterns for file or directory names which should not be indexed. Toto jsou vzory pro názvy souborů nebo adresářů, které se nemají rejstříkovat. Default character set Výchozí znaková sada This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Toto je znaková sada, která se používá pro čtení souborů, které svou znakovou sadu vnitřně neurčují, např.. soubory s textem.<br>Výchozí hodnota je prázdná a používá se hodnota prostředí NLS. Follow symbolic links Sledovat symbolické odkazy Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Během rejstříkování sledovat symbolické odkazy. Výchozí nastavení je ne kvůli vyvarovaní se dvojitého rejstříkování Index all file names Rejstříkovat všechny souborové názvy Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Rejstříkovat všechny názvy souborů, jejichž obsah nelze určit nebo zpracovat (žádný nebo nepodporovaný MIME typ). Výchozí hodnota je ano Beagle web history Internetová historie Beagle Search parameters Parametry hledání Web history Historie webu Default<br>character set Výchozí<br>znaková sada Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Toto je znaková sada, která se používá pro čtení souborů, které svou znakovou sadu vnitřně neurčují, např.. soubory s textem.<br>Výchozí hodnota je prázdná a používá se hodnota prostředí NLS. Ignored endings Přehlížená zakončení These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Toto jsou konce názvu souboru pro soubory, které budou indexovány pouze podle obsahu (žádný pokus o identifikaci typu MIME, žádné dekomprese, žádná indexace obsahu. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Toto jsou zakončení souborů pro soubory, které se budou rejstříkovat výhradně podle svého názvu (žádné určování typu MIME, žádné rozbalování, žádné rejstříkování obsahu). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>Parametry následující jsou nastaveny buď na nejvyšší úrovni, pokud je ve výše uvedeném listboxu nebo pro vybraný podadresář vybrán žádný nebo prázdný řádek. Složky můžete přidat nebo odebrat kliknutím na tlačítka +/. These are patterns for file or directory names which should not be indexed. Toto jsou vzory pro názvy souborů nebo adresářů, které by neměly být indexovány. QWidget Create or choose save directory Vytvořit nebo vybrat ukládací adresář Choose exactly one directory Vybrat přesně jeden adresář Could not read directory: Nepodařilo se číst z adresáře: Unexpected file name collision, cancelling. Neočekávaný střet v souborovém názvu. Ruší se. Cannot extract document: Nelze vytáhnout dokument: &Preview &Náhled &Open &Otevřít Open With Otevřít s Run Script Spustit skript Copy &File Name Kopírovat název &souboru Copy &URL Kopírovat adresu (&URL) &Write to File &Zapsat do souboru Save selection to files Uložit výběr do souborů Preview P&arent document/folder Náhled na &rodičovský dokument/složku &Open Parent document/folder &Otevřít rodičovský dokument/složku Find &similar documents Najít &podobné dokumenty Open &Snippets window Otevřít okno s úr&yvky Show subdocuments / attachments Ukázat podřízené dokumenty/přílohy &Open Parent document &Otevřít nadřazený dokument &Open Parent Folder &Otevřít nadřazenou složku Copy Text Zkopírovat text Copy &File Path Zkopírovat &Cestu k souboru Copy File Name Zkopírovat název souboru QxtConfirmationMessage Do not show again. Neukazovat znovu. RTIToolW Real time indexing automatic start Automatické spuštění rejstříkování ve skutečném čase <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> rejstříkování může být nastaveno tak, aby běželo jako démon. Soubory jsou aktualizovány při jejich změně, ve skutečném čase. Získáte tak vždy nejnovější rejstřík, ale prostředky systému se při tom používají nepřetržitě.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Spustit rejstříkovacího démona s mým sezením pracovní plochy. Also start indexing daemon right now. Spustit rejstříkovacího démona ihned. Replacing: Nahrazení: Replacing file Nahrazení souboru Can't create: Nelze vytvořit: Warning Varování Could not execute recollindex Nepodařilo se spustit recollindex Deleting: Mazání: Deleting file Smazání souboru Removing autostart Odstranění automatického spuštění Autostart file deleted. Kill current process too ? Soubor automatického spuštění smazán. Zabít i současný proces? Configuration name Název konfigurace Short alphanumeric nickname for this config Krátký alfanumerický přezdívka pro tuto konfiguraci Could not find Nepodařilo se najít RclCompleterModel Hits Nalezeno Hits RclMain About Recoll O programu Recoll Executing: [ Provádí se: [ Cannot retrieve document info from database Žádné informace o dokumentu v databázi Warning Varování Can't create preview window Nelze vytvořit náhledové okno Query results Výsledky hledání Document history Historie dokumentu History data Historická data Indexing in progress: Rejstříkuje se: Files Soubory Purge Vyčistit Stemdb Kmeny slov Closing Zavření Unknown Neznámý This search is not active any more Toto hledání už není činné Can't start query: Nelze spustit hledání: Bad viewer command line for %1: [%2] Please check the mimeconf file Chybový příkaz pro prohlížeč pro %1: [%2] Prověřte soubor mimeconf Cannot extract document or create temporary file Nelze vytáhnout dokument nebo vytvořit dočasný soubor (no stemming) Źádné rozšíření kmene slova (all languages) Všechny jazyky error retrieving stemming languages Chyba při vyhledání jazyků s kmeny slov Update &Index Obnovit &rejstřík Indexing interrupted Rejstříkování přerušeno Stop &Indexing Zastavit &rejstříkování All Vše media Multimedia message Zpráva other Jiné presentation Představení spreadsheet Tabulky text Text sorted Tříděno filtered Filtrováno External applications/commands needed and not found for indexing your file types: Pro rejstříkování vašich MIME typů jsou potřeba vnější programy/příkazy, které ale nebyly nalezeny: No helpers found missing Nenalezeny žádné pomocné programy Missing helper programs Chybí pomocné programy Save file dialog Uložit dialog souboru Choose a file name to save under Vyberte název souboru k uložení Document category filter Filtr pro skupinu dokumentu No external viewer configured for mime type [ Žádný vnější prohlížeč nebyl nastaven pro MIME typ [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Prohlížeč stanovený v MIME zobrazení pro %1: %2 nenalezen. Chcete spustit dialog s nastavením? Can't access file: Nelze přistoupit k souboru: Can't uncompress file: Nelze rozbalit soubor: Save file Uložit soubor Result count (est.) Počet výsledků (odhad) Query details Podrobnosti o hledání Could not open external index. Db not open. Check external index list. Nepodařilo se otevřít vnější rejstřík. Databáze neotevřena. Prověřte seznam vnějších rejstříků. No results found Nenalezeny žádné výsledky None Žádný Updating Obnova Done Hotovo Monitor Dohled Indexing failed Rejstříkování se nezdařilo The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Nynější rejstříkovací proces nebyl spuštěn z tohoto rozhraní. Klepněte na OK pro jeho zabití, nebo na Zrušit, aby byl ponechán sám Erasing index Smazání rejstříku Reset the index and start from scratch ? Nastavit rejstřík znovu a začít od nuly? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Hledání běží.<br>Kvůli omezením rejstříkovací knihovny<br>zrušení ukončí program Error Chyba Index not open Rejstřík neotevřen Index query error Chyba při hledání v rejstříku Indexed Mime Types Rejstříkované mime typy Content has been indexed for these MIME types: Obsah byl indexován pro tyto typy MIME: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Rejstřík není pro tento soubor nejnovější. Odmítá se riziko, že by byl ukázán špatný záznam. Klepněte na OK pro obnovení rejstříku pro tento soubor, pak, až bude rejstříkování hotovo, spusťte dotaz znovu. Jinak klepněte na Zrušit. Can't update index: indexer running Nelze obnovit rejstřík: běží rejstříkovač Indexed MIME Types Rejstříkované MIME typy Bad viewer command line for %1: [%2] Please check the mimeview file Chybový příkaz pro prohlížeč pro %1: [%2] Prověřte soubor mimeconf Viewer command line for %1 specifies both file and parent file value: unsupported Příkaz pro prohlížeč pro %1 stanovuje jak hodnotu souboru tak hodnotu rodičovského souboru: nepodporováno Cannot find parent document Nelze najít rodičovský dokument Indexing did not run yet Rejstříkování ještě neběželo External applications/commands needed for your file types and not found, as stored by the last indexing pass in Pro vaše souborové typy jsou potřeba vnější programy/příkazy, které ale nebyly nalezeny, jak byly uloženy při posledním rejstříkování v Index not up to date for this file. Refusing to risk showing the wrong entry. Rejstřík není pro tento soubor nejnovější. Ukázání nesprávného záznamu bylo zamítnuto. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Klepněte na tlačítko pro aktualizaci rejstříku pro tento soubor, potom dotaz, až bude rejstříkování hotovo, spusťte znovu. Jinak klepněte na Zrušit. Indexer running so things should improve when it's done Rejstříkovač běží, takže věci by se po dokončení rejstříkování měly zlepšit Sub-documents and attachments Podřízené dokumenty a přílohy Document filter Filtr dokumentu Index not up to date for this file. Refusing to risk showing the wrong entry. Rejstřík není pro tento soubor nejnovější. Ukázání nesprávného záznamu bylo zamítnuto. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Klepněte na tlačítko pro aktualizaci rejstříku pro tento soubor, potom hledání, až bude rejstříkování hotovo, spusťte znovu. The indexer is running so things should improve when it's done. Rejstříkovač běží, takže věci by se po dokončení rejstříkování měly zlepšit. The document belongs to an external indexwhich I can't update. Dokument je součástí vnějšího rejstříku, který nelze aktualizovat. Click Cancel to return to the list. Click Ignore to show the preview anyway. Klepněte na tlačítko Zrušit pro návrat do seznamu. Klepněte na tlačítko Přehlížet, aby byl přesto ukázán náhled. Duplicate documents Zdvojené dokumenty These Urls ( | ipath) share the same content: Tyto adresy ( | ipath) sdílejí totožný obsah: Bad desktop app spec for %1: [%2] Please check the desktop file Chybná specifikace aplikace pro %1: [%2] Prověřte soubor pracovní plochy Bad paths Špatné cesty Bad paths in configuration file: Špatné cesty v souboru s nastavením: Selection patterns need topdir Výběrové vzory potřebují počáteční adresář Selection patterns can only be used with a start directory Výběrové vzory lze použít jen s počátečním adresářem No search Žádné hledání No preserved previous search Žádné zachované předchozí hledání Choose file to save Vybrat soubor k uložení Saved Queries (*.rclq) Uložené dotazy (*.rclq) Write failed Nepodařilo se zapsat Could not write to file Nepodařilo se zapsat do souboru Read failed Nepodařilo se přečíst Could not open file: Nepodařilo se otevřít soubor: Load error Chyba při nahrávání Could not load saved query Nepodařilo se nahrát uložené hledání Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Otevírá se dočasná kopie. Úpravy budou ztraceny, pokud je neuložíte<br/>do trvalého umístění. Do not show this warning next time (use GUI preferences to restore). Neukazovat toto varování příště (použít nastavení uživatelského rozhraní pro obnovení). Disabled because the real time indexer was not compiled in. Zakázáno protože rejstříkovač ve skutečném čase nebyl sestaven. This configuration tool only works for the main index. Tento nastavovací nástroj pracuje jen pro hlavní rejstřík. The current indexing process was not started from this interface, can't kill it Nynější rejstříkovací proces nebyl spuštěn z tohoto rozhraní. Nelze jej ukončit The document belongs to an external index which I can't update. Dokument je součástí vnějšího rejstříku, který nelze aktualizovat. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Klepněte na tlačítko Zrušit pro návrat do seznamu. <br>Klepněte na tlačítko Přehlížet pro ukázání náhledu tak jako tak (zapamatovat si pro toto sezení). Index scheduling Rozvržení rejstříkování Sorry, not available under Windows for now, use the File menu entries to update the index Promiňte. Není nyní dostupné pod OS Windows. Použijte položek v nabídce Soubor k aktualizaci rejstříku Can't set synonyms file (parse error?) Nelze nastavit soubor se slovy majícími stejný význam (synonyma). Chyba při zpracování? Index locked Rejstřík uzamknut Unknown indexer state. Can't access webcache file. Neznámý stav rejstříkovače. Nelze přistupovat k souboru s internetovou vyrovnávací pamětí. Indexer is running. Can't access webcache file. Rejstříkovač běží. Nelze přistupovat k souboru s internetovou vyrovnávací pamětí. with additional message: s dodatečnou zprávou: Non-fatal indexing message: Nekritická zpráva o rejstříkování: Types list empty: maybe wait for indexing to progress? Píše seznam prázdný: Možná počkat na pokračování rejstříkování? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Příkaz pro prohlížeč pro %1 stanovuje rodičovský soubor, ale adresa (URL) je http[s]: nepodporováno Tools Nástroje Results Výsledky (%d documents/%d files/%d errors/%d total files) (%d dokumentů/%d souborů/%d chyby/%d souborů) (%d documents/%d files/%d errors) (%d dokumentů/%d souborů /%d chyb) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Prázdné nebo neexistující cesty v konfiguračním souboru. Klepnutím na tlačítko Ok přesto začnete indexovat (chybějící data nebudou vymazána z indexu): Indexing done Indexování dokončeno Can't update index: internal error Může't aktualizovat index: interní chyba Index not up to date for this file.<br> Index není pro tento soubor aktuální.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Také se zdá, že poslední aktualizace indexu souboru selhala.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Klepnutím na tlačítko Ok se pokusíte aktualizovat index pro tento soubor. Po dokončení indexování budete muset dotaz znovu spustit.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Klepnutím na tlačítko Zrušit se vrátíte do seznamu.<br>Klepnutím na tlačítko Ignorovat zobrazení náhledu (a pamatovat pro tuto relaci). Existuje riziko, že se zobrazí chybná položka.<br/> documents dokumenty document dokument files soubory file soubor errors chyby error chyba total files) celkem souborů) No information: initial indexing not yet performed. Žádné informace: počáteční indexování ještě nebylo provedeno. Batch scheduling Hromadné plánování The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Nástroj vám umožní rozhodnout, v jakém čase by se indexace měla spustit. Používá plánovač úkolů Windows. Confirm Potvrdit Erasing simple and advanced search history lists, please click Ok to confirm Mazání jednoduchých a pokročilých seznamů historie vyhledávání, prosím klikněte na tlačítko OK pro potvrzení Could not open/create file Nelze otevřít/vytvořit soubor F&ilter &Prolínač Could not start recollindex (temp file error) Nelze spustit recollindex (dočasná chyba souboru) Could not read: Nelze přečíst: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Toto nahradí aktuální obsah řetězce seznamu výsledků a názvu souboru GUI qss. Pokračovat? You will need to run a query to complete the display change. Pro dokončení změny zobrazení budete muset spustit dotaz. Simple search type Jednoduchý typ vyhledávání Any term Jakýkoli výraz All terms Všechny výrazy File name Název souboru Query language Jazyk hledání Stemming language Jazyk s kmeny slov Main Window Hlavní okno Focus to Search Zaměřit se na hledání Focus to Search, alt. Zaměřit se na hledání, také. Clear Search Vymazat hledání Focus to Result Table Zaměřit se na tabulku výsledků Clear search Vymazat hledání Move keyboard focus to search entry Přesunout zaměření klávesnice do položky hledání Move keyboard focus to search, alt. Přesuňte zaměření klávesnice pro vyhledávání. Toggle tabular display Přepnout zobrazení tabulky Move keyboard focus to table Přesunout zaostření klávesnice do tabulky Flushing Promazání Show menu search dialog Zobrazit dialogové okno vyhledávání v menu. Duplicates Duplikáty Filter directories Filtrovat adresáře Main index open error: Chyba při otevírání hlavního indexu: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Index může být poškozen. Možná zkuste spustit xapian-check nebo znovu vytvořit index? This search is not active anymore Tento vyhledávací dotaz již není aktivní. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Příkazový řádek prohlížeče pro %1 určuje nadřazený soubor, ale URL není file:// : nepodporováno. The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Prohlížeč určený v mimeview pro %1: %2 není nalezen. Chcete spustit dialog s nastavením? Show advanced search dialog Zobrazit dialog pokročilého vyhledávání with additional message: RclMainBase Previous page Předchozí strana Next page Další strana &File &Soubor E&xit &Ukončit &Tools &Nástroje &Help &Nápověda &Preferences &Nastavení Search tools Nástroje pro hledání Result list Seznam s výsledky &About Recoll &O programu Recoll Document &History &Historie dokumentu Document History Historie dokumentu &Advanced Search &Pokročilé hledání Advanced/complex Search Pokročilé/Složené hledání &Sort parameters Parametry &třídění Sort parameters Parametry třídění Next page of results Další strana s výsledky Previous page of results Předchozí strana s výsledky &Query configuration Nastavení &hledání &User manual &Uživatelská příručka Recoll Přepočítat Ctrl+Q Ctrl + Q Update &index Obnovit &rejstřík Term &explorer Průzkumník &výrazů Term explorer tool Nástroj průzkumníka výrazů External index dialog Dialog pro vnější rejstříkování &Erase document history &Vymazat historii dokumentu First page První strana Go to first page of results Jít na první stranu s výsledky &Indexing configuration Nastavení &rejstříkování All Vše &Show missing helpers &Ukázat chybějící pomocné programy PgDown O stranu dolů (PgDown) Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Domů, Ctrl+S, Ctrl+Q, Ctrl+S PgUp O stranu nahoru (PgUp) &Full Screen &Celá obrazovka F11 F11 Full Screen Na celou obrazovku &Erase search history &Vymazat historii hledání sortByDateAsc Třídit podle data vzestupně Sort by dates from oldest to newest Roztřídit podle data od nejstaršího po nejnovější sortByDateDesc Třídit podle data sestupně Sort by dates from newest to oldest Roztřídit podle data od nejnovějšího po nejstarší Show Query Details Ukázat podrobnosti hledání Show results as table Ukázat výsledky jako tabulku &Rebuild index &Sestavit rejstřík znovu &Show indexed types &Ukázat rejstříkované typy Shift+PgUp Shift+PgUp &Indexing schedule Rozvrh &rejstříkování E&xternal index dialog Dialog pro &vnější rejstříkování &Index configuration Nastavení &rejstříku &GUI configuration Nastavení uživatelského roz&hraní &Results &Výsledky Sort by date, oldest first Roztřídit podle data, nejprve nejstarší Sort by date, newest first Roztřídit podle data, nejprve nejnovější Show as table Ukázat jako tabulku Show results in a spreadsheet-like table Ukázat výsledky v tabulce na způsob sešitu s listy v tabulkovém kalkulátoru Save as CSV (spreadsheet) file Uložit jako soubor CSV (tabulkový dokument) Saves the result into a file which you can load in a spreadsheet Uložit výsledek do souboru, jejž můžete nahrát jako sešit s listy v tabulkovém kalkulátoru Next Page Další strana Previous Page Předchozí strana First Page První strana Query Fragments Kousky hledání With failed files retrying S novým pokusem o zpracování selhavších souborů Next update will retry previously failed files Nová aktualizace rejstříku se pokusí znovu zpracovat nyní nezpracované soubory Save last query Uložit poslední hledání Load saved query Nahrát uložené hledání Special Indexing Zvláštní rejstříkování Indexing with special options Rejstříkování se zvláštními volbami Indexing &schedule &Rozvrh rejstříkování Enable synonyms Povolit slova mající stejný význam &View &Pohled Missing &helpers Chybějící &pomocné programy Indexed &MIME types Rejstříkované &MIME typy Index &statistics &Statistika rejstříku Webcache Editor Editor internetové vyrovnávací paměti Trigger incremental pass Spustit přírůstkové procházení E&xport simple search history &Exportovat jednoduchou historii vyhledávání Use default dark mode Použít výchozí tmavý režim Dark mode Tmavý režim &Query &Dotaz Increase results text font size Zvětšit velikost písma výsledků. Increase Font Size Zvětšit velikost písma Decrease results text font size Zmenšit velikost písma výsledků. Decrease Font Size Zmenšit velikost písma Start real time indexer Spusťte indexování v reálném čase. Query Language Filters Filtrování jazyka dotazů Filter dates Filtrovat data Assisted complex search Pomocí složitého vyhledávání Filter birth dates Filtrovat data narození Switch Configuration... Konfigurace přepínače... Choose another configuration to run on, replacing this process Vyberte jinou konfiguraci, na které chcete spustit, nahrazující tento proces. &User manual (local, one HTML page) Uživatelská příručka (lokální, jedna HTML stránka) &Online manual (Recoll Web site) Online manuál (Recoll webová stránka) Path translations Překlady cest With failed files retrying RclTrayIcon Restore Obnovit Quit Ukončit RecollModel Abstract Výtah Author Autor Document size Velikost dokumentu Document date Datum dokumentu File size Velikost souboru File name Název souboru File date Datum souboru Ipath Ipath Keywords Klíčová slova Mime type Mime typ Original character set Původní znaková sada Relevancy rating Hodnocení závažnosti Title Název URL Adresa (URL) Mtime Mtime Date Datum Date and time Datum a čas MIME type Typ MIME Can't sort by inverse relevance Může'seřadit podle obráceného významu ResList Result list Výsledky Unavailable document Nedostupný dokument Previous Předchozí Next Další <p><b>No results found</b><br> <p><b>Nebyly nalezeny žádné výsledky</b><br> &Preview &Náhled Copy &URL Kopírovat adresu (&URL) Find &similar documents Najít &podobné dokumenty Query details Podrobnosti o hledání (show query) (ukázat hledání) Copy &File Name Kopírovat název &souboru filtered Filtrováno sorted Tříděno Document history Historie dokumentu Preview Náhled Open Otevřít <p><i>Alternate spellings (accents suppressed): </i> <p><i>Náhradní pravopis (přízvuky potlačeny): </i> &Write to File &Zapsat do souboru Preview P&arent document/folder Náhled na &rodičovský dokument/složku &Open Parent document/folder &Otevřít rodičovský dokument/složku &Open &Otevřít Documents Dokumenty out of at least mimo alespoň for pro <p><i>Alternate spellings: </i> <p><i>Náhradní pravopis: </i> Open &Snippets window Otevřít okno s úr&yvky Duplicate documents Zdvojené dokumenty These Urls ( | ipath) share the same content: Tyto adresy ( | ipath) sdílejí totožný obsah: Result count (est.) Počet výsledků (odhad) Snippets Úryvky This spelling guess was added to the search: Tento odhad pravopisu byl přidán do vyhledávání: These spelling guesses were added to the search: Tato odhadovaná pravopisná slova byla přidána do vyhledávání: ResTable &Reset sort Nastavit třídění &znovu &Delete column &Smazat sloupec Add " Přidat " " column " sloupec Save table to CSV file Uložit tabulku jako soubor CSV Can't open/create file: Nelze otevřít/vytvořit soubor: &Preview &Náhled &Open &Otevřít Copy &File Name Kopírovat název &souboru Copy &URL Kopírovat adresu (&URL) &Write to File &Zapsat do souboru Find &similar documents Najít &podobné dokumenty Preview P&arent document/folder Náhled na &rodičovský dokument/složku &Open Parent document/folder &Otevřít rodičovský dokument/složku &Save as CSV &Uložit jako CSV Add "%1" column Přidat sloupec "%1" Result Table Tabulka výsledků Open Otevřít Open and Quit Otevřít a ukončit Preview Náhled Show Snippets Zobrazit snippety Open current result document Otevřít aktuální dokument výsledku Open current result and quit Otevřít aktuální výsledek a ukončit Show snippets Zobrazit textové bloky Show header Zobrazit záhlaví Show vertical header Zobrazit vertikální záhlaví Copy current result text to clipboard Zkopírovat aktuální text výsledku do schránky Use Shift+click to display the text instead. Použijte Shift+klepnutí pro zobrazení textu místo toho. %1 bytes copied to clipboard %1 bytů zkopírováno do schránky Copy result text and quit Zkopírovat výsledný text a ukončit. ResTableDetailArea &Preview &Náhled &Open &Otevřít Copy &File Name Kopírovat název &souboru Copy &URL Kopírovat adresu (&URL) &Write to File &Zapsat do souboru Find &similar documents Najít &podobné dokumenty Preview P&arent document/folder Náhled na &rodičovský dokument/složku &Open Parent document/folder &Otevřít rodičovský dokument/složku ResultPopup &Preview &Náhled &Open &Otevřít Copy &File Name Kopírovat název &souboru Copy &URL Kopírovat adresu (&URL) &Write to File &Zapsat do souboru Save selection to files Uložit výběr do souborů Preview P&arent document/folder Náhled na &rodičovský dokument/složku &Open Parent document/folder &Otevřít rodičovský dokument/složku Find &similar documents Najít &podobné dokumenty Open &Snippets window Otevřít okno s úr&yvky Show subdocuments / attachments Ukázat podřízené dokumenty/přílohy Open With Otevřít s Run Script Spustit skript SSearch Any term Jakýkoli výraz All terms Všechny výrazy File name Název souboru Completions Doplnění Select an item: Vyberte položku: Too many completions Příliš mnoho doplnění Query language Jazyk hledání Bad query string Špatný řetězec hledání Out of memory Není dostupná žádná další paměť Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Zadejte výraz jazyka hledání. Seznam:<br> <i>term1 term2</i> : 'term1' a 'term2' do kteréhokoli pole.<br> <i>field:term1</i> : 'term1' do pole 'field'.<br> Obvyklé názvy polí/synonyma:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudopole: dir, mime/format, type/rclcat, date.<br> Příklady intervalů dvou dat: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> Nepovoleny žádné závorky.<br> <i>"term1 term2"</i> : větný úsek (musí se objevit přesně). Možné modifikátory:<br> <i>"term1 term2"p</i> : neuspořádané hledání podle blízkosti s výchozí vzdáleností.<br> Použijte odkaz <b>Ukázat hledání</b>, když máte o výsledku pochybnost, a podívejte se do příručky (&lt;F1>) na další podrobnosti. Enter file name wildcard expression. Zadejte žolíkový výraz (zástupný symbol) pro název souboru. Enter search terms here. Type ESC SPC for completions of current term. Zde zadejte hledané výrazy. Stiskněte ESC SPC pro doplnění současného výrazu. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Zadejte výraz jazyka hledání. Seznam:<br> <i>term1 term2</i> : 'term1' a 'term2' do kteréhokoli pole.<br> <i>field:term1</i> : 'term1' do pole 'field'.<br> Obvyklé názvy polí/synonyma:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudopole: dir, mime/format, type/rclcat, date.<br> Příklady intervalů dvou dat: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> Můžete použít kulaté závorky, aby byly věci zřetelnější.<br> <i>"term1 term2"</i> : větný úsek (musí se objevit přesně). Možné modifikátory:<br> <i>"term1 term2"p</i> : neuspořádané hledání podle blízkosti s výchozí vzdáleností.<br> Použijte odkaz <b>Ukázat hledání</b>, když máte o výsledku pochybnost, a podívejte se do příručky (&lt;F1>) na další podrobnosti. Stemming languages for stored query: Jazyky s kmeny slov pro uložená hledání: differ from current preferences (kept) liší se od nynějšího nastavení (ponecháno) Auto suffixes for stored query: Automatické přípony pro uložená hledání: External indexes for stored query: Vnější rejstříky pro uložená hledání: Autophrase is set but it was unset for stored query Automatické tvoření slovních obratů je nastaveno, ale bylo zrušeno pro uložené hledání Autophrase is unset but it was set for stored query Automatické tvoření slovních obratů je zrušeno, ale bylo nastaveno pro uložené hledání Enter search terms here. Zde zadejte hledané výrazy. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; hranice: 1px pevná černá; border-collapse: collapse; zhroucení hranic: zhroucení; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Jazyk dotazu. Kliknutím <b>Zobrazit dotaz</b>.&nbsp; You should really look at the manual (F1)</p> Měli byste se opravdu podívat na manuál (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Co</th><th>Příklady</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>A</td><td>jeden druhý&nbsp;&nbsp;&nbsp;one AND dva&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Nebo</td><td>jeden NEBO dva&nbsp;&nbsp;&nbsp;one || dva</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Komplexní boolean. NEBO má prioritu, použijte závorky&nbsp; where needed</td><td>(one AND two) OR three</td></tr> v případě potřeby</td><td>(jeden A dva) NEBO tři</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Ne</td><td>období</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Fráze</td><td>"pride a dotčení"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Neuspořádané prox. (výchozí slack=10)</td><td>"poškodí&nbsp;hrdost"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Žádné kmenové rozšíření: kapitalizovat</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>specifické pro pole</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>A uvnitř pole (bez pořadí)</td><td>autor:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>NEBO uvnitř pole</td><td>autor:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Názvy polí</td><td>název/předmět/titulek&nbsp;&nbsp;autora/od<br>příjemce/do&nbsp;&nbsp;název souboru&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Cesta k filtru adresáře</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>filtr typu MIME</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Datové intervaly</td><td>datum:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> Datum:2018&nbsp;&nbsp;datum:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Může't otevřít index Could not restore external indexes for stored query:<br> Externí indexy pro uložený dotaz nelze obnovit:<br> ??? ??? Using current preferences. Použití aktuálních preferencí. Simple search Jednoduché vyhledávání History Historie <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <p>Šablona podvádění dotazovacího jazyka. V případě pochybností klikněte na <b>Zobrazit podrobnosti dotazu</b>.&nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Velká počáteční písmena pro potlačení rozšíření stonku</td><td>Přízemí</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Smazat Ctrl+S Ctrl + S Erase search entry Smazat hledaný záznam Search Hledat Start query Spustit hledání Enter search terms here. Type ESC SPC for completions of current term. Zde zadejte hledané výrazy. Stiskněte ESC SPC pro doplnění současného výrazu. Choose search type. Vyberte typ hledání. Show query history Zobrazit historii dotazů Enter search terms here. Zde zadejte hledané výrazy. Main menu Hlavní menu SearchClauseW SearchClauseW Vyhledávací ClauseW Any of these jakýkoli z těchto All of these Všechny tyto None of these Žádný z těchto This phrase Tato slova Terms in proximity Podobné výrazy File name matching Odpovídající názvy souborů Select the type of query that will be performed with the words Vyberte druh hledání, se kterým se slova budou hledat Number of additional words that may be interspersed with the chosen ones Počet slov, která se smějí nacházet mezi hledanými In field V poli No field Žádné pole Any Jakýkoliv All Vše None Žádný Phrase Tato slova Proximity Podobné výrazy File name Název souboru Snippets Snippets Úryvky X X Find: Hledat: Next Další Prev Předchozí SnippetsW Search Hledat <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>V rámci omezení hledání nebyla bohužel nalezena žádná shoda. Pravděpodobně je dokument velice velký a vyvíječ úryvků se v něm ztratil (nebo skončil ve škarpě)...</p> Sort By Relevance Seřadit podle důležitosti Sort By Page Seřadit podle stránky Snippets Window Okno textových bloků Find Najít Find (alt) Najít (alt) Find Next Najít další Find Previous Najít předchozí Hide Skrýt Find next Najít další Find previous Najít předchozí Close window Zavřít okno Increase font size Zvětšit velikost písma Decrease font size Zmenšit velikost písma SortForm Date Datum Mime type Mime Type SortFormBase Sort Criteria Sortierkriterium Sort the Zeige die most relevant results by: relevantesten Ergebnisse sortiert nach: Descending Absteigend Close Schließen Apply Übernehmen SpecIdxW Special Indexing Zvláštní rejstříkování Do not retry previously failed files. Nezkoušet znovu soubory, které předtím selhaly. Else only modified or failed files will be processed. Jinak jen změněné nebo selhavší soubory budou zpracovány. Erase selected files data before indexing. Vymazat před rejstříkováním data vybraných souborů. Directory to recursively index Adresář pro rekurzivní index Browse Procházet Start directory (else use regular topdirs): Začáteční adresář (jinak použít počáteční adresáře): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Ponechat prázdné pro vybrání všech souborů. Můžete použít více vzorů oddělených mezerami.<br>Vzory s vloženými mezerami musejí být uzavřeny ve dvojitých uvozovkách.<br>Lze použít, jen když je nastaven začáteční cíl. Selection patterns: Výběrové vzory: Top indexed entity Předmět rejstříkovaný od spuštění Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Adresář k rejstříkování včetně podadresářů. Musí být uvnitř rejstříkované oblasti<br>, jak je stanovena v souboru s nastavením (počáteční adresáře). Retry previously failed files. Opakovat dříve neúspěšné soubory. Start directory. Must be part of the indexed tree. We use topdirs if empty. Počáteční adresář. Musí být součástí indexovaného stromu. Pokud je prázdné, použijeme topdiry. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Počáteční adresář. Musí být součástí indexovaného stromu. Pokud je prázdné, použijte celou indexovanou oblast. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Soubor diagnostického výstupu. Bude zkrácen a obdrží indexační diagnostiku (důvody, proč soubory nejsou indexovány). Diagnostics file Diagnostický soubor SpellBase Term Explorer Průzkumník výrazů &Expand &Rozbalit Alt+E Alt + E &Close &Zavřít Alt+C Alt+C Term Ausdruck No db info. Žádné informace o databázi. Doc. / Tot. Dok. / Tot. Match Shoda Case Rozlišování velkých a malých písmen Accents Přízvuky SpellW Wildcards Zástupné symboly Regexp Regulární výraz Spelling/Phonetic Pravopis/Hláskosloví Aspell init failed. Aspell not installed? Chyba při spuštění Aspellu. Aspell není nainstalován? Aspell expansion error. Chyba rozšíření Aspell. Stem expansion Rozšíření kmene slova error retrieving stemming languages Chyba při vyhledání jazyka s kmeny slov No expansion found Nenalezeno žádné rozšíření Term Výraz Doc. / Tot. Dok. / Tot. Index: %1 documents, average length %2 terms Rejstřík: %1 dokumentů, průměrná délka %2 výrazy(ů) Index: %1 documents, average length %2 terms.%3 results Rejstřík: %1 dokumentů, průměrná délka %2 výrazy(ů). %3 výsledky(ů) %1 results %1 výsledky(ů) List was truncated alphabetically, some frequent Seznam byl zkrácen abecedně, některé četné terms may be missing. Try using a longer root. pojmy mohou chybět. Zkuste použít delší kořen. Show index statistics Ukázat statistiku rejstříku Number of documents Počet dokumentů Average terms per document Průměrný počet výrazů na dokument Smallest document length Délka nejmenšího dokumentu Longest document length Délka nejdelšího dokumentu Database directory size Velikost adresáře s databází MIME types: Typy MIME: Item Položka Value Hodnota Smallest document length (terms) Nejmenší délka dokumentu (mez) Longest document length (terms) Největší délka dokumentu (mez) Results from last indexing: Výsledky posledního rejstříkování: Documents created/updated Dokumenty vytvořené nebo aktualizované Files tested Vyzkoušené soubory Unindexed files Nezrejstříkované soubory List files which could not be indexed (slow) Vypsat soubory, které se nepodařilo zrejstříkovat (pomalé) Spell expansion error. Chyba v pravopisných návrzích. Spell expansion error. Chyba rozšíření pravopisu. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index Zdá se, že vybraný adresář není rejstříkem Xapian Index This is the main/local index! Toto je hlavní/místní rejstřík! The selected directory is already in the index list Vybraný adresář je již částí rejstříkového seznamu Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Vyberte adresář s rejstříkem Xapian Indexverzeichnis (např.: /home/benutzer/.recoll/xapiandb) error retrieving stemming languages Chyba při vyhledání jazyka s kmeny slov Choose Vybrat Result list paragraph format (erase all to reset to default) Formát odstavce seznamu s výsledky (vymazat všechny pro znovunastavení na výchozí) Result list header (default is empty) Záhlaví seznamu s výsledky (výchozí je prázdné) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Vyberte adresář s nastavením pro Recoll nebo rejstříkový adresář Xapianu (např.: /home/me/.recoll or /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Vybraný adresář vypadá jako adresář s nastavením pro Recoll, ale nastavení se nepodařilo přečíst At most one index should be selected Je potřeba vybrat alespoň jeden rejstřík Cant add index with different case/diacritics stripping option Nelze přidat rejstřík s odlišnou volbou pro velikost písma/diakritiku Default QtWebkit font Výchozí písmo QtWebkit Any term Jakýkoli výraz All terms Všechny výrazy File name Název souboru Query language Jazyk hledání Value from previous program exit Hodnota obdržená z posledního ukončení programu Context Kontext Description L 343, 22.12.2009, s. 1). Shortcut Zkratka Default Výchozí Choose QSS File Vyberte soubor QSS Can't add index with different case/diacritics stripping option. Nelze přidat index s odlišnou možností odstranění velkých písmen/diakritiky. Light Světlo Dark Temný System Systém UIPrefsDialogBase User interface Benutzeroberfläche Number of entries in a result page Anzahl der Ergebnisse pro Seite Result list font Schriftart für Ergebnisliste Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Öffnet einen Dialog zur Auswahl der Schriftart für die Ergebnisliste Reset Nastavit znovu Resets the result list font to the system default Setzt die Schriftart für die Ergebnisliste zurück auf den Standardwert Auto-start simple search on whitespace entry. Automatisch eine einfache Suche starten, wenn ein Worttrenner im Sucheingabefeld eingegeben wird. Start with advanced search dialog open. Nach dem Start automatisch den Dialog für die erweiterte Suche öffnen. Start with sort dialog open. Nach dem Start automatisch den Sortierdialog öffnen. Search parameters Suchparameter Stemming language Stemming Sprache Dynamically build abstracts Zusammenfassungen dynamisch erzeugen Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Festlegung ob Zusammenfassungen für Ergebnisse im Kontext der Suchparameter erzeugt werden (kann bei großen Dokumenten langsam sein). Replace abstracts from documents Ersetzen der Zusammenfassungen in den Dokumenten Do we synthetize an abstract even if the document seemed to have one? Festlegung ob eine Zusammenfassung auch dann erzeugt wird, wenn das Dokument schon eine Zusammenfassung enthält Synthetic abstract size (characters) Länge der erzeugten Zusammenfassung (Zeichen) Synthetic abstract context words Anzahl der Kontextworte in der Zusammenfassung External Indexes externe Indizes Add index Index hinzufügen Select the xapiandb directory for the index you want to add, then click Add Index Wählen Sie das xapiandb-Verzeichnis des zuzufügenden Indizes und klicken Sie auf Index hinzufügen Browse Auswahl &OK &OK Apply changes Änderungen übernehmen &Cancel &Abbrechen Discard changes Änderungen verwerfen Result paragraph<br>format string Formatstring für Ergebnisse Automatically add phrase to simple searches Automatisches Zufügen von Sätzen zu einfachen Suchen A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Eine Suche nach [Jürgen Klinsmann] wird geändert nach [Jürgen OR Klinsmann OR (Jürgen PHRASE 2 Klinsmann)]. Dadurch sollten Ergebnisse, die exakte Übereinstimmungen der Suchworte enthalten, stärker gewichtet werden. User preferences Benutzereinstellungen Use desktop preferences to choose document editor. Die Einstellung des Dokumenteneditors erfolgt in den Desktopvoreinstellungen. External indexes Externe Indizes Toggle selected Auswahl umkehren Activate All Alle Auswählen Deactivate All Alle Abwählen Remove selected Ausgewählte entfernen Remove from list. This has no effect on the disk index. Aus der Liste entfernen. Dies hat keinen Einfluss auf den gespeicherten Index. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Stanovuje formát pro každý odstavec seznamu s výsledky. Použijte qt nahrazení formátu html a printf:<br>%A přehled<br> %D datum<br> %I název obrázku ikony<br> %K klíčová slova (jsou-li)<br> %L odkazy na náhled a úpravy<br> %M mime typ<br> %N počet výsledků<br> %R procento významnosti<br> %S informace o velikosti<br> %T název<br> %U adresa (URL)<br> Remember sort activation state. Speichern, ob Sortieren aktiviert ist. Maximum text size highlighted for preview (megabytes) Největší velikost textu zvýrazněného pro náhled (megabyty) Texts over this size will not be highlighted in preview (too slow). Texty nad tuto velikost nebudou v náhledu zvýrazňovány (příliš pomalé). Highlight color for query terms Zvýraznit barvu výrazů hledání Prefer Html to plain text for preview. Upřednostňovat pro náhled HTML před prostým textem If checked, results with the same content under different names will only be shown once. Je-li zaškrtnuto, budou výsledky se stejným obsahem pod jinými názvy ukázány jen jednou. Hide duplicate results. Skrýt zdvojené výsledky. Choose editor applications Vybrat programy editorů Display category filter as toolbar instead of button panel (needs restart). Zobrazit skupinový filtr jako nástrojový pruh místo tlačítkového panelu (potřebuje spustit program znovu). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Slova v seznamu budou v záznamu jazyka hledání automaticky obrácena na věty ext:xxx. Query language magic file name suffixes. Kouzelné přípony souborového názvu jazyka hledání Enable Povolit ViewAction Changing actions with different current values Mění se činnosti s odlišnými nynějšími hodnotami Mime type Mime typ Command Příkaz MIME type Typ MIME Desktop Default Výchozí plocha Changing entries with different current values Mění se záznamy s odlišnými nynějšími hodnotami ViewActionBase File type Dateityp Action Aktion Select one or several file types, then click Change Action to modify the program used to open them Vyberte jeden nebo více datových typů a klepněte na "Změnit činnost" pro změnu programu přiřazeného k jejich otevření Change Action Změnit činnost Close Zavřít Native Viewers Prohlížeče Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Vyberte jeden nebo několik MIME typů a potom klepněte na "Změnit činnost"<br>Taktéž můžete tento dialog zavřít a zaškrtnout "Použít nastavení pracovní plochy"<br>v hlavním panelu, aby se tento seznam přehlížel a pracovní plocha se použila jako výchozí. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Vyberte jeden nebo více MIME typů a použijte ovládací prvky v rámečku s tlačítky pro změnu způsobu, jakým jsou zpracovány. Use Desktop preferences by default Použít nastavení pracovní plochy jako výchozí Select one or several file types, then use the controls in the frame below to change how they are processed Vyberte jeden nebo více datových typů a použijte ovládací prvky v rámečku níže pro změnu způsobu, jakým jsou zpracovány Exception to Desktop preferences Výjimka pro nastavení pracovní plochy Action (empty -> recoll default) Činnost (prázdné -> výchozí pro Recoll) Apply to current selection Použít na nynější výběr Recoll action: Aktion current value aktuální hodnota Select same Vybrat stejný <b>New Values:</b> <b>Nové hodnoty:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Hodnota je příkazový řádek, který má být proveden. Nahrazování: %s: hledaný řetězec; %p: číslo stránky; <br>%f: název dokumentu. F1 pro více nápovědy. Webcache Webcache editor Editor internetové vyrovnávací paměti Search regexp Hledat regulární výraz TextLabel Textová značka WebcacheEdit Copy URL Kopírovat adresu (URL) Unknown indexer state. Can't edit webcache file. Neznámý stav rejstříkovače. Nelze upravovat soubor s internetovou vyrovnávací pamětí. Indexer is running. Can't edit webcache file. Rejstříkovač běží. Nelze upravovat soubor s internetovou vyrovnávací pamětí. Delete selection Smazat výběr Webcache was modified, you will need to run the indexer after closing this window. Internetová vyrovnávací paměť byla změněna. Po zavření tohoto okna budete muset spustit rejstříkovač. Save to File Uložit do souboru File creation failed: Vytvoření souboru se nezdařilo: Maximum size %1 (Index config.). Current size %2. Write position %3. Maximální velikost %1 (Konfigurace indexu). Aktuální velikost %2. Pozice zápisu %3. WebcacheModel MIME MIME Url URL Date Datum Size Velikost URL Adresa (URL) WinSchedToolW Error Chyba Configuration not initialized Konfigurace nebyla inicializována <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexování dávkového plánování</h3><p>K tomu používáme standardní plánovač úkolů pro Windows. Program bude spuštěn, když klepnete na tlačítko níže.</p><p>Můžete použít celé rozhraní (<i>Vytvořit úkol</i> v menu vpravo), nebo průvodce zjednodušeným <i>, vytvořit základní úkol</i> . V obou případech Kopírovat/Vložit cestu dávkového souboru uvedenou níže jako <i>Akce</i> , která má být provedena.</p> Command already started Příkaz byl již spuštěn Recoll Batch indexing Přepočítat indexování dávky Start Windows Task Scheduler tool Spustit Windows Task Scheduler nástroj Could not create batch file Nepodařilo se vytvořit soubor dávky. confgui::ConfBeaglePanelW Steal Beagle indexing queue Ukrást rejstříkovací řadu Beagle Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle NESMǏ běžet. Povolí zpracování řady Beagle pro rejstříkování internetové historie Firefoxu.<br>(také byste měl nainstalovat přídavný modul Beagle pro Firefox) Web cache directory name Název adresáře webové keše The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Název adresáře, ve kterém má být keš uložena pro navštívené webové stránky.<br>Neabsolutní cesta je vzhledem k adresáři konfigurace. Max. size for the web cache (MB) Max. velikost pro webovou keš (MB) Entries will be recycled once the size is reached Záznamy budou opětně použity, jakmile bude velikost dosažena Web page store directory name Název adresáře pro ukládání internetové stránky The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Název pro adresář, kam se mají ukládat kopie navštívených internetových stránek.<br>Neabsolutní cesta je vzata relativně k adresáři s nastavením. Max. size for the web store (MB) Největší velikost pro ukládání internetových stránek (MB) Process the WEB history queue Zpracovat řadu historie WEBu Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Povolí rejstříkování Firefoxem navštívených stránek.<br>(také je potřeba, abyste nainstalovali přídavný modul Recollu pro Firefox) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Záznamy budou po dosažení velikosti vráceny do původního stavu.<br>Skutečně dává smysl jen zvětšení velikosti, protože zmenšení hodnoty neoseká stávající soubor (na konci jen plýtvání místem). confgui::ConfIndexW Can't write configuration file Nelze zapsat soubor s nastavením Recoll - Index Settings: Přepočítat - Nastavení indexu: confgui::ConfParamFNW Browse Procházet Choose Vybrat confgui::ConfParamSLW + + - - Add entry Přidat položku Delete selected entries Odstranit vybrané položky ~ ~ Edit selected entries Upravit vybrané položky confgui::ConfSearchPanelW Automatic diacritics sensitivity Automaticky rozlišovat diakritická znaménka <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Zapnout automaticky rozlišování diakritických znamének, když hledaný pojem obsahuje znaky a akcenty (ne v unac_except_trans). Jinak pro musíte použít jazyk dotazu a modifikátor <i>D</i>. Automatic character case sensitivity Automaticky rozlišovat velká a malá písmena <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Zapnout automaticky rozlišování velkých a malých písmen, když záznam obsahuje velká písmena (mimo na prvním místě). Jinak pro musíte použít jazyk dotazu a modifikátor <i>C</i>. Maximum term expansion count Největší počet rozšíření výrazu <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Největší počet rozšíření pro jeden výraz (např. při použití žolíků). Standardní výchozí hodnota 10 000 je rozumná a zabrání tomu, aby se hledaný pojem jevil jako zamrzlý, zatímco je procházen seznam pojmů. Maximum Xapian clauses count Největší počet výrazů Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Největší počet základních výrazů, které přidáme do jednoho dotazu Xapian. V některých případech se mohou výsledky rozšíření výrazu vynásobit, a my se chceme vyvarovat nadbytečné spotřebě paměti. Standardní výchozí hodnota 100 000 by měla ve většině případů naprosto postačovat a hodit se k typickému současnému sestavení zařízení (hardware). confgui::ConfSubPanelW Global Celkové Max. compressed file size (KB) Největší velikost zabaleného souboru (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Tato hodnota nastavuje práh, za kterým nebudou zabalené soubory zpracovávány. Nastavte na -1 pro žádné omezení, na 0 pro vůbec žádné rozbalování. Max. text file size (MB) Největší velikost textového souboru (KB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Tato hodnota nastavuje práh, za kterým nebudou textové soubory zpracovávány. Nastavte na -1 pro žádné omezení. Je to kvůli vyloučení obřích souborů se zápisem z rejstříkování. Text file page size (KB) Velikost stránky textového souboru (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Pokud je nastavena tato hodnota (nerovná se -1), textové soubory budou pro rejstříkování rozděleny na kousky o této velikosti. To pomůže při prohledávání velmi velkých textových souborů (např. souborů se zápisem). Max. filter exec. time (S) Největší čas na provedení filtru (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Vnější filtry pracující déle než po tak dlouho budou přerušeny. Je to pro ten zřídkavý případ (např. postscript), kdy by dokument mohl zapříčinit filtr loopSet na -1 pro žádné omezení. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Vnější filtry pracující déle než po tak dlouhou dobu budou přerušeny. Je to pro ten zřídkavý případ (např. postscript), kdy by dokument mohl zapříčinit vejití filtru do smyčky. Nastavte na -1 pro žádné omezení. Only mime types Pouze typy MIME An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Vybraný seznam rejstříkovaných typů MIME.<br>Nic jiného se nebude rejstříkovat. Obyčejně je seznam prázdný a nečinný Exclude mime types Vyloučené typy MIME Mime types not to be indexed Typy MIME, které se nemají rejstříkovat Max. filter exec. time (s) Max. doba trvání filtru (s) confgui::ConfTabsW Apply Übernehmen confgui::ConfTopPanelW Top directories Počáteční adresáře The list of directories where recursive indexing starts. Default: your home. Seznam adresářů, ve kterých začíná rejstříkování včetně podsložek. Výchozí: adresář Home. Skipped paths Přeskočené cesty These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Názvy adresářů, které se nebudou rejstříkovat.<br>Může obsahovat zástupné symboly (žolíky). Musí odpovídat cestám, které rejstříkovač vidí (např. pokud v počátečních adresářích stojí '/home/me' a '/home' je ve skutečnosti odkazem na '/usr/home', potom by byl správným zápisem skippedPath '/home/me/tmp*' a ne '/usr/home/me/tmp*') Stemming languages Jazyky s kmeny slov The languages for which stemming expansion<br>dictionaries will be built. Jazyky, pro které se vytvoří <br>adresáře rozšíření kmenů slov. Log file name Název pro soubor se zápisem The file where the messages will be written.<br>Use 'stderr' for terminal output Soubor, do kterého se zapíše výstupní zpráva.<br>Pro výstupy na terminál použijte 'stderr' Log verbosity level Úroveň podrobnosti zápisu This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Tato hodnota upravuje množství zpráv,<br>od pouze chyb až po velké množství dat zajímavých pro ladění. Index flush megabytes interval Interval v megabytech pro vymazání rejstříku This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Tato hodnota upravuje množství dat, která jsou rejstříkována mezi spláchnutími na disk.<br>Pomáhá to řídit použití paměti rejstříkovače. Výchozí je 10 MB Max disk occupation (%) Největší obsazení disku (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Jde o procentní podíl využívání disku, kdy rejstříkování selže a zastaví se (kvůli vyhnutí se zaplnění vašeho disku).<br>0 znamená žádné omezení (tato hodnota je nastavena jako výchozí). No aspell usage Nepoužívat aspell Aspell language Jazyk aspellu The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Jazyk pro adresář aspellu. Mělo by to vypadat jako 'en' nebo 'fr' nebo 'cs'...<br>Pokud není tato hodnota nastavena, použije se pro její vypočítání prostředí NLS, což obvykle pracuje. Pro získání představy o tom, co je ve vašem systému nainstalováno, napište 'aspell config' a hledejte soubory .dat v adresáři 'data-dir'. Database directory name Název adresáře s databází The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Název pro adresář, v němž se má ukládat rejstřík.<br>Neabsolutní cesta je vzata relativně k adresáři s nastavením. Výchozí je 'xapiandb'. Use system's 'file' command Použít příkaz 'file' Use the system's 'file' command if internal<br>mime type identification fails. Použít příkaz 'file', když vnitřní<br>rozpoznání MIME typu selže. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Zakáže používání aspellu pro vytvoření přibližné podoby pravopisu v nástroji průzkumníka výrazů.<br> Užitečné, pokud aspell není přítomen anebo nepracuje. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Jazyk pro adresář aspellu. Mělo by to vypadat jako 'en' nebo 'fr' nebo 'cs'...<br>Pokud není tato hodnota nastavena, použije se pro její vypočítání prostředí NLS, což obvykle pracuje. Pro získání představy o tom, co je ve vašem systému nainstalováno, napište 'aspell config' a hledejte soubory .dat v adresáři 'data-dir'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Název pro adresář, v němž se má ukládat rejstřík.<br>Neabsolutní cesta je vzata relativně k adresáři s nastavením. Výchozí je 'xapiandb'. Unac exceptions Výjimky unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Toto jsou výjimky pro mechanismus unac, který ve výchozím nastavení odstraňuje všechny diakritické znaky a nahrazuje je kanonickými obdobami. Toto odstraňování akcentů můžete (v závislosti na vaší řeči) pro některé znaky potlačit a zadat dodatečná nahrazení, např. pro ligatury. V každém mezerou odděleném záznamu je první znak zdrojovým (výchozím) a zbytek je nahrazení. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Názvy názvy cest adresářů, které se nebudou rejstříkovat.<br>Může obsahovat zástupné symboly (žolíky). Musí odpovídat cestám, které rejstříkovač vidí (např. pokud v počátečních adresářích stojí '/home/me' a '/home' je ve skutečnosti odkazem na '/usr/home', potom by byl správným zápisem skippedPath '/home/me/tmp*' a ne '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Největší obsazení disku (%, 0 znamená bez omezení) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Toto je procentní podíl využívání disku - celkové využití disku, ne velikost rejstříku , kdy rejstříkování selže a zastaví se (kvůli vyhnutí se zaplnění vašeho disku).<br>Výchozí hodnota 0 odstraní všechna omezení, znamená žádné omezení. uiPrefsDialogBase User preferences Uživatelská nastavení User interface Uživatelské rozhraní Number of entries in a result page Počet výsledků na stranu If checked, results with the same content under different names will only be shown once. Je-li zaškrtnuto, budou výsledky se stejným obsahem pod jinými názvy ukázány jen jednou. Hide duplicate results. Skrýt zdvojené výsledky. Highlight color for query terms Zvýraznit barvu výrazů hledání Result list font Písmo pro seznam s výsledky Opens a dialog to select the result list font Otevře dialog pro výběr písma seznamu výsledků Helvetica-10 Helvetica-10 Resets the result list font to the system default Nastaví písmo pro seznam s výsledky znovu na výchozí hodnotu Reset Nastavit znovu Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Stanovuje formát pro každý odstavec seznamu s výsledky. Použijte qt nahrazení formátu html a printf:<br>%A přehled<br> %D datum<br> %I název obrázku ikony<br> %K klíčová slova (jsou-li)<br> %L odkazy na náhled a úpravy<br> %M mime typ<br> %N počet výsledků<br> %R procento významnosti<br> %S informace o velikosti<br> %T název<br> %U adresa (URL)<br> Result paragraph<br>format string Řetězec formátu<br>pro výsledky Texts over this size will not be highlighted in preview (too slow). Texty nad tuto velikost nebudou v náhledu zvýrazňovány (příliš pomalé). Maximum text size highlighted for preview (megabytes) Největší velikost textu zvýrazněného pro náhled (megabyty) Use desktop preferences to choose document editor. Použít nastavení pracovní plochy pro výběr editoru pro dokumenty. Choose editor applications Vybrat programy editorů Display category filter as toolbar instead of button panel (needs restart). Zobrazit skupinový filtr jako nástrojový pruh místo tlačítkového panelu (potřebuje spustit program znovu). Auto-start simple search on whitespace entry. Automaticky spustit jednoduché hledání, když je do zadávacího pole pro hledání zadáno prázdné místo (mezera). Start with advanced search dialog open. Po spuštění automaticky otevřít dialog pro rozšířené hledání Start with sort dialog open. Nach dem Start automatisch den Sortierdialog öffnen. Remember sort activation state. Zapamatovat si stav zapnutí hledání Prefer Html to plain text for preview. Upřednostňovat pro náhled HTML před prostým textem Search parameters Parametry hledání Stemming language Jazyk s kmeny slov A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Hledání [Ježíš Kristus] se změní na [Ježíš OR Kristus OR (Ježíš PHRASE 2 Kristus)]. Tímto by měly být silněji zváženy výsledky, které obsahují přesné shody s hledaným slovem. Automatically add phrase to simple searches Automatické přidání vět do jednoduchého hledání Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Stanovení, zda se má vytvořit přehled pro výsledky v souvislosti s parametrem hledání. U velkých dokumentů může být pomalé. Dynamically build abstracts Vytvářet přehledy dynamicky Do we synthetize an abstract even if the document seemed to have one? Stanovení, zda se má vytvořit přehled i tehdy, když dokument již nějaký přehled obsahuje. Replace abstracts from documents Nahradit přehledy v dokumentech Synthetic abstract size (characters) Délka vytvořeného přehledu (počet znaků) Synthetic abstract context words Počet souvisejících slov v přehledu The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Slova v seznamu budou v záznamu jazyka hledání automaticky obrácena na věty ext:xxx. Query language magic file name suffixes. Kouzelné přípony souborového názvu jazyka hledání Enable Povolit External Indexes Vnější rejstříky Toggle selected Přepnout vybrané Activate All Zapnout vše Deactivate All Vypnout vše Remove from list. This has no effect on the disk index. Odstranit ze seznamu. Nemá to žádný účinek na uložený rejstřík. Remove selected Odstranit vybrané Click to add another index directory to the list Klepnout pro přidání dalšího rejstříkového adresáře do seznamu Add index Přidat rejstřík Apply changes Použít změny &OK &OK Discard changes Zahodit změny &Cancel Z&rušit Abstract snippet separator Oddělovač úryvků Use <PRE> tags instead of <BR>to display plain text as html. Použít značky <PRE> namísto <BR> pro zobrazení prostého textu jako HTML. Lines in PRE text are not folded. Using BR loses indentation. Řádky v textu PRE nejsou složeny. Použití BR povede ke ztrátě odsazení. Style sheet Stylový list Opens a dialog to select the style sheet file Otevře dialog pro výběr souboru se stylovým listem Choose Vybrat Resets the style sheet to default Nastaví stylový list znovu na výchozí Lines in PRE text are not folded. Using BR loses some indentation. Řádky v textu PRE nejsou složeny. Použití BR povede ke ztrátě odsazení. Use <PRE> tags instead of <BR>to display plain text as html in preview. Použít značky <PRE> namísto <BR> pro zobrazení prostého textu formátovaného v náhledu jako HTML. Result List Seznam s výsledky Edit result paragraph format string Upravit řetězec formátu pro výsledky Edit result page html header insert Upravit záhlaví html na straně s výsledky Date format (strftime(3)) Formát data (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Práh četnosti (procento), od kterého se výrazy nepoužívají. Slovní obraty obsahující příliš četné výrazy způsobují výkonnostní potíže. Přeskočené výrazy zvětšují vzdálenost slovního obratu a zmenšují účinnost funkce automatického hledání slovního obratu. Výchozí hodnota je 2 (procenta). Autophrase term frequency threshold percentage Četnost výskytu výrazu (procento) pro automatické tvoření slovních obratů Plain text to HTML line style Prostý text do stylu řádku HTML Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Řádky v PRE textu nejsou zalomeny. Při použití BR dojde ke ztrátě některých zalomení. Možná je to, co chcete styl PRE + zalomení. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + zalomení Exceptions Výjimky Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. MIME typy, jež nemají být předány xdg-open, dokonce i když je nastaveno "Použít nastavení plochy".<br>Užitečné pro předání čísla strany a hledaného řetězce, např. Evince. Disable Qt autocompletion in search entry. Zakázat automatické doplňování Qt při zadávání v poli pro hledání. Search as you type. Hledat při psaní. Paths translations Překlady cest Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Klepnout pro přidání dalšího rejstříkového adresáře do seznamu. Můžete vybrat buď adresář s nastavením pro Recoll nebo rejstřík Xapian. Snippets window CSS file Soubor CSS okna s úryvky Opens a dialog to select the Snippets window CSS style sheet file Otevře dialog pro výběr souboru CSS se stylovým listem okna s úryvky Resets the Snippets window style Nastaví znovu styl okna s úryvky Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Rozhodnout, zda se dokumentové filtry ukazují jako kulatá tlačítka, rozbalovací seznamy v nástrojovém pruhu, nebo jako nabídka. Document filter choice style: Styl výběru filtrů dokumentů: Buttons Panel Panel s tlačítky Toolbar Combobox Rozbalovací seznam v nástrojovém panelu Menu Nabídka Show system tray icon. Ukázat ikonu v oznamovací oblasti panelu. Close to tray instead of exiting. Zavřít do oznamovací oblasti panelu namísto ukončení. Start with simple search mode Spustit v jednoduchém vyhledávacím režimu Show warning when opening temporary file. Ukázat varování při otevírání dočasného souboru. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Uživatelský styl k použití v okně s úryvky.<br>Poznámka: Záhlaví stránky s výsledky je zahrnuto i v záhlaví okna s úryvky. Synonyms file Soubor se slovy majícími stejný význam Highlight CSS style for query terms Zvýraznit styl CSS výrazů hledání Recoll - User Preferences Recoll - Uživatelská nastavení Set path translations for the selected index or for the main one if no selection exists. Nastavit překlady cest pro vybraný rejstřík nebo pro hlavní, pokud žádný vybrán není. Activate links in preview. Zapnout odkazy v náhledu. Make links inside the preview window clickable, and start an external browser when they are clicked. Udělat odkazy uvnitř náhledového okna klepnutelnými a spustit vnější prohlížeč, když je na ně klepnuto. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Výrazy dotazu zvýrazňující výsledky. <br>Možná zkuste něco jako "color:red;pozadí:yellow" pro něco živějšího, než je výchozí plán... Start search on completer popup activation. Spustit hledání při aktivaci kompletního vyskakovacího okna. Maximum number of snippets displayed in the snippets window Maximální počet textových bloků zobrazených v okně textových bloků Sort snippets by page number (default: by weight). Seřadit úryvky podle čísla stránky (výchozí: podle hmotnosti). Suppress all beeps. Potlačit všechny pípnutí. Application Qt style sheet Panel ve stylu aplikace Qt Limit the size of the search history. Use 0 to disable, -1 for unlimited. Omezit velikost historie vyhledávání. Použijte 0 pro vypnutí, -1 pro neomezené. Maximum size of search history (0: disable, -1: unlimited): Maximální velikost historie vyhledávání (0: zakázáno, -1: neomezeně): Generate desktop notifications. Generovat oznámení na ploše Misc Různé Work around QTBUG-78923 by inserting space before anchor text Pracujte kolem QTBUG-78923 vložením místa před zakotvením textu Display a Snippets link even if the document has no pages (needs restart). Zobrazit odkaz Snippets i v případě, že dokument nemá žádné stránky (vyžaduje restart). Maximum text size highlighted for preview (kilobytes) Maximální velikost textu zvýrazněného pro náhled (v kilobajtech) Start with simple search mode: Spustit v jednoduchém vyhledávacím režimu: Hide toolbars. Skrýt lišty nástrojů. Hide status bar. Skrýt stavový řádek. Hide Clear and Search buttons. Skrýt tlačítka "Vyčistit" a "Vyhledat". Hide menu bar (show button instead). Skrýt lištu nabídek (místo toho zobrazit tlačítko). Hide simple search type (show in menu only). Skrýt jednoduchý typ vyhledávání (pouze v nabídce). Shortcuts Zkratky Hide result table header. Skrýt záhlaví tabulky výsledků. Show result table row headers. Zobrazit záhlaví tabulky výsledků. Reset shortcuts defaults Obnovit výchozí nastavení zástupců Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Zakažte Ctrl+[0-9]/[a-z] zkratky pro skok do řádků tabulky. Use F1 to access the manual Použijte F1 pro přístup k manuálu Hide some user interface elements. Skrýt některé prvky uživatelského rozhraní. Hide: Skrýt: Toolbars Nástrojové panely Status bar Stavový řádek Show button instead. Zobrazit tlačítko místo toho. Menu bar Horní panel nabídky Show choice in menu only. Zobrazit pouze volbu v menu. Simple search type Jednoduchý typ vyhledávání Clear/Search buttons Tlačítka Vymazat/Hledat Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Zakázat zkratky Ctrl+[0-9]/Shift+[a-z] pro skoky na řádky tabulky. None (default) Žádný (výchozí) Uses the default dark mode style sheet Používá výchozí styl tmavého režimu. Dark mode Tmavý režim Choose QSS File Vyberte soubor QSS To display document text instead of metadata in result table detail area, use: Pro zobrazení textu dokumentu místo metadat v detailní oblasti výsledkové tabulky použijte: left mouse click levé tlačítko myši Shift+click Shift+click - Shift+kliknutí Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Otevře dialog pro výběr souboru se stylovým sešitem.<br>Podívejte se na příklad v souboru /usr/share/recoll/examples/recoll[-dark].qss. Result Table Tabulka výsledků Do not display metadata when hovering over rows. Nepřehazujte metadata při najetí kurzorem na řádky. Work around Tamil QTBUG-78923 by inserting space before anchor text Opravit problém s Tamil QTBUG-78923 vložením mezery před text kotvy. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Chyba způsobuje zobrazení divných kruhových znaků uvnitř zvýrazněných tamilských slov. Obcházení problému vloží dodatečný mezerový znak, který se zdá opravit problém. Depth of side filter directory tree Hloubka bočního filtru adresářového stromu Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Přiblížení faktoru uživatelského rozhraní. Užitečné, pokud výchozí nastavení není správné pro vaši obrazovku. Display scale (default 1.0): Zobrazit měřítko (výchozí 1.0): Automatic spelling approximation. Automatické přibližování pravopisu. Max spelling distance Maximální vzdálenost překlepů Add common spelling approximations for rare terms. Přidejte běžné pravopisné aproximace pro vzácné termíny. Maximum number of history entries in completer list Maximální počet položek historie v seznamu doplňování. Number of history entries in completer: Počet položek historie v doplňovači: Displays the total number of occurences of the term in the index Zobrazuje celkový počet výskytů termínu v indexu. Show hit counts in completer popup. Zobrazit počet výsledků ve vyskakovacím okně doplňovače. Prefer HTML to plain text for preview. Upřednostněte HTML před obyčejným textem pro náhled. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Viz Qt QDateTimeEdit dokumentace. Např. yyyy-MM-dd. Nechte prázdné pro použití výchozího formátu Qt/System. Side filter dates format (change needs restart) Formát dat filtru na straně (změna vyžaduje restart) If set, starting a new instance on the same index will raise an existing one. Pokud je nastaveno, spuštění nové instance na stejném indexu způsobí zobrazení již existující instance. Single application Jedna aplikace Set to 0 to disable and speed up startup by avoiding tree computation. Nastavte na 0 pro zakázání a zrychlení spuštění tím, že se vyhnete výpočtu stromu. The completion only changes the entry when activated. Dokončení změní záznam pouze při aktivaci. Completion: no automatic line editing. Dokončení: žádné automatické úpravy řádků. Interface language (needs restart): Jazyk rozhraní (vyžaduje restart): Note: most translations are incomplete. Leave empty to use the system environment. Poznámka: většina překladů je neúplná. Nechte prázdné, pokud chcete použít systémové prostředí. Preview Náhled Set to 0 to disable details/summary feature Nastavte na 0 pro vypnutí funkce detaily/shrnutí. Fields display: max field length before using summary: Pole zobrazení: maximální délka pole před použitím shrnutí: Number of lines to be shown over a search term found by preview search. Počet řádků, které mají být zobrazeny nad vyhledaným výrazem pomocí náhledového vyhledávání. Search term line offset: Hledaný výraz řádkový posun: Wild card characters *?[] will processed as punctuation instead of being expanded Zástupné znaky *?[] budou zpracovány jako interpunkční znaménka místo toho, aby byly rozšířeny. Ignore wild card characters in ALL terms and ANY terms modes Ignorovat zástupné znaky ve všech režimech VŠECH výrazů a JAKÝCHKOLI výrazů. Color scheme Barevné schéma When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Při zobrazení HTML v tmavém režimu se snažte použít tmavé pozadí (a světlou barvu). To však může být v rozporu s mnoha dokumenty, které přepíší naše světlé nastavení svou vlastní CSS (tmavou) přední barvou, což má za následek nečitelný dokument, takže je tato funkce ve výchozím stavu vypnuta. Use dark background when displaying HTML in dark mode. Použijte tmavé pozadí při zobrazení HTML v tmavém režimu. recoll-1.43.12/qtgui/i18n/recoll_zh.ts0000644000175000017500000063264715124431112016721 0ustar dockesdockes ActSearchDLG Menu search 菜单搜索 AdvSearch All clauses 全部条件 Any clause 任意条件 texts 文本 spreadsheets 电子表格 presentations 演示文稿 media 多媒体文件 messages 邮件 other 其它 Bad multiplier suffix in size filter 文件尺寸过滤器的后缀单位不正确 text 文本文件 spreadsheet 电子表格 presentation 演示文档 message 邮件 Advanced Search 高级搜索 Load next stored search 加载下一个存储的搜索 Load previous stored search 加载先前存储的搜索 AdvSearchBase Advanced search 高端搜索 Search for <br>documents<br>satisfying: 搜索<br>满足以下条件<br>的文档: Delete clause 删除条件 Add clause 添加条件 Restrict file types 限定文件类型 Check this to enable filtering on file types 选中这个,以便针对文件类型进行过滤 By categories 按大类来过滤 Check this to use file categories instead of raw mime types 选中这个,以便使用较大的分类,而不使用具体的文件类型 Save as default 保存为默认值 Searched file types 将被搜索的文件类型 All ----> 移动全部→ Sel -----> 移动选中项→ <----- Sel ←移动选中项 <----- All ←移动全部 Ignored file types 要忽略的文件类型 Enter top directory for search 输入要搜索的最上层目录 Browse 浏览 Restrict results to files in subtree: 将结果中的文件限定在此子目录树中: Start Search 开始搜索 Close 关闭 All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. 右边的所有非空字段都会按照逻辑与(“全部条件”选项)或逻辑或(“任意条件”选项)来组合。<br>“任意”“全部”和“无”三种字段类型都接受输入简单词语和双引号引用的词组的组合。<br>空的输入框会被忽略。 Invert 反转过滤条件 Minimum size. You can use k/K,m/M,g/G as multipliers 最小尺寸。你可使用k/K、m/M、g/G作为单位 Min. Size 最小尺寸 Maximum size. You can use k/K,m/M,g/G as multipliers 最大尺寸。你可使用k/K、m/M、g/G作为单位 Max. Size 最大尺寸 Filter 过滤 From To Check this to enable filtering on dates 选中这个,以便针对日期进行过滤 Filter dates 过滤日期 Filter birth dates 过滤创建日期 Find 查找 Check this to enable filtering on sizes 选中这个,以便针对文件尺寸进行过滤 Filter sizes 过滤尺寸 ConfIndexW Can't write configuration file 无法写入配置文件 Global parameters 全局参数 Local parameters 局部参数 Search parameters 搜索参数 Top directories 顶级目录 The list of directories where recursive indexing starts. Default: your home. 索引从这个列表中的目录开始,递归地进行。默认:你的家目录。 Skipped paths 略过的路径 These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') 这些是索引不会进入的目录路径。<br>路径元素可能包含通配符。条目必须与索引器看到的路径匹配(例如:如果topdirs包括'/home/me',而'/home'实际上是指向'/usr/home'的链接,则正确的skippedPath条目应为'/home/me/tmp*',而不是'/usr/home/me/tmp*') Stemming languages 词根语言 The languages for which stemming expansion<br>dictionaries will be built. 将会针对这些语言<br>构造词根扩展词典。 Log file name 记录文件名 The file where the messages will be written.<br>Use 'stderr' for terminal output 程序输出的消息会被保存到这个文件。<br>使用'stderr'以表示将消息输出到终端 Log verbosity level 记录的话痨级别 This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. 这个值调整的是输出的消息的数量,<br>其级别从仅输出报错信息到输出一大堆调试信息。 Index flush megabytes interval 刷新索引的间隔,兆字节 This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB 这个值调整的是,当积累咯多少索引数据时,才将数据刷新到硬盘上去。<br>用来控制索引进程的内存占用情况。默认为10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. 这是磁盘使用率的百分比 - 总磁盘使用率,而不是索引大小 - 在此百分比下,索引将失败并停止。<br>默认值为0,表示没有任何限制。 No aspell usage 不使用aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. 禁止在词语探索器中使用aspell来生成拼写相近的词语。<br>在没有安装aspell或者它工作不正常时使用这个选项。 Aspell language Aspell语言 Database directory name 数据库目录名 The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. 用于存储索引的目录名称 非绝对路径将相对于配置目录进行处理。默认为'xapiandb'。 Unac exceptions Unac exceptions Unac异常 <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. 这些是对unac机制的例外情况,默认情况下会删除所有变音符号,并执行规范分解。您可以根据您的语言覆盖某些字符的去重音,并指定额外的分解,例如连字。在每个以空格分隔的条目中,第一个字符是源字符,其余是翻译。 Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) 启用索引Firefox访问过的页面。<br>(您还需要安装Firefox Recoll插件) Web page store directory name 网页储存目录名 The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. 用来储存复制过来的已访问网页的目录名。<br>如果使用相对路径,则会相对于配置目录的路径进行处理。 Max. size for the web store (MB) 网页存储的最大尺寸(MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). 一旦达到大小限制,条目将被回收利用。只有增加大小才有意义,因为减小值不会截断现有文件(只会在末尾浪费空间)。 Automatic diacritics sensitivity 自动重音符号敏感度 <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. 如果搜索词中包含重音字符(不在unac_except_trans中),则自动触发重音敏感性。否则,您需要使用查询语言和<i>D</i>修饰符来指定重音敏感性。 Automatic character case sensitivity 自动字符大小写敏感 <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>如果输入中除了第一个位置以外还有大写字符,则自动触发字符大小写敏感性。否则,您需要使用查询语言和<i>C</i>修饰符来指定字符大小写敏感性。 Maximum term expansion count 最大术语扩展计数 <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. 单个术语的最大扩展计数(例如:使用通配符时)。默认值为10,000,这是合理的,可以避免在引擎遍历术语列表时出现查询似乎冻结的情况。 Maximum Xapian clauses count 最大Xapian子句数量 <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>我们添加到单个Xapian查询的基本子句的最大数量。在某些情况下,术语扩展的结果可能是乘法的,我们希望避免使用过多的内存。默认值为100,000,在大多数情况下应该足够高,并且与当前典型的硬件配置兼容。 The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... 将构建词干扩展词典的语言。<br>请参阅Xapian词干处理器文档以获取可能的值。例如:英语,法语,德语... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. 拼写词典的语言。值是两个字母的语言代码,例如 'en','fr' ...<br>如果未设置此值,则将使用NLS环境来计算它,通常会起作用。要了解系统上安装了什么,请键入 'aspell config' 并查找 'data-dir' 目录中的 .dat 文件。 Indexer log file name 索引器日志文件名称 If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. 如果为空,则将使用上述日志文件名值。为了诊断目的,可能有一个单独的日志文件是有用的,因为当GUI启动时,常规日志将被擦除。 Web history 网络历史 Process the Web history queue 处理网络历史记录队列 (by default, aspell suggests mispellings when a query has no results). (默认情况下,当查询没有结果时,拼写检查会建议拼写错误)。 Page recycle interval 页面回收间隔 <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. 默认情况下,缓存中只保留一个URL实例。可以通过将其设置为确定我们保留多个实例的频率的值来更改这一点('day','week','month','year')。请注意,增加间隔不会删除现有条目。 Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 注意:当达到最大大小时,旧页面将被删除以为新页面腾出空间。当前大小:%1 Start folders 开始文件夹 The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. 要被索引的文件夹/目录列表。子文件夹将被递归处理。默认值:您的主目录。 Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) 磁盘满时停止索引的阈值百分比(例如,90表示在90%满时停止,0或100表示没有限制) Suspend the real time indexer when running on battery 在电池模式下运行时暂停实时索引器 The indexer will wait for a return on AC and reexec itself when it happens 索引器将等待AC返回,并在发生时重新执行自身。 Browser add-on download folder 浏览器插件下载文件夹 Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) 只有在Web浏览器插件设置中设置了“下载子目录”参数时才设置此选项。<br>在这种情况下,它应该是目录的完整路径(例如/home/[me]/Downloads/my-subdir)。 Store some GUI parameters locally to the index 将一些GUI参数存储到本地索引中。 <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index <p>GUI设置通常存储在一个全局文件中,适用于所有索引。设置此参数将使一些设置,如结果表设置,特定于索引。 The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. 要递归地索引的文件夹/目录列表及其子文件夹。<br>字符“~”会扩展为您的主目录,这是默认初始值。 (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types 只有 MIME 类型 An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive 一个专门列出索引的MIME类型的列表。<br>不会索引其他任何内容。通常为空且不活动。 Exclude mime types 排除 MIME 类型 Mime types not to be indexed 不要索引的MIME类型 Max. compressed file size (KB) 压缩文件最大尺寸(KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. 尺寸大于这个值的压缩文件不会被处理。设置成-1以表示不加任何限制,设置成0以表示根本不处理压缩文件。 Max. text file size (MB) 文本文件最大尺寸(MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. 尺寸大于这个值的文本文件不会被处理。设置成-1以表示不加限制。 其作用是从索引中排除巨型的记录文件。 Text file page size (KB) 文本文件单页尺寸(KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). 如果设置咯这个值(不等于-1),则文本文件会被分割成这么大的块,并且进行索引。 这是用来搜索大型文本文件的(例如记录文件)。 Max. filter exec. time (s) 最大过滤器执行时间(秒) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. 外部过滤器工作时间超过此时间将被中止。这是为了罕见情况(例如:后置脚本),其中文档可能导致过滤器循环。设置为-1表示没有限制。 Global 全局 ConfigSwitchDLG Switch to other configuration 切换到其他配置 ConfigSwitchW Choose other 选择其他 Choose configuration directory 选择配置目录 CronToolW Cron Dialog 计划任务对话框 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T19:47:37" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T19:56:53" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T1 { font-weight:bold; } .T3 { font-style:italic; } .T4 { font-family:Courier New,courier; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1"><span class="T1">Recoll</span> 批量索引计划任务(cron) </p><p class="P1">每个字段都可以包括一个通配符(*)、单个数字值、逗号分隔的列表(1,3,5)和范围(1-7)。更准确地说,这些字段会被<span class="T3">按原样</span>输出到crontab 文件中,因此这里可以使用crontab 的所有语法,参考crontab(5)。</p><p class="P1"><br/>例如,在<span class="T3">日期</span>中输入<span class="T4">*</span>,<span class="T3">小时</span>中输入<span class="T4">12,19</span>,<span class="T3">分钟</span>中输入<span class="T4">15 </span>的话,会在每天的12:15 AM 和7:15 PM启动recollindex。</p><p class="P1">一个频繁执行的计划任务,其性能可能比不上实时索引。</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) 星期日(*或0-7,0或7是指星期天) Hours (* or 0-23) 小时(*或0-23) Minutes (0-59) 分钟(0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T20:08:00" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T20:11:47" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T2 { font-style:italic; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1">点击<span class="T2">禁用</span>以停止进行自动化的批量索引,点击<span class="T2">启用</span>以启用此功能,点击<span class="T2">取消</span>则不改变任何东西。</p></body></html> Enable 启用 Disable 禁用 It seems that manually edited entries exist for recollindex, cannot edit crontab 看起来已经有手动编辑过的recollindex条目了,因此无法编辑crontab Error installing cron entry. Bad syntax in fields ? 插入cron条目时出错。请检查语法。 EditDialog Dialog 对话框 EditTransBase Cancel 取消 FirstIdxDialog First indexing setup 第一次索引设置 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T20:14:44" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T20:23:13" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T2 { font-weight:bold; } .T4 { font-style:italic; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1"><span class="T2">未找到对应于此配置实例的索引数据。</span><br/><br/>如果你只想以一组合理的默认参数来索引你的家目录的话,就直接按<span class="T4">立即开始索引</span>按钮。以后还可以调整配置参数的。</p><p class="P1">如果你想调整某些东西的话,就使用下面的链接来调整其中的索引配置和定时计划吧。</p><p class="P1">这些工具可在以后通过<span class="T4">选项</span>菜单访问。</p></body></html> Indexing configuration 索引配置 This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. 在这里可以调整你想要对其进行索引的目录,以及其它参数,例如:要排除和路径或名字、默认字符集…… Indexing schedule 定时索引任务 This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). 在这里可以选择是要进行批量索引还是实时索引,还可以设置一个自动化的定时(使用cron)批量索引任务。 Start indexing now 立即开始索引 FragButs %1 not found. %1 未找到。 %1: %2 文本片段:%1:%2 Query Fragments 查询片段 IdxSchedW Index scheduling setup 定时索引设置 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T20:27:11" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T20:30:49" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T1 { font-weight:bold; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1"><span class="T1">Recoll</span> 索引程序可持续运行并且在文件发生变化时对其进行索引,也可以间隔一定时间运行一次。</p><p class="P1">你可以读一下手册,以便更好地做出抉择(按F1)。</p><p class="P1">这个工具可帮助你设置一个自动进行批量索引的定时任务,或者设置成当你登录时便启动实时索引(或者两者同时进行,当然那几乎没有意义)。</p></body></html> Cron scheduling 定时任务 The tool will let you decide at what time indexing should run and will install a crontab entry. 这个工具帮助你确定一个让索引运行的时间,它会插入一个crontab条目。 Real time indexing start up 实时索引设置 Decide if real time indexing will be started when you log in (only for the default index). 作出决定,是否要在登录时便启动实时索引(只对默认索引有效)。 ListDialog Dialog 对话框 GroupBox 分组框 Main No db directory in configuration 配置实例中没有数据库目录 "history" file is damaged or un(read)writeable, please check or remove it: "history"文件被损坏,或者不可(读)写,请检查一下或者删除它: "history" file is damaged, please check or remove it: "历史"文件已损坏,请检查或删除它: Needs "Show system tray icon" to be set in preferences! 需要在首选项中设置“显示系统托盘图标”! PTransEdit Path in index 索引中的路径 Translated path 翻译后的路径 Config error 配置错误 Original path 原始路径 Local path 本地路径 PTransEditBase Path Translations 路径翻译 Select one or several file types, then use the controls in the frame below to change how they are processed 选择一个或多个文件类型,然后使用下方框架中的控件来更改它们的处理方式。 Add 添加 Delete 删除 Cancel 取消 Save 保存 Preview Close Tab 关闭标签页 Cancel 取消 Missing helper program: 缺少辅助程序: Can't turn doc into internal representation for 无法为此文件将文档转换成内部表示方式: Creating preview text 正在创建预览文本 Loading preview text into editor 正在将预览文本载入到编辑器中 &Search for: 搜索(&S): &Next 下一个(&N) &Previous 上一个(&P) Clear 清空 Match &Case 匹配大小写(&C) Cannot create temporary directory: 无法创建临时目录: Error while loading file 文件载入出错 Form 表单 Tab 1 选项卡1 Open 打开 Canceled 取消 Error loading the document: file missing. 加载文档时出错:文件丢失。 Error loading the document: no permission. 加载文档时出错:无权限。 Error loading: backend not configured. 加载错误:后端未配置。 Error loading the document: other handler error<br>Maybe the application is locking the file ? 加载文档时出错:其他处理程序错误<br>也许应用程序正在锁定文件? Error loading the document: other handler error. 加载文档时出错:其他处理程序错误。 <br>Attempting to display from stored text. 尝试从存储的文本中显示。 Could not fetch stored text 无法获取存储的文本 Previous result document 之前的结果文档 Next result document 下一个结果文档 Preview Window 预览窗口 Close tab 关闭标签页 Close preview window 关闭预览窗口 Show next result 显示下一个结果 Show previous result 显示上一个结果 Print 打印 PreviewTextEdit Show fields 显示字段 Show main text 显示主文本 Print 打印 Print Current Preview 打印当前预览文本 Show image 显示图片 Select All 全选 Copy 复制 Save document to file 将文档保存到文件 Fold lines 自动换行 Preserve indentation 保留缩进符 Open document 打开文档 Reload as Plain Text 重新加载为纯文本 Reload as HTML 重新加载为HTML QObject Global parameters 全局参数 Local parameters 局部参数 <b>Customised subtrees <b>自定义的子目录树 The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. 这是已索引的目录树中的一些子目录组成的列表<br>,它们的某些参数需要重定义。默认:空白。 <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>以下的参数,当你在上面的列表中不选中任何条目或者选中一个空行时,<br>就是针对顶级目录起作用的,否则便是对选中的子目录起作用的。<br>你可以点击+/-按钮,以便添加或删除目录。 Skipped names 要略过的文件名 These are patterns for file or directory names which should not be indexed. 具有这些模式的文件或目录不会被索引。 Default character set 默认字符集 This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. 这是用来读取那些未标明自身的字符集的文件时所使用的字符集,例如纯文本文件。<br>默认值是空,会使用系统里的自然语言环境参数中的值。 Follow symbolic links 跟踪符号链接 Follow symbolic links while indexing. The default is no, to avoid duplicate indexing 在索引时跟踪符号链接。默认是不跟踪的,以避免重复索引 Index all file names 对所有文件名进行索引 Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true 对那些无法判断或处理其内容(未知类型或其类型不被支持)的文件的名字进行索引。默认为是 Beagle web history Beagle网页历史 Search parameters 搜索参数 Default<br>character set 默认字符集 Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. 用于读取不在文件内部标识字符集的文件的字符集,例如纯文本文件。<br>默认值为空,并使用NLS环境中的值。 Ignored endings 忽略的结尾 These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). 这些是仅按名称索引的文件的文件名结尾(不尝试识别MIME类型,不解压缩,不进行内容索引)。 <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. 随后的参数是在顶层设置的,如果在上面的列表框中没有选择任何内容或选择了空行,或者是为所选的子目录设置的。您可以通过单击“+/-”按钮来添加或删除目录。 These are patterns for file or directory names which should not be indexed. 这些是文件或目录名称的模式,不应该被索引。 QWidget Create or choose save directory 创建或选择保存目录 Choose exactly one directory 选择一个目录 Could not read directory: 无法读取目录: Unexpected file name collision, cancelling. 意外的文件名冲突,取消。 Cannot extract document: 无法提取文档: &Preview 预览(&P) &Open 打开(&O) Open With 打开方式 Run Script 运行脚本 Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) &Write to File 写入文件(&W) Save selection to files 将选择保存到文件 Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) Find &similar documents 查找类似的文档(&s) Open &Snippets window 打开“片段”窗口 Show subdocuments / attachments 显示子文档/附件 &Open Parent document 打开父文档 &Open Parent Folder 打开父文件夹 Copy Text 复制文本 Copy &File Path 复制文件路径 Copy File Name 复制文件名 QxtConfirmationMessage Do not show again. 不再显示。 RTIToolW Real time indexing automatic start 实时索引自动启动 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T21:00:38" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T21:02:43" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T1 { font-weight:bold; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1"><span class="T1">Recoll</span> 索引程序可以以守护进程的方式运行,在文件发生变化时便实时更新索引。这样你的索引一直是与文件同步的,但是会占用一定的系统资源。</p></body></html> Start indexing daemon with my desktop session. 在我的桌面会话启动时便启动索引进程。 Also start indexing daemon right now. 同时此次也立即启动索引进程。 Replacing: 正在替换: Replacing file 正在替换文件 Can't create: 无法创建: Warning 警告 Could not execute recollindex 无法执行recollindex Deleting: 正在删除: Deleting file 正在删除文件 Removing autostart 正在删除自动启动项 Autostart file deleted. Kill current process too ? 自动启动文件已经删除。也要杀死当前进程吗? Configuration name 配置名称 Short alphanumeric nickname for this config 这个配置的简短字母数字昵称 Could not find 无法找到 RclCompleterModel Hits 点击量 Hits RclMain (no stemming) (不进行词根计算) (all languages) (对全部语言进行词根计算) error retrieving stemming languages 提取词根语言时出错 Indexing in progress: 正在索引: Purge 删除 Stemdb Stem数据库 Closing 正在关闭 Unknown 未知 Query results 查询结果 Cannot retrieve document info from database 无法从数据库获取文档信息 Warning 警告 Can't create preview window 无法创建预览窗口 This search is not active any more 这个查询已经不是活跃的了 Bad viewer command line for %1: [%2] Please check the mimeconf file 针对%1的查看命令[%2]配置出错 请检查mimeconf文件 Cannot extract document or create temporary file 无法提取文档或创建临时文件 Executing: [ 正在执行:[ About Recoll Recoll说明 History data 历史数据 Document history 文档历史 Update &Index 更新索引(&I) Stop &Indexing 停止索引(&I) All 全部 media 多媒体文件 message 邮件 other 其它 presentation 演示文档 spreadsheet 电子表格 text 文本文件 sorted 已排序 filtered 已过滤 External applications/commands needed and not found for indexing your file types: 需要用来辅助对你的文件进行索引,却又找不到的外部程序/命令: No helpers found missing 目前不缺少任何辅助程序 Missing helper programs 未找到的辅助程序 Document category filter 文档分类过滤器 No external viewer configured for mime type [ 针对此种文件类型没有配置外部查看器[ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? 没有找到mimeview中为%1: %2配置的查看器。 是否要打开选项对话框? Can't access file: 无法访问文件: Can't uncompress file: 无法解压缩此文件: Save file 保存文件 Result count (est.) 结果数(估计值) Query details 查询语句细节 Could not open external index. Db not open. Check external index list. 无法打开外部索引。数据库未打开。请检查外部索引列表。 No results found 未找到结果 None Updating 正在更新 Done 已完成 Monitor 监视器 Indexing failed 索引失败 The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone 当前索引进程不是由此界面启动的。点击确定以杀死它,或者点击取消以让它自由运行 Erasing index 正在删除索引 Reset the index and start from scratch ? 从头重新开始索引吗? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program 查询正在进行中。<br>由于索引库的某些限制,<br>取消的话会导致程序退出 Error 错误 Index not open 索引未打开 Index query error 索引查询出错 Content has been indexed for these mime types: 已经为这些文件类型索引其内容: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. 此文件的索引已过时。程序拒绝显示错误的条目。请点击确定以更新此文件的索引,等待索引完成之后再查询。或者,取消。 Can't update index: indexer running 无法更新索引:索引程序已在运行 Indexed MIME Types 已索引的文件类型 Bad viewer command line for %1: [%2] Please check the mimeview file %1的查看器命令行错误:[%2] 请检查mimeview文件 Viewer command line for %1 specifies both file and parent file value: unsupported %1的查看器命令行同时指定文件和父文件值:不支持 Cannot find parent document 无法找到父文档 External applications/commands needed for your file types and not found, as stored by the last indexing pass in 您文件类型所需的外部应用程序/命令未找到,如上次索引过程中存储的。 Sub-documents and attachments 子文档和附件 Document filter 文档过滤器 The indexer is running so things should improve when it's done. 索引器正在运行,当它完成时,情况应该会有所改善。 Bad desktop app spec for %1: [%2] Please check the desktop file %1的桌面应用程序规范不好:[%2] 请检查桌面文件 Indexing interrupted 索引中断 Bad paths 不良路径 Selection patterns need topdir 选择模式需要顶级目录 Selection patterns can only be used with a start directory 选择模式只能与起始目录一起使用。 No search 没有搜索 No preserved previous search 没有保存之前的搜索 Choose file to save 选择要保存的文件 Saved Queries (*.rclq) 保存的查询 (*.rclq) Write failed 写入失败 Could not write to file 无法写入文件 Read failed 读取失败 Could not open file: 无法打开文件: Load error 加载错误 Could not load saved query 无法加载保存的查询 Disabled because the real time indexer was not compiled in. 因为实时索引器未编译,所以被禁用。 Can't set synonyms file (parse error?) 无法设置同义词文件(解析错误?) The document belongs to an external index which I can't update. 该文档属于一个我无法更新的外部索引。 Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. 打开一个临时副本。如果您不将其保存到永久位置,编辑将会丢失。 Do not show this warning next time (use GUI preferences to restore). 不要在下次显示此警告(使用GUI首选项来恢复)。 Index locked 索引已锁定 Unknown indexer state. Can't access webcache file. 未知的索引器状态。无法访问网络缓存文件。 Indexer is running. Can't access webcache file. 索引器正在运行。无法访问网络缓存文件。 with additional message: 带有附加消息: Non-fatal indexing message: 非致命性索引消息: Types list empty: maybe wait for indexing to progress? 类型列表为空:也许等待索引进展? Tools 工具 Results 结果 Content has been indexed for these MIME types: 这些 MIME 类型的内容已被索引: Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): 配置文件中存在空路径或不存在的路径。单击“确定”以继续进行索引(缺失的数据将不会从索引中清除)。 Indexing done 索引完成 Can't update index: internal error 无法更新索引:内部错误 Index not up to date for this file.<br> 该文件的索引尚未更新。 <em>Also, it seems that the last index update for the file failed.</em><br/> 此外,似乎文件的最后索引更新失败了。<br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> 点击“确定”尝试更新此文件的索引。索引完成后,您需要重新运行查询。 Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> 点击取消返回到列表。<br>点击忽略仍然显示预览(并记住本次会话)。有显示错误条目的风险。 documents 文件 document 文档 files 文件 file 文件 errors 错误 error 错误 total files) 总文件数) No information: initial indexing not yet performed. 无信息:尚未执行初始索引。 Batch scheduling 批量调度 The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. 该工具将让您决定索引何时运行。它使用Windows任务计划程序。 Confirm 确认 Erasing simple and advanced search history lists, please click Ok to confirm 擦除简单和高级搜索历史记录,请点击“确定”确认。 Could not open/create file 无法打开/创建文件 F&ilter 过滤 Simple search type 简单搜索类型 Any term 任一词语 All terms 全部词语 File name 文件名 Query language 查询语言 Stemming language 词根语言 Main Window 主窗口 Clear search 清除搜索 Move keyboard focus to search entry 将键盘焦点移动到搜索输入框。 Move keyboard focus to search, alt. 将键盘焦点移动到搜索框,按下Alt键。 Toggle tabular display 切换表格显示 Move keyboard focus to table 将键盘焦点移动到表格。 Flushing 刷新 Show menu search dialog 显示菜单搜索对话框 Duplicates 重复项 Filter directories 过滤目录 This search is not active anymore 这个搜索不再处于活动状态。 The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? 在mimeview中为%1指定的查看器未找到:%2。 您想要启动首选项对话框吗? Viewer command line for %1 specifies parent file but URL is not file:// : unsupported 查看器命令行为%1指定了父文件,但URL不是file://:不支持 Show advanced search dialog 显示高级搜索对话框 Main index open error: 主索引打开错误: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. 索引可能已损坏。也许尝试运行xapian-check或重建索引? with additional message: RclMainBase Recoll Recoll Search tools 搜索工具 Result list 结果列表 &File 文件(&F) &Tools 工具(&T) &Preferences 选项(&P) &Help 帮助(&H) E&xit 退出(&x) Ctrl+Q Ctrl+Q Update &index 更新索引(&i) &Erase document history 删除文档历史(&E) &About Recoll Recoll说明(&A) &User manual 用户手册(&U) Document &History 文档历史(&H) Document History 文档历史 &Advanced Search 高端搜索(&A) Advanced/complex Search 高端/复杂搜索 &Sort parameters 排序参数(&S) Sort parameters 排序参数 Term &explorer 词语探索器(&e) Term explorer tool 词语探索器 Next page 下一页 Next page of results 下一页结果 First page 第一页 Go to first page of results 跳转到结果的第一页 Previous page 上一页 Previous page of results 上一页结果 &Query configuration 查询配置(&Q) External index dialog 外部索引对话框 &Indexing configuration 索引配置(&I) All 全部 &Show missing helpers 显示缺少的辅助程序列表(&S) PgDown 向下翻页 PgUp 向上翻页 &Full Screen 全屏(&F) F11 F11 Full Screen 全屏 &Erase search history 删除搜索历史(&E) sortByDateAsc 按日期升序排列 Sort by dates from oldest to newest 按日期排列,最旧的在前面 sortByDateDesc 按日期降序排列 Sort by dates from newest to oldest 按日期排列,最新的在前面 Show Query Details 显示查询语句细节 Show results as table 以表格的形式显示结果 &Rebuild index 重新构造索引(&R) &Show indexed types 显示已索引的文件类型(&S) Shift+PgUp Shift+向上翻页 &Indexing schedule 定时索引(&I) E&xternal index dialog 外部索引对话框(&x) &Index configuration 索引配置 &GUI configuration GUI配置 &Results 搜索结果 Sort by date, oldest first 按日期排序,从最早开始 Sort by date, newest first 按日期排序,最新的在前 Show as table 显示为表格 Show results in a spreadsheet-like table 在类似电子表格的表格中显示结果 Save as CSV (spreadsheet) file 保存为CSV(电子表格)文件 Saves the result into a file which you can load in a spreadsheet 将结果保存到一个文件中,您可以在电子表格中加载。 Next Page 下一页 Previous Page 上一页 First Page 第一页 Query Fragments 查询片段 With failed files retrying 文件失败,正在重试 Next update will retry previously failed files 下一个更新将重试之前失败的文件。 Indexing &schedule 索引和计划 Enable synonyms 启用同义词 Save last query 保存上次查询 Load saved query 加载保存的查询 Special Indexing 特殊索引 Indexing with special options 使用特殊选项进行索引化 &View 查看 Missing &helpers 缺失 &helpers Indexed &MIME types 索引和MIME类型 Index &statistics 索引和统计 Webcache Editor Webcache编辑器 Trigger incremental pass 触发增量搜索 E&xport simple search history 导出简单搜索历史 &Query 查询 Increase results text font size 增加结果文本字体大小 Increase Font Size 增加字体大小 Decrease results text font size 减小结果文本字体大小 Decrease Font Size 减小字体大小 Start real time indexer 开始实时索引器 Query Language Filters 查询语言过滤器 Filter dates 过滤日期 Filter birth dates 过滤创建日期 Assisted complex search 辅助复杂搜索 &User manual (local, one HTML page) 用户手册(本地,一个HTML页面) &Online manual (Recoll Web site) 在线手册(Recoll网站) Path translations 路径翻译 Switch Configuration... 切换配置... Choose another configuration to run on, replacing this process 选择另一个配置来运行,替换当前进程。 With failed files retrying RclTrayIcon Restore 恢复 Quit 退出 RecollModel Abstract 摘要 Author 作者 Document size 文档尺寸 Document date 文档日期 File size 文件尺寸 File name 文件名 File date 文件日期 Keywords 关键词 Original character set 原字符集 Relevancy rating 相关度 Title 标题 URL 路径 Mtime 修改时间 Date 日期 Date and time 日期及时间 Ipath 内部路径 MIME type 文件类型 Can't sort by inverse relevance 无法按逆相关性排序 ResList Result list 结果列表 (show query) (显示查询语句细节) &Preview 预览(&P) Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) Find &similar documents 查找类似的文档(&s) Document history 文档历史 <p><b>No results found</b><br> <p><b>未找到结果</b><br> Previous 上一页 Next 下一页 Unavailable document 无法访问文档 Preview 预览 Open 打开 <p><i>Alternate spellings (accents suppressed): </i> <p><i>其它拼写形式(忽视口音):</i> &Write to File 写入文件(&W) Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) &Open 打开(&O) Documents out of at least 个文档,最少共有 for 个文档,查询条件: <p><i>Alternate spellings: </i> <p><i>备选拼写:</i> Result count (est.) 结果数(估计值) Query details 查询语句细节 Snippets 片段 This spelling guess was added to the search: 这个拼写猜测已添加到搜索中: These spelling guesses were added to the search: 这些拼写猜测已添加到搜索中: ResTable &Reset sort 重置排序条件(&R) &Delete column 删除此列(&D) Save table to CSV file 将表格保存成CSV文件 Can't open/create file: 无法打开/创建文件: &Preview 预览(&P) &Open 打开(&O) Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) &Write to File 写入文件(&W) Find &similar documents 查找类似的文档(&s) Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) &Save as CSV 保存为CSV(&S) Add "%1" column 添加"%1"列 Result Table 结果表 Open 打开 Preview 预览 Open current result document 打开当前结果文档 Open current result and quit 打开当前结果并退出 Show snippets 显示片段 Show header 显示标题 Show vertical header 显示垂直标题 Copy current result text to clipboard 将当前结果文本复制到剪贴板 Use Shift+click to display the text instead. 使用Shift+点击来显示文本。 %1 bytes copied to clipboard 已复制%1字节到剪贴板 Copy result text and quit 复制结果文本并退出 ResTableDetailArea &Preview 预览(&P) &Open 打开(&O) Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) &Write to File 写入文件(&W) Find &similar documents 查找类似的文档(&s) Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) ResultPopup &Preview 预览(&P) &Open 打开(&O) Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) &Write to File 写入文件(&W) Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) Find &similar documents 查找类似的文档(&s) SSearch Any term 任一词语 All terms 全部词语 File name 文件名 Query language 查询语言 Bad query string 查询语言格式不正确 Out of memory 内存不足 Too many completions 有太多与之相关的补全选项啦 Completions 补全选项 Select an item: 选择一个条目: Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-23T08:43:25" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-23T09:07:39" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .Standard { font-size:12pt; font-family:Nimbus Roman No9 L; writing-mode:page; } .T1 { font-style:italic; } .T2 { font-style:italic; } .T4 { font-weight:bold; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="Standard">输入查询语言表达式。简要说明:<br/><span class="T2">词语</span><span class="T1">1 </span><span class="T2">词语</span><span class="T1">2</span> : '词语1'和'词语2'同时出现在任意字段中。<br/><span class="T2">字段</span><span class="T1">:</span><span class="T2">词语</span><span class="T1">1</span> : '词语1'出现在字段'字段'中。<br/>标准字段名/同义名:<br/>title/subject/caption、author/from、recipient/to、filename、ext。<br/>伪字段名:dir、mime/format、type/rclcat、date。<br/>日期段的两个示例:2009-03-01/2009-05-20 2009-03-01/P2M。<br/><span class="T2">词语</span><span class="T1">1 </span><span class="T2">词语</span><span class="T1">2 OR </span><span class="T2">词语</span><span class="T1">3</span> : 词语1 <span class="T4">与</span> (词语2 <span class="T4">或</span> 词语3)。<br/>不允许用真正的括号来表示逻辑关系。<br/><span class="T1">"</span><span class="T2">词语</span><span class="T1">1 </span><span class="T2">词语</span><span class="T1">2"</span> : 词组(必须按原样出现)。可用的修饰词:<br/><span class="T1">"</span><span class="T2">词语</span><span class="T1">1 </span><span class="T2">词语</span><span class="T1">2"p</span> : 以默认距离进行的无序近似搜索。<br/>有疑问时可使用<span class="T4">显示查询语句细节</span>链接来查看查询语句的细节,另外请查看手册(&lt;F1&gt;)以了解更多内容。</p></body></html> Enter file name wildcard expression. 输入文件名通配符表达式。 Enter search terms here. Type ESC SPC for completions of current term. 在此输入要搜索的词语。按Esc 空格来查看针对当前词语的补全选项。 Stemming languages for stored query: 为存储的查询提取语言: differ from current preferences (kept) 与当前偏好不同(保留) Auto suffixes for stored query: 存储查询的自动后缀: Autophrase is set but it was unset for stored query 自动短语已设置,但对于存储的查询已取消设置 Autophrase is unset but it was set for stored query 自动短语未设置,但已为存储查询设置。 Enter search terms here. 在这里输入搜索词。 <html><head><style> <html><head><style>在文本搜索GUI的上下文中,将以下文本片段从英语翻译成中文。 Text fragment: <html><head><style> table, th, td { 表格,th,td { border: 1px solid black; 边框:1像素实线黑色; border-collapse: collapse; 边框折叠:折叠; } 文本片段:} th,td { th,td { th,td { text-align: center; 文本对齐:居中; </style></head><body> </style></head><body> </style></head><body> You should really look at the manual (F1)</p> 你真的应该查看手册(F1) <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> -> <表 border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>什么</th><th>示例</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>和</td><td>一个 两个&nbsp;&nbsp;&nbsp;一个 AND 两个&nbsp;&nbsp;&nbsp;一个 && 两个</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>或</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>复杂布尔。OR 优先级高,使用括号 where needed</td><td>(one AND two) OR three</td></tr> 在需要的地方</td><td>(one AND two) OR three</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>不</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>短语</td><td>"傲慢与偏见"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>有序接近(松弛=1)</td><td>"傲慢与偏见"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>无序接近(松弛=1)</td><td>“偏见骄傲”po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>无序近似(默认松弛=10)</td><td>"偏见 骄傲"p</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>字段特定</td><td>作者:奥斯汀&nbsp;&nbsp;标题:偏见</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>字段内AND(无顺序)</td><td>作者:简·奥斯汀</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>字段内的OR</td><td>作者:奥斯汀/勃朗特</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>字段名称</td><td>标题/主题/说明 作者/发件人 收件人/收件人 文件名 扩展名</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>目录路径过滤器</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td> MIME 类型过滤器 </td> <td> mime:text/plain mime:video/* </td> </tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>日期间隔</td><td>日期:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> 日期:2018 日期:2018年01月01日/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>大小</td><td>大小&gt;100k 大小&lt;1M</td></tr> </table></body></html> </table></body></html>的中文翻译是:</table></body></html> Can't open index 无法打开索引 Could not restore external indexes for stored query:<br> 无法恢复存储查询的外部索引:<br> ??? 搜索结果 Using current preferences. 使用当前偏好。 Simple search 简单搜索 History 历史 <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; 查询语言备忘单。有疑问:点击<b>显示查询详情</b>。 <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>大写以抑制词干扩展</td><td>地板</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear 清空 Ctrl+S Ctrl+S Erase search entry 删除搜索条目 Search 搜索 Start query 开始查询 Enter search terms here. Type ESC SPC for completions of current term. 在此输入要搜索的词语。按Esc 空格来查看针对当前词语的补全选项。 Choose search type. 选择搜索类型。 Show query history 显示查询历史 Main menu 主菜单 SearchClauseW Select the type of query that will be performed with the words 选择要对右边的词语进行的查询类型 Number of additional words that may be interspersed with the chosen ones 允许在选中的词语之间出现的额外词语的个数 No field 不限字段 Any 任意 All 全部 None Phrase 词组 Proximity 近似 File name 文件名 Snippets Snippets 片段 Find: 查找: Next 下一页 Prev 上一页 SnippetsW Search 搜索 <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> 抱歉,未在限制范围内找到精确匹配。可能是因为文档太大,片段生成器迷失在迷宫中... Sort By Relevance 按相关性排序 Sort By Page 按页面排序 Snippets Window 片段窗口 Find 查找 Find (alt) 查找 (alt) Find next 查找下一个 Find previous 查找上一个 Close window 关闭窗口 Increase font size 增加字体大小 Decrease font size 减小字体大小 SpecIdxW Special Indexing 特殊索引 Else only modified or failed files will be processed. 否则,只有修改过或失败的文件将被处理。 Erase selected files data before indexing. 在索引之前擦除所选文件的数据。 Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). 递归索引的目录。这必须在配置文件(topdirs)中定义的常规索引区域内。 Browse 浏览 Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. 留空以选择所有文件。您可以使用多个以空格分隔的shell类型模式。<br>带有嵌入空格的模式应该用双引号引起来。<br>只能在设置了起始目标时使用。 Selection patterns: 选择模式: Top indexed entity 顶部索引实体 Retry previously failed files. 重试先前失败的文件。 Start directory. Must be part of the indexed tree. Use full indexed area if empty. 起始目录。必须是索引树的一部分。如果为空,请使用完整的索引区域。 Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). 诊断输出文件。将被截断并接收索引诊断(文件未被索引的原因)。 Diagnostics file 诊断文件 SpellBase Term Explorer 词语探索器 &Expand 展开(&E) Alt+E Alt+E &Close 关闭(&C) Alt+C Alt+C No db info. 未找到数据库信息。 Match 匹配 Case 案例 Accents 口音 SpellW Wildcards 通配符 Regexp 正则表达式 Stem expansion 词根扩展 Spelling/Phonetic 拼写/发音检查 error retrieving stemming languages 提取词根语言时出错 Aspell init failed. Aspell not installed? Aspell初始化失败。是否未安装Aspell? Aspell expansion error. Aspell扩展出错。 No expansion found 未找到扩展 Term 词语 Doc. / Tot. 文档数/总数 Index: %1 documents, average length %2 terms 索引:%1个文档,平均长度为%2个词语 Index: %1 documents, average length %2 terms.%3 results 索引:%1 个文档,平均长度 %2 个词。%3 结果 %1 results %1 个结果 List was truncated alphabetically, some frequent 列表按字母顺序截断,一些常见 terms may be missing. Try using a longer root. 术语可能缺失。尝试使用更长的根词。 Show index statistics 显示索引统计 Number of documents 文档数量 Average terms per document 每个文档的平均术语 Database directory size 数据库目录大小 MIME types: MIME 类型: Item 项目 Value 数值 Smallest document length (terms) 最小文档长度(术语) Longest document length (terms) 最长文档长度(术语) Results from last indexing: 上次索引的结果: Documents created/updated 文档创建/更新 Files tested 文件已测试 Unindexed files 未索引的文件 List files which could not be indexed (slow) 列出无法被索引的文件(较慢) Spell expansion error. 拼写扩展错误。 Documents created/updated Files tested Unindexed files UIPrefsDialog error retrieving stemming languages 提取词根语言时出错 The selected directory does not appear to be a Xapian index 选中的目录不是Xapian索引 This is the main/local index! 这是主要/本地索引! The selected directory is already in the index list 选中的目录已经在索引列表中 Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) 选择xapian索引目录(例如:/home/buddy/.recoll/xapiandb) Choose 选择 Result list paragraph format (erase all to reset to default) 结果列表段落格式(擦除所有以重置为默认值) Result list header (default is empty) 结果列表标题(默认为空) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) 选择recoll配置目录或xapian索引目录(例如:/home/me/.recoll或/home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read 所选目录看起来像是一个Recoll配置目录,但配置无法读取。 At most one index should be selected 最多只能选择一个索引。 Default QtWebkit font 默认的QtWebkit字体 Any term 任一词语 All terms 全部词语 File name 文件名 Query language 查询语言 Value from previous program exit 上次程序退出时的值 Context 上下文 Description 描述 Shortcut 快捷方式 Default 默认 Choose QSS File 选择QSS文件 Light 轻量 Dark System 系统 Can't add index with different case/diacritics stripping option. 无法使用不同大小写/变音符号剥离选项添加索引。 ViewAction Changing actions with different current values 正在针对不同的当前值而改变动作 Command 命令 MIME type 文件类型 Desktop Default 桌面默认 Changing entries with different current values 使用不同当前值更改条目 ViewActionBase Native Viewers 本地查看器 Select one or several file types, then click Change Action to modify the program used to open them 选中一个或多个文件类型,然后点击“修改动作”来修改用来打开这些文件的程序 Change Action 修改动作 Close 关闭 Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. 选中一个或多个文件类型祟点击“修改动作”<br>或者可以关闭这个对话框,而在主面板中选中“使用桌面默认设置”<br>那样就会无视这个列表而使用桌面的默认设置。 Select one or several mime types then use the controls in the bottom frame to change how they are processed. 选择一个或多个MIME类型,然后使用底部框架中的控件来更改它们的处理方式。 Use Desktop preferences by default 默认使用桌面偏好设置 Select one or several file types, then use the controls in the frame below to change how they are processed 选择一个或多个文件类型,然后使用下方框架中的控件来更改它们的处理方式。 Exception to Desktop preferences 桌面偏好设置的异常情况 Action (empty -> recoll default) 操作(空 -> recoll 默认) Apply to current selection 应用于当前选择 Recoll action: Recoll操作: current value 当前值 Select same 选择相同 <b>New Values:</b> 新值: The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. 该值是要执行的命令行。替换:%s:搜索字符串;%p:页码;<br>%f:文档文件名。按F1获取更多帮助。 Webcache Webcache editor Webcache编辑器 Search regexp 搜索正则表达式 TextLabel 文本标签 WebcacheEdit Copy URL 复制网址 Unknown indexer state. Can't edit webcache file. 未知的索引器状态。无法编辑Web缓存文件。 Indexer is running. Can't edit webcache file. 索引器正在运行。无法编辑网页缓存文件。 Delete selection 删除选择 Webcache was modified, you will need to run the indexer after closing this window. Webcache已被修改,您需要在关闭此窗口后运行索引器。 Save to File 保存到文件 File creation failed: 文件创建失败: Maximum size %1 (Index config.). Current size %2. Write position %3. 最大尺寸 %1(索引配置)。当前尺寸 %2。写入位置 %3。 WebcacheModel MIME MIME 多用途互联网邮件扩展(MIME)是一种互联网标准,用于在电子邮件中传输多媒体内容。 Date 日期 Size 尺寸 URL 路径 WinSchedToolW Error 错误 Recoll Batch indexing Recoll批量索引 Start Windows Task Scheduler tool 启动Windows任务计划程序工具 Configuration not initialized 配置未初始化 Could not create batch file 无法创建批处理文件 <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll索引批量调度</h3><p>我们使用标准的Windows任务计划程序来实现这一功能。当您点击下面的按钮时,程序将启动。</p><p>您可以使用完整界面(右侧菜单中的<i>创建任务</i>),或者简化的<i>创建基本任务</i>向导。在两种情况下,将下面列出的批处理文件路径复制/粘贴为要执行的<i>操作</i>。</p> Command already started 命令已经启动 confgui::ConfBeaglePanelW Steal Beagle indexing queue 窃取Beagle索引队列 Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) 不可运行Beagle。启用对beagle队列的处理,以索引火狐网页历史。<br>(你还需要安装火狐Beagle插件) Entries will be recycled once the size is reached 当尺寸达到设定值时,这些条目会被循环使用 Web page store directory name 网页储存目录名 The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. 用来储存复制过来的已访问网页的目录名。<br>如果使用相对路径,则会相对于配置目录的路径进行处理。 Max. size for the web store (MB) 网页存储的最大尺寸(MB) confgui::ConfIndexW Can't write configuration file 无法写入配置文件 confgui::ConfParamFNW Choose 选择 confgui::ConfParamSLW + + - - Add entry 添加条目 Delete selected entries 删除所选条目 ~ 文本片段:~ Edit selected entries 编辑所选条目 confgui::ConfSubPanelW Global 全局 Max. compressed file size (KB) 压缩文件最大尺寸(KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. 尺寸大于这个值的压缩文件不会被处理。设置成-1以表示不加任何限制,设置成0以表示根本不处理压缩文件。 Max. text file size (MB) 文本文件最大尺寸(MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. 尺寸大于这个值的文本文件不会被处理。设置成-1以表示不加限制。 其作用是从索引中排除巨型的记录文件。 Text file page size (KB) 文本文件单页尺寸(KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). 如果设置咯这个值(不等于-1),则文本文件会被分割成这么大的块,并且进行索引。 这是用来搜索大型文本文件的(例如记录文件)。 Max. filter exec. time (S) 过滤器的最长执行时间(S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. 外部过滤器的执行时间如果超过这个值,则会被强行中断。在罕见的情况下,某些文档(例如postscript)会导致过滤器陷入死循环。设置成-1以表示不加限制。 confgui::ConfTabsW Apply 申请 confgui::ConfTopPanelW Top directories 顶级目录 The list of directories where recursive indexing starts. Default: your home. 索引从这个列表中的目录开始,递归地进行。默认:你的家目录。 Skipped paths 略过的路径 These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') 索引进程不会进入具有这些名字的目录。<br>可以包含通配符。必须匹配索引进程自身所见到的路径(例如:如果topdirs包含'/home/me',而实际上'/home'是到'/usr/home'的链接,则正确的skippedPath条目应当是'/home/me/tmp*',而不是'/usr/home/me/tmp*') Stemming languages 词根语言 The languages for which stemming expansion<br>dictionaries will be built. 将会针对这些语言<br>构造词根扩展词典。 Log file name 记录文件名 The file where the messages will be written.<br>Use 'stderr' for terminal output 程序输出的消息会被保存到这个文件。<br>使用'stderr'以表示将消息输出到终端 Log verbosity level 记录的话痨级别 This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. 这个值调整的是输出的消息的数量,<br>其级别从仅输出报错信息到输出一大堆调试信息。 Index flush megabytes interval 刷新索引的间隔,兆字节 This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB 这个值调整的是,当积累咯多少索引数据时,才将数据刷新到硬盘上去。<br>用来控制索引进程的内存占用情况。默认为10MB Max disk occupation (%) 最大硬盘占用率(%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). 当硬盘的占用率达到这个数时,索引会失败并且停止(以避免塞满你的硬盘)。<br>设为0则表示不加限制(这是默认值)。 No aspell usage 不使用aspell Aspell language Aspell语言 The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. aspell词典的语言。表示方式是'en'或'fr'……<br>如果不设置这个值,则会使用系统环境中的自然语言设置信息,而那个通常是正确的。要想查看你的系统中安装咯哪些语言的话,就执行'aspell config',再在'data-dir'目录中找.dat文件。 Database directory name 数据库目录名 The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. 用来储存索引数据的目录的名字<br>如果使用相对路径,则路径会相对于配置目录进行计算。默认值是'xapiandb'。 Use system's 'file' command 使用系统里的'file'命令 Use the system's 'file' command if internal<br>mime type identification fails. 当内部的文件类型识别功能失效时<br>使用系统里的'file'命令。 Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. 禁止在词语探索器中使用aspell来生成拼写相近的词语。<br>在没有安装aspell或者它工作不正常时使用这个选项。 uiPrefsDialogBase User preferences 用户选项 User interface 用户界面 Number of entries in a result page 一个结果页面中显示的结果条数 If checked, results with the same content under different names will only be shown once. 如果选中这个,则拥有相同文件内容的不同文件名只会显示一个。 Hide duplicate results. 隐藏重复结果。 Highlight color for query terms 查询词语的高亮颜色 Result list font 结果列表字体 Opens a dialog to select the result list font 打开一个对话框,以选择用于结果列表的字体 Helvetica-10 文泉驿微米黑-12 Resets the result list font to the system default 将结果列表中的字体重设为系统默认值 Reset 重置 Texts over this size will not be highlighted in preview (too slow). 超过这个长度的文本不会在预览窗口里高亮显示(太慢)。 Maximum text size highlighted for preview (megabytes) 在预览中对其进行高亮显示的最大文本尺寸(兆字节) Use desktop preferences to choose document editor. 使用桌面系统的设置来选择文档编辑器。 Choose editor applications 选择编辑器程序 Display category filter as toolbar instead of button panel (needs restart). 将文件类型过滤器显示成工具条,而不是按钮面板(需要重启程序)。 Auto-start simple search on whitespace entry. 输入空格时自动开始进行简单搜索。 Start with advanced search dialog open. 启动时打开高端搜索对话框。 Remember sort activation state. 记住排序状态。 Prefer Html to plain text for preview. 预览中优先使用Html。 Search parameters 搜索参数 Stemming language 词根语言 A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. 对[滚 石] (2个词语)的搜索会变成[滚 or 石 or (滚 2个词语 石)]。 对于那些搜索词语在其中按照原样出现的结果,其优先级会高一些。 Automatically add phrase to simple searches 自动将词组添加到简单搜索中 Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. 是否要使用查询词语周围的上下文来构造结果列表条目中的摘要? 对于大的文档可能会很慢。 Dynamically build abstracts 动态构造摘要 Do we synthetize an abstract even if the document seemed to have one? 即使文档本身拥有一个摘要,我们仍然自行合成摘要信息? Replace abstracts from documents 取代文档中自带的摘要 Synthetic abstract size (characters) 合成摘要长度(字符个数) Synthetic abstract context words 合成摘要上下文 The words in the list will be automatically turned to ext:xxx clauses in the query language entry. 这个列表中的词语会在查询语言输入框里自动变成ext:xxx语句。 Query language magic file name suffixes. 查询语言神奇文件名后缀。 Enable 启用 External Indexes 外部索引 Toggle selected 切换选中项 Activate All 全部激活 Deactivate All 全部禁用 Remove from list. This has no effect on the disk index. 从列表中删除。这不会对硬盘上的索引造成损害。 Remove selected 删除选中项 Click to add another index directory to the list 点击这里,以将另一个索引目录添加到列表中 Add index 添加索引 Apply changes 使改变生效 &OK 确定(&O) Discard changes 放弃这些改变 &Cancel 取消(&C) Abstract snippet separator 摘要中的片段的分隔符 Style sheet 样式单 Opens a dialog to select the style sheet file 打开一个对话框,以选择样式单文件 Choose 选择 Resets the style sheet to default 将样式单重置为默认值 Lines in PRE text are not folded. Using BR loses some indentation. PRE中的文字不会换行。使用BR的话会使一些缩进失效。 Use <PRE> tags instead of <BR>to display plain text as html in preview. 在将纯文本显示成html预览的时候,使用<PRE>标签,而不是<BR>标签。 Result List 结果列表 Edit result paragraph format string 编辑结果段落的格式字符串 Edit result page html header insert 编辑结果页面的html头部插入项 Date format (strftime(3)) 日期格式(strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). 这是一个频率阈值,超过这个值的话,我们就不会把词语放到自动词组中。 高频词语是词组中性能问题的主要来源。 略过的词语会增加词组的空缺值,因此会降低自动词组功能的效率。 默认值是2(百分比)。 Autophrase term frequency threshold percentage 自动词组频率阈值百分比 Plain text to HTML line style 纯文本转换为HTML行样式 Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. 在搜索GUI中,PRE文本中的行不会折叠。使用BR会丢失一些缩进。PRE + Wrap样式可能是您想要的。 <BR> <BR>的中文翻译是: 换行 <PRE> 文本搜索 GUI</PRE> <PRE> + wrap 文本片段: <PRE> + wrap 在文本搜索GUI的上下文中,将上述文本片段从英文翻译成中文为:<PRE> + 自动换行 Disable Qt autocompletion in search entry. 在搜索输入框中禁用Qt自动完成。 Paths translations 路径翻译 Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. 点击以将另一个索引目录添加到列表中。您可以选择Recoll配置目录或Xapian索引。 Snippets window CSS file 片段窗口CSS文件 Opens a dialog to select the Snippets window CSS style sheet file 打开一个对话框来选择片段窗口的CSS样式表文件。 Resets the Snippets window style 重置片段窗口样式 Decide if document filters are shown as radio buttons, toolbar combobox, or menu. 决定文档过滤器显示为单选按钮、工具栏组合框还是菜单。 Document filter choice style: 文档过滤选择样式: Buttons Panel 按钮面板 Toolbar Combobox 工具栏组合框 Menu 菜单 Show system tray icon. 显示系统托盘图标。 Close to tray instead of exiting. 最小化到托盘而不是退出。 User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. 用户样式应用于片段窗口。<br>注意:结果页面标题插入也包含在片段窗口标题中。 Synonyms file 同义词文件 Show warning when opening temporary file. 打开临时文件时显示警告。 Highlight CSS style for query terms 查询词的高亮CSS样式 Recoll - User Preferences Recoll - 用户偏好 Set path translations for the selected index or for the main one if no selection exists. 为所选索引设置路径翻译,如果没有选择,则为主要索引设置路径翻译。 Activate links in preview. 在预览中激活链接。 Make links inside the preview window clickable, and start an external browser when they are clicked. 在预览窗口内使链接可点击,并在点击时启动外部浏览器。 Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... 在结果中突出显示查询词。也许尝试类似于“color:red;background:yellow”这样的样式,比默认的蓝色更生动一些... Start search on completer popup activation. 在自动完成弹出窗口激活时开始搜索。 Maximum number of snippets displayed in the snippets window 片段窗口中显示的最大片段数 Suppress all beeps. 抑制所有蜂鸣声。 Application Qt style sheet 应用程序Qt样式表 Limit the size of the search history. Use 0 to disable, -1 for unlimited. 限制搜索历史记录的大小。使用0来禁用,-1表示无限制。 Maximum size of search history (0: disable, -1: unlimited): 搜索历史记录的最大大小(0:禁用,-1:无限制): Generate desktop notifications. 生成桌面通知。 Sort snippets by page number (default: by weight). 按页面编号排序片段(默认:按权重排序)。 Misc 杂项 Display a Snippets link even if the document has no pages (needs restart). 即使文档没有页面,也显示片段链接(需要重新启动)。 Maximum text size highlighted for preview (kilobytes) 预览中突出显示的最大文本大小(千字节) Start with simple search mode: 从简单搜索模式开始: Shortcuts 快捷方式 Hide result table header. 隐藏结果表头。 Show result table row headers. 显示结果表格的行标题。 Reset shortcuts defaults 重置快捷键默认值 Use F1 to access the manual 使用F1键访问手册 Hide some user interface elements. 隐藏一些用户界面元素。 Hide: 隐藏: Toolbars 工具栏 Status bar 状态栏 Show button instead. 显示按钮。 Menu bar 菜单栏 Show choice in menu only. 只在菜单中显示选择。 Simple search type 简单搜索类型 Clear/Search buttons 清除/搜索按钮 Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. 禁用 Ctrl+[0-9]/Shift+[a-z] 快捷键以跳转到表格行。 None (default) 无(默认) Choose QSS File 选择QSS文件 To display document text instead of metadata in result table detail area, use: 在结果表详细区域显示文档文本而不是元数据,请使用: left mouse click 左键单击 Shift+click Shift+click Shift+点击 Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. 打开一个对话框来选择样式表文件。<br>查看 /usr/share/recoll/examples/recoll[-dark].qss 以获取示例。 Result Table 结果表 Do not display metadata when hovering over rows. 当鼠标悬停在行上时,请勿显示元数据。 Work around Tamil QTBUG-78923 by inserting space before anchor text 通过在锚文本之前插入空格来解决泰米尔语QTBUG-78923。 The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. 该错误导致在突出显示的泰米尔语单词内显示奇怪的圆圈字符。解决方法是插入一个额外的空格字符,这似乎可以解决问题。 Depth of side filter directory tree 侧边过滤器目录树的深度 Zoom factor for the user interface. Useful if the default is not right for your screen resolution. 用户界面的缩放比例。如果默认值不适合您的屏幕分辨率,这将非常有用。 Display scale (default 1.0): 显示比例(默认1.0): If set, starting a new instance on the same index will raise an existing one. 如果设置了,在相同索引上启动一个新实例将会引发现有的实例。 Single application 单个应用程序 Set to 0 to disable and speed up startup by avoiding tree computation. 设置为0以禁用并加快启动速度,避免树计算。 See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. 查看Qt QDateTimeEdit文档。例如,yyyy-MM-dd。留空以使用默认的Qt/System格式。 Side filter dates format (change needs restart) 侧边栏筛选日期格式(更改需要重新启动) The completion only changes the entry when activated. 只有在激活时完成才会更改条目。 Completion: no automatic line editing. 完成:无自动行编辑。 Maximum number of history entries in completer list 自动完成列表中的历史记录条目最大数量 Number of history entries in completer: 自动完成器中的历史记录条目数: Displays the total number of occurences of the term in the index 显示索引中术语的总出现次数 Show hit counts in completer popup. 在自动完成弹出窗口中显示命中次数。 Color scheme 颜色方案 Interface language (needs restart): 界面语言(需要重新启动): Note: most translations are incomplete. Leave empty to use the system environment. 注意:大多数翻译是不完整的。留空以使用系统环境。 Preview 预览 Prefer HTML to plain text for preview. 偏好使用HTML而不是纯文本进行预览。 When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. 在显示暗模式下的HTML时,请尝试使用暗色背景(和浅色文字)。这与许多文档冲突,这些文档将用它们自己的CSS(暗色)前景色覆盖我们的浅色设置,导致文档无法阅读,因此默认情况下关闭。 Use dark background when displaying HTML in dark mode. 在暗模式下显示HTML时,请使用深色背景。 Set to 0 to disable details/summary feature 设置为0以禁用详细/摘要功能。 Fields display: max field length before using summary: 字段显示:在使用摘要之前的最大字段长度: Number of lines to be shown over a search term found by preview search. 在预览搜索中找到的搜索词上方要显示的行数。 Search term line offset: 搜索词行偏移量: Add common spelling approximations for rare terms. 为罕见术语添加常见的拼写近似。 Automatic spelling approximation. 自动拼写近似。 Max spelling distance 最大拼写距离 Wild card characters *?[] will processed as punctuation instead of being expanded 通配符字符*?[]将被处理为标点符号,而不是被展开。 Ignore wild card characters in ALL terms and ANY terms modes 在“所有术语”和“任意术语”模式下忽略通配符字符 recoll-1.43.12/qtgui/i18n/recoll_xx.ts0000644000175000017500000035373615124431112016736 0ustar dockesdockes ActSearchDLG Menu search AdvSearch All clauses Any clause media other Bad multiplier suffix in size filter text spreadsheet presentation message texts spreadsheets Advanced Search Load next stored search Load previous stored search AdvSearchBase Advanced search Search for <br>documents<br>satisfying: Delete clause Add clause Restrict file types Check this to enable filtering on file types By categories Check this to use file categories instead of raw mime types Save as default Searched file types All ----> Sel -----> <----- Sel <----- All Ignored file types Enter top directory for search Browse Restrict results to files in subtree: Start Search Close All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Invert Minimum size. You can use k/K,m/M,g/G as multipliers Min. Size Maximum size. You can use k/K,m/M,g/G as multipliers Max. Size Filter From To Check this to enable filtering on dates Filter dates Find Check this to enable filtering on sizes Filter sizes Filter birth dates ConfIndexW Can't write configuration file Global parameters Local parameters Search parameters Skipped paths These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Stemming languages Log file name The file where the messages will be written.<br>Use 'stderr' for terminal output Log verbosity level This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Index flush megabytes interval This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. No aspell usage Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Aspell language Unac exceptions <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Web page store directory name The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Max. size for the web store (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Automatic diacritics sensitivity <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. Automatic character case sensitivity <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. Maximum term expansion count <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. Maximum Xapian clauses count <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Indexer log file name If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Web history Process the Web history queue (by default, aspell suggests mispellings when a query has no results). Page recycle interval <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Start folders Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Browser add-on download folder Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Store some GUI parameters locally to the index <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index Suspend the real time indexer when running on battery The indexer will wait for a return on AC and reexec itself when it happens The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Exclude mime types Mime types not to be indexed Max. compressed file size (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Max. text file size (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Text file page size (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Max. filter exec. time (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Global ConfigSwitchDLG Switch to other configuration ConfigSwitchW Choose other Choose configuration directory CronToolW Cron Dialog <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Hours (* or 0-23) Minutes (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> Enable Disable It seems that manually edited entries exist for recollindex, cannot edit crontab Error installing cron entry. Bad syntax in fields ? EditDialog Dialog FirstIdxDialog First indexing setup <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> Indexing configuration This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Indexing schedule This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Start indexing now FragButs %1 not found. %1: %2 Query Fragments IdxSchedW Index scheduling setup <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> Cron scheduling The tool will let you decide at what time indexing should run and will install a crontab entry. Real time indexing start up Decide if real time indexing will be started when you log in (only for the default index). ListDialog Dialog GroupBox Main No db directory in configuration "history" file is damaged, please check or remove it: Needs "Show system tray icon" to be set in preferences! PTransEdit Path in index Translated path Config error Original path Local path PTransEditBase Path Translations Select one or several file types, then use the controls in the frame below to change how they are processed Add Delete Cancel Save Preview Cancel Missing helper program: Can't turn doc into internal representation for Creating preview text Loading preview text into editor &Search for: &Next &Previous Clear Match &Case Form Tab 1 Open Canceled Error loading the document: file missing. Error loading the document: no permission. Error loading: backend not configured. Error loading the document: other handler error<br>Maybe the application is locking the file ? Error loading the document: other handler error. <br>Attempting to display from stored text. Could not fetch stored text Previous result document Next result document Preview Window Close tab Close preview window Show next result Show previous result Print PreviewTextEdit Show fields Show main text Print Print Current Preview Show image Select All Copy Save document to file Fold lines Preserve indentation Open document Reload as Plain Text Reload as HTML QObject <b>Customised subtrees The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Skipped names Follow symbolic links Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Index all file names Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Default<br>character set Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Ignored endings These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. These are patterns for file or directory names which should not be indexed. QWidget Create or choose save directory Choose exactly one directory Could not read directory: Unexpected file name collision, cancelling. Cannot extract document: &Preview &Open Open With Run Script Copy &URL &Write to File Save selection to files Preview P&arent document/folder Find &similar documents Open &Snippets window Show subdocuments / attachments &Open Parent document &Open Parent Folder Copy Text Copy &File Path Copy File Name QxtConfirmationMessage Do not show again. RTIToolW Real time indexing automatic start <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Also start indexing daemon right now. Replacing: Replacing file Can't create: Warning Could not execute recollindex Deleting: Deleting file Removing autostart Autostart file deleted. Kill current process too ? Configuration name Short alphanumeric nickname for this config Could not find RclCompleterModel Hits RclMain (no stemming) (all languages) error retrieving stemming languages Indexing in progress: Purge Stemdb Closing Unknown Query results Cannot retrieve document info from database Warning Can't create preview window Cannot extract document or create temporary file Executing: [ About Recoll History data Document history Update &Index Stop &Indexing All media message other presentation spreadsheet text sorted filtered No helpers found missing Missing helper programs No external viewer configured for mime type [ Can't access file: Can't uncompress file: Save file Result count (est.) Could not open external index. Db not open. Check external index list. No results found None Updating Done Monitor Indexing failed Erasing index Reset the index and start from scratch ? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Error Index query error Can't update index: indexer running Indexed MIME Types Bad viewer command line for %1: [%2] Please check the mimeview file Viewer command line for %1 specifies both file and parent file value: unsupported Cannot find parent document External applications/commands needed for your file types and not found, as stored by the last indexing pass in Sub-documents and attachments Document filter The indexer is running so things should improve when it's done. Bad desktop app spec for %1: [%2] Please check the desktop file Indexing interrupted Bad paths Selection patterns need topdir Selection patterns can only be used with a start directory No search No preserved previous search Choose file to save Saved Queries (*.rclq) Write failed Could not write to file Read failed Could not open file: Load error Could not load saved query Disabled because the real time indexer was not compiled in. Can't set synonyms file (parse error?) The document belongs to an external index which I can't update. Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Do not show this warning next time (use GUI preferences to restore). Index locked Unknown indexer state. Can't access webcache file. Indexer is running. Can't access webcache file. with additional message: Non-fatal indexing message: Types list empty: maybe wait for indexing to progress? Tools Results Content has been indexed for these MIME types: Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Indexing done Can't update index: internal error Index not up to date for this file.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> documents document files file errors error total files) No information: initial indexing not yet performed. Batch scheduling The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Confirm Erasing simple and advanced search history lists, please click Ok to confirm Could not open/create file F&ilter Simple search type Any term All terms File name Query language Stemming language Main Window Clear search Move keyboard focus to search entry Move keyboard focus to search, alt. Toggle tabular display Move keyboard focus to table Flushing Show menu search dialog Duplicates Filter directories Main index open error: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. This search is not active anymore Viewer command line for %1 specifies parent file but URL is not file:// : unsupported The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Show advanced search dialog RclMainBase Recoll &File &Tools &Preferences &Help E&xit Ctrl+Q Update &index &Erase document history &About Recoll Document &History Document History &Advanced Search &Sort parameters Sort parameters Term &explorer Term explorer tool Next page Next page of results First page Go to first page of results Previous page Previous page of results External index dialog PgDown PgUp &Full Screen F11 Full Screen &Erase search history Sort by dates from oldest to newest Sort by dates from newest to oldest Show Query Details &Rebuild index Shift+PgUp E&xternal index dialog &Index configuration &GUI configuration &Results Sort by date, oldest first Sort by date, newest first Show as table Show results in a spreadsheet-like table Save as CSV (spreadsheet) file Saves the result into a file which you can load in a spreadsheet Next Page Previous Page First Page Query Fragments With failed files retrying Next update will retry previously failed files Indexing &schedule Enable synonyms Save last query Load saved query Special Indexing Indexing with special options &View Missing &helpers Indexed &MIME types Index &statistics Webcache Editor Trigger incremental pass E&xport simple search history &Query Increase results text font size Increase Font Size Decrease results text font size Decrease Font Size Start real time indexer Query Language Filters Filter dates Assisted complex search Filter birth dates Switch Configuration... Choose another configuration to run on, replacing this process &User manual (local, one HTML page) &Online manual (Recoll Web site) Path translations RclTrayIcon Restore Quit RecollModel Abstract Author Document size Document date File size File name File date Keywords Original character set Relevancy rating Title URL Date Date and time Ipath MIME type Can't sort by inverse relevance ResList Result list (show query) Document history <p><b>No results found</b><br> Previous Next Unavailable document Preview Open <p><i>Alternate spellings (accents suppressed): </i> Documents out of at least for <p><i>Alternate spellings: </i> Result count (est.) Query details Snippets This spelling guess was added to the search: These spelling guesses were added to the search: ResTable &Reset sort &Delete column Save table to CSV file Can't open/create file: &Save as CSV Add "%1" column Result Table Preview Open current result document Open current result and quit Show snippets Show header Show vertical header Copy current result text to clipboard Use Shift+click to display the text instead. %1 bytes copied to clipboard Copy result text and quit SSearch Any term All terms File name Query language Bad query string Out of memory Enter file name wildcard expression. Stemming languages for stored query: differ from current preferences (kept) Auto suffixes for stored query: Autophrase is set but it was unset for stored query Autophrase is unset but it was set for stored query Enter search terms here. <html><head><style> table, th, td { border: 1px solid black; border-collapse: collapse; } th,td { text-align: center; </style></head><body> You should really look at the manual (F1)</p> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; where needed</td><td>(one AND two) OR three</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> Can't open index Could not restore external indexes for stored query:<br> ??? Using current preferences. Simple search History <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> SSearchBase SSearchBase Clear Erase search entry Search Start query Choose search type. Show query history Main menu SearchClauseW Select the type of query that will be performed with the words Number of additional words that may be interspersed with the chosen ones No field Any All None Phrase Proximity File name Snippets Snippets Find: Next Prev SnippetsW Search <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> Sort By Relevance Sort By Page Snippets Window Find Find (alt) Find next Find previous Close window Increase font size Decrease font size SpecIdxW Special Indexing Else only modified or failed files will be processed. Erase selected files data before indexing. Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Browse Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Selection patterns: Top indexed entity Retry previously failed files. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnostics file SpellBase Term Explorer &Expand Alt+E &Close Alt+C No db info. Match Case Accents SpellW Wildcards Regexp Stem expansion Spelling/Phonetic error retrieving stemming languages No expansion found Term Doc. / Tot. Index: %1 documents, average length %2 terms.%3 results %1 results List was truncated alphabetically, some frequent terms may be missing. Try using a longer root. Show index statistics Number of documents Average terms per document Database directory size MIME types: Item Value Smallest document length (terms) Longest document length (terms) Results from last indexing: Documents created/updated Files tested Unindexed files List files which could not be indexed (slow) Spell expansion error. UIPrefsDialog error retrieving stemming languages The selected directory does not appear to be a Xapian index This is the main/local index! The selected directory is already in the index list Choose Result list paragraph format (erase all to reset to default) Result list header (default is empty) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read At most one index should be selected Default QtWebkit font Any term All terms File name Query language Value from previous program exit Context Description Shortcut Default Choose QSS File Can't add index with different case/diacritics stripping option. Light Dark System ViewAction Command MIME type Desktop Default Changing entries with different current values ViewActionBase Native Viewers Close Select one or several mime types then use the controls in the bottom frame to change how they are processed. Use Desktop preferences by default Select one or several file types, then use the controls in the frame below to change how they are processed Exception to Desktop preferences Action (empty -> recoll default) Apply to current selection Recoll action: current value Select same <b>New Values:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Webcache Webcache editor Search regexp TextLabel WebcacheEdit Copy URL Unknown indexer state. Can't edit webcache file. Indexer is running. Can't edit webcache file. Delete selection Webcache was modified, you will need to run the indexer after closing this window. Save to File File creation failed: Maximum size %1 (Index config.). Current size %2. Write position %3. WebcacheModel MIME Date Size URL WinSchedToolW Recoll Batch indexing Start Windows Task Scheduler tool Error Configuration not initialized Could not create batch file <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> Command already started confgui::ConfParamFNW Choose confgui::ConfParamSLW + - Add entry Delete selected entries ~ Edit selected entries confgui::ConfTabsW Apply uiPrefsDialogBase User interface Number of entries in a result page If checked, results with the same content under different names will only be shown once. Hide duplicate results. Result list font Opens a dialog to select the result list font Helvetica-10 Resets the result list font to the system default Reset Texts over this size will not be highlighted in preview (too slow). Choose editor applications Start with advanced search dialog open. Remember sort activation state. Search parameters Stemming language A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Automatically add phrase to simple searches Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Dynamically build abstracts Do we synthetize an abstract even if the document seemed to have one? Replace abstracts from documents Synthetic abstract size (characters) Synthetic abstract context words The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Query language magic file name suffixes. Enable External Indexes Toggle selected Activate All Deactivate All Remove from list. This has no effect on the disk index. Remove selected Add index Apply changes &OK Discard changes &Cancel Abstract snippet separator Choose Resets the style sheet to default Result List Edit result paragraph format string Edit result page html header insert Date format (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Autophrase term frequency threshold percentage Plain text to HTML line style Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. <BR> <PRE> <PRE> + wrap Disable Qt autocompletion in search entry. Paths translations Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Snippets window CSS file Opens a dialog to select the Snippets window CSS style sheet file Resets the Snippets window style Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Document filter choice style: Buttons Panel Toolbar Combobox Menu Show system tray icon. Close to tray instead of exiting. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Synonyms file Show warning when opening temporary file. Highlight CSS style for query terms Recoll - User Preferences Set path translations for the selected index or for the main one if no selection exists. Activate links in preview. Make links inside the preview window clickable, and start an external browser when they are clicked. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Start search on completer popup activation. Maximum number of snippets displayed in the snippets window Suppress all beeps. Application Qt style sheet Limit the size of the search history. Use 0 to disable, -1 for unlimited. Maximum size of search history (0: disable, -1: unlimited): Generate desktop notifications. Sort snippets by page number (default: by weight). Misc Display a Snippets link even if the document has no pages (needs restart). Maximum text size highlighted for preview (kilobytes) Start with simple search mode: Shortcuts Hide result table header. Show result table row headers. Reset shortcuts defaults Use F1 to access the manual Hide some user interface elements. Hide: Toolbars Status bar Show button instead. Menu bar Show choice in menu only. Simple search type Clear/Search buttons Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. None (default) Choose QSS File To display document text instead of metadata in result table detail area, use: left mouse click Shift+click Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Result Table Do not display metadata when hovering over rows. Work around Tamil QTBUG-78923 by inserting space before anchor text The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Depth of side filter directory tree Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Display scale (default 1.0): Automatic spelling approximation. Max spelling distance Add common spelling approximations for rare terms. Maximum number of history entries in completer list Number of history entries in completer: Displays the total number of occurences of the term in the index Show hit counts in completer popup. Prefer HTML to plain text for preview. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Side filter dates format (change needs restart) If set, starting a new instance on the same index will raise an existing one. Single application Set to 0 to disable and speed up startup by avoiding tree computation. The completion only changes the entry when activated. Completion: no automatic line editing. Interface language (needs restart): Note: most translations are incomplete. Leave empty to use the system environment. Preview Set to 0 to disable details/summary feature Fields display: max field length before using summary: Number of lines to be shown over a search term found by preview search. Search term line offset: Wild card characters *?[] will processed as punctuation instead of being expanded Ignore wild card characters in ALL terms and ANY terms modes Color scheme When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Use dark background when displaying HTML in dark mode. recoll-1.43.12/qtgui/i18n/recoll_sv.ts0000644000175000017500000074061115124431112016717 0ustar dockesdockes ActSearchDLG Menu search Menysökning AdvSearch All clauses Alla satser Any clause Valfria satser texts texter spreadsheets kalkylblad presentations presentationer media media messages meddelanden other annat Bad multiplier suffix in size filter Dålig multiplikatorsuffix i storleksfilter text text spreadsheet kalkylblad presentation presentation message meddelande Advanced Search Avancerat sök History Next Historik Nästa History Prev Historik Föregående Load next stored search Ladda nästa lagrade sökning Load previous stored search Ladda tidigare lagrad sökning AdvSearchBase Advanced search Avancerad sökning Restrict file types Begränsa filtyper Save as default Spara som standard Searched file types Sökta filtyper All ----> Alla ----> Sel -----> Valda -----> <----- Sel <----- Valda <----- All <----- Alla Ignored file types Undantagna filtyper Enter top directory for search Ange den översta mappen för sökning Browse Bläddra Restrict results to files in subtree: Begränsa resultaten till filer i underträdet: Start Search Sök Search for <br>documents<br>satisfying: Sök efter <br>dokument<br>tillfredsställande: Delete clause Ta bort sats Add clause Lägg till sats Check this to enable filtering on file types Markera detta för att filtrera efter filtyper By categories Efter kategorier Check this to use file categories instead of raw mime types Markera det här om du vill använda filkategorier i stället för raw mime-typer Close Stäng All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Alla icke tomma fält till höger kombineras med konjunktionerna OCH (Alternativet "Alla satser") eller ELLER (Alternativet "Valfria satser").<br>Fälttyperna "Alla" "Valfri" och "Ingen", kan acceptera en blandning av enkla ord och fraser, omgivna av citationstecken.<br>Fält utan data undantas. Invert Invertera Minimum size. You can use k/K,m/M,g/G as multipliers Minsta storlek. Du kan använda k/K,m/M och g/G som multiplikatorer Min. Size Min. storlek Maximum size. You can use k/K,m/M,g/G as multipliers Största storlek. Du kan använda k/K,m/M och g/G som multiplikatorer Max. Size Max. storlek Select Välj Filter Filtrera From Från To Till Check this to enable filtering on dates Markera detta för sökning efter datum Filter dates Filtrera efter datum Find Hitta Check this to enable filtering on sizes Markera detta för filtrering efter storlekar Filter sizes Filtrera efter storlek Filter birth dates Filtrera födelsedatum ConfIndexW Can't write configuration file Kan inte skriva inställningsfil Global parameters Övergripande parametrar Local parameters Lokala parametrar Search parameters Sökparametrar Top directories Toppmappar The list of directories where recursive indexing starts. Default: your home. Listan över mappar där rekursiv indexering börjar. Standard är din hemkatalog. Skipped paths Undantagna sökvägar These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Det här är sökvägsnamn till kataloger som inte kommer att indexeras.<br>Sökvägar kan innehålla jokertecken. Posterna måste matcha de sökvägar som indexeraren ser (exempel: Om överordnade kataloger inkluderar "/home/me" och "/home" egentligen är en länk till "/usr/home", skulle en korrekt undantagen sökväg vara "/home/me/tmp*", inte "/usr/home/me/tmp*") Stemming languages Igenkända språk The languages for which stemming expansion<br>dictionaries will be built. Språken som hindrar expansion<br>ordböcker kommer att byggas. Log file name Loggfilsnamn The file where the messages will be written.<br>Use 'stderr' for terminal output Filen där meddelandena kommer att skrivas.<br>Använd "stderr" för utdata i terminal. Log verbosity level Informationsnivå i loggen This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Detta värde justerar mängden meddelanden,<br>från endast felmeddelanden till en mängd felsökningsdata. Index flush megabytes interval Indexdumpningsintervall i megabyte This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Detta värde justera mängden data som indexeras mellan dumpningar till disk.<br>Detta hjälper till att kontrollera indexerarens minnesanvändning. Standard är 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Det här är diskanvändningen i procent - Sammanlagd diskanvändning, inte den storlek där indexering kommer att misslyckas och stoppas.<br>Standardvärdet 0, tar bort all begränsning. No aspell usage Ingen Aspell-användning Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Inaktiverar användning av Aspell för att generera stavningsnärmevärde i termutforskarverktyget. Aspell language Aspell-språk The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Språket för aspell ordbok. Detta bör se ut 'sv' eller 'fr' . .<br>Om detta värde inte är inställt, kommer NLS-miljön att användas för att beräkna det, vilket vanligtvis fungerar. För att få en uppfattning om vad som installeras på ditt system, skriv 'aspell config' och leta efter . vid filer i katalogen 'data-dir' Database directory name Databasens mappnamn The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Namnet på en mapp där index lagras.<br>En icke-absolut sökväg tas i förhållande till konfigurationskatalogen. Standard är "xapiandb". Unac exceptions Unac-undantag <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Dessa är undantag från unac-mekanismen som, som standard, tar bort alla diakritiska tecken, och utför vägledande nedbrytning. Du kan åsidosätta vissa ointressanta tecken, beroende på ditt språk, och ange ytterligare nedbrytningar, t.ex. för ligaturer. I varje blankstegsseparerad post är det första tecknet källan och resten är översättningen. Process the WEB history queue Bearbeta webbhistorikkön Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Aktiverar indexering av sidor besökta med Firefox.<br>(Du behöver installera Recoll-tillägget i Firefox). Web page store directory name Mappnamn för webbsidelagring The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Namnet på en mapp där kopiorna av besökta webbsidor skall lagras.<br>En icke-absolut sökväg tas i förhållande till konfigurationskatalogen. Max. size for the web store (MB) Max storlek för webblagring (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Poster kommer att återvinnas när storleken är uppnådd. <br>Bara ökad storlek är meningsfull, eftersom minskat värde inte kommer att trunkera en befintlig fil (bara slösa med utrymmet). Automatic diacritics sensitivity Automatisk känslighet för diakritiska tecken <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. Utlöser automatisk känslighet för diakritiska tecken om söktermen har accenttecken (inte i unac_except_trans). Annars behöver du använda frågespråket och <i>D</i>-modifieraren för att ange diakritiska teckens känslighet. Automatic character case sensitivity Atomatisk skiftlägeskänslighet <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Utlöser automatiskt skiftlägeskänslighet om posten har versaltecken i någon annan än den första positionen. Annars behöver du använda frågespråket och <i>C</i>-modifieraren för att ange skiftlägeskänslighet. Maximum term expansion count Max antal termutvidgningar <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. Max antal utvidgningar för en enskild term (t.ex vid användning av jokertecken). Standardvärdet 10 000 är rimligt och kommer att undvika förfrågningar som verkar frysta, medan motorn går igenom termlistan. Maximum Xapian clauses count Max antal Xapian-satser <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. Max antal elementärsatser vi lägger till i en enda Xapian-sökning. I vissa fall kan resultatet av termutvidgning vara multiplikativ, och vi vill undvika att använda överdrivet mycket minne. Standardvärdet 100 000 bör i de flesta fall, vara både tillräckligt högt och kompatibelt med aktuella typiska maskinvarukonfigurationer. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... De språk för vilka igenkänningsordböcker kommer att byggas.<br>Se Xapians dokumentation för möjliga värden. T.ex. english, swedish, german ... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Språket för Aspell-ordboken. Värdena är 2-bokstavs språkkoder, t.ex."en", "sv" ...<br>Om detta värde inte anges kommer NLS-miljön att användas för att beräkna det, vilket vanligtvis fungerar. Skriv "aspell config" och leta efter .dat filer inuti "data-dir"-mappen, för att få en uppfattning om vad som är installerat på ditt system. Indexer log file name Loggfilsnamn för indexeraren If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Om det lämnas tomt, kommer ovanstående värde för loggfilsnamn att användas. Det kan vara användbart att ha en separat logg för diagnostiska ändamål eftersom den gemensamma loggen kommer att raderas när GUI startas. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Tröskelvärde för full disk, i procent, då vi slutar indexera<br>T.ex 90% för att stoppa vid 90% full disk, (0 eller 100 betyder ingen begränsning). Web history Webbhistorik Process the Web history queue Bearbeta webbhistorik-kön (by default, aspell suggests mispellings when a query has no results). (standardinställningen är att aspell föreslår felstavningar när en sökning inte ger några resultat). Page recycle interval Sidan återvinningsintervall <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Som standard sparas endast en instans av en URL i cachen. Detta kan ändras genom att ställa in detta på ett värde som bestämmer med vilken frekvens vi behåller flera instanser ('dag', 'vecka', 'månad', 'år'). Observera att att öka intervallet inte kommer att radera befintliga poster. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Observera: gamla sidor kommer att raderas för att göra plats för nya när den maximala storleken är nådd. Aktuell storlek: %1 Start folders Startmappar The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Listan över mappar/kataloger som ska indexeras. Undermappar kommer att bearbetas rekursivt. Standard: din hemkatalog. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Disk full threshold percentage vid vilken vi slutar indexera<br>(t.ex. 90 för att sluta vid 90% full, 0 eller 100 innebär ingen begränsning) Browser add-on download folder Webbläsartillägg hämta mapp Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Endast ställ in detta om du har ställt in parametern "Nedladdningar underkatalog" i webbläsartilläggets inställningar. <br>I så fall ska det vara den fullständiga sökvägen till katalogen (t.ex. /hem/[mig]/Nedladdningar/min-underkatalog) Store some GUI parameters locally to the index Spara vissa GUI-parametrar lokalt till indexet. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index <p>GUI-inställningar lagras normalt i en global fil, giltig för alla index. Att ställa in detta parameter kommer att göra vissa inställningar, såsom resultat-tabelluppställningen, specifika för indexet. Suspend the real time indexer when running on battery Pausa den realtidsindexerare när den körs på batteri. The indexer will wait for a return on AC and reexec itself when it happens Indexer kommer att vänta på en retur på AC och köra om sig själv när det inträffar. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Listan över mappar/kataloger som ska indexeras, rekursivt med deras undermappar. Tecknet '~' expanderar till din hemkatalog, vilket är det förvalda initialvärdet. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Endast mime-typer An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive En exklusiv lista över indexerade mime-typer.<br>Inget annat kommer att indexeras. Normalt tom och inaktiv. Exclude mime types Undanta mime-typer Mime types not to be indexed Mime-typer som inte skall indexeras Max. compressed file size (KB) Max komprimerad filstorlek (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Det här värdet anger ett tröskelvärde bortom vilket komprimerade filer inte kommer att bearbetas. Ange -1 för ingen begränsning, 0 för ingen dekomprimering någonsin. Max. text file size (MB) Max textfilsstorlek (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Det här värdet anger ett tröskelvärde bortom vilket textfiler inte kommer att behandlas. Ange -1 för ingen begränsning. Detta är för att utesluta monsterloggfiler från indexet. Text file page size (KB) Sidstorlek för textfiler (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Om detta värde anges (inte lika med -1), kommer textfiler att delas upp i bitar av denna storlek, för indexering. Detta kommer att underlätta vid genomsökning av mycket stora textfiler (t.ex. loggfiler). Max. filter exec. time (s) Maxtid för filterexekvering. (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Externa filter som arbetar längre än detta kommer att avbrytas. Detta är för det sällsynta fallet (t.ex. postscript) där ett dokument kan orsaka att ett filter loopar. Ange -1 för ingen begränsning. Global Övergripande ConfigSwitchDLG Switch to other configuration Byt till annan konfiguration ConfigSwitchW Choose other Välj annat Choose configuration directory Välj konfigurationsmapp CronToolW Cron Dialog Cron-dialog <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batchindexeringsschema (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Varje fält kan innehålla ett jokertecken (*), ett enkelt numeriskt värde, kommaavgränsade listor (1,3,5) och intervall (1-7). Mer allmänt kommer fälten att användas <span style=" font-style:italic;">som de är</span> inuti crontab-filen, och den fullständiga crontab-syntaxen kan användas, se crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Anges t.ex. <span style=" font-family:'Courier New,courier';">*</span> i <span style=" font-style:italic;">dagar, </span><span style=" font-family:'Courier New,courier';">12,19</span> i <span style=" font-style:italic;">timmar</span> och <span style=" font-family:'Courier New,courier';">15</span> i <span style=" font-style:italic;">minuter</span> kommer recollindex att startas varje dag klockan 12:15 och 19:15</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ett schema med mycket frekventa aktiveringar är förmodligen mindre effektivt än realtidsindexering.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Dagar i veckan (* eller 0-7, 0 eller 7 är Söndag) Hours (* or 0-23) Timmar (* eller 0-23) Minutes (0-59) Minuter (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Klicka <span style=" font-style:italic;">Inaktivera</span> för att stoppa automatisk batchindexering, <span style=" font-style:italic;">Aktivera</span> för att starta den, <span style=" font-style:italic;">Avbryt</span> för att inte ändra något.</p></body></html> Enable Aktivera Disable Inaktivera It seems that manually edited entries exist for recollindex, cannot edit crontab Det verkar finnas manuellt redigerade poster för recollindex, kan inte redigera crontab. Error installing cron entry. Bad syntax in fields ? Fel vid installation av cron-post. Dålig syntax i något fält ? EditDialog Dialog Dialog EditTrans Source path Källsökväg Local path Lokal sökväg Config error Inställningsfel Original path Ursprunglig sökväg Path in index Sökväg i indexet Translated path Översatt sökväg EditTransBase Path Translations Sökvägsöversättningar Setting path translations for Anger sökvägsöversättningar för Select one or several file types, then use the controls in the frame below to change how they are processed Välj en eller flera filtyper, använd sedan kontrollerna i ramen nedan, för att ändra hur de bearbetas Add Lägg till Delete Ta bort Cancel Avbryt Save Spara FirstIdxDialog First indexing setup Första indexering <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Det verkar inte finnas något index för den här konfigurationen.</span><br /><br />Om du bara vill indexera din hemkatalog med en uppsättning rimliga standardvärden, trycker du på knappen <span style=" font-style:italic;">Börja indexera nu</span>. Du kommer att kunna justera detaljerna senare. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Om du vill ha mer kontroll använder du följande länkar för att justera indexeringskonfiguration och schema.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dessa verktyg kan nås senare från <span style=" font-style:italic;">Inställningar</span> i menyn.</p></body></html> Indexing configuration Indexeringskonfiguration This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Detta kommer att låta dig justera vilka kataloger du vill indexera och andra parametrar, som uteslutna filsökvägar eller namn, standardteckenuppsättningar, etc. Indexing schedule Indexeringsschema This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Detta låter dig välja mellan batch och realtidsindexering, och ställa in ett automatiskt schema för batch-indexering (med hjälp av cron). Start indexing now Börja indexera nu FragButs %1 not found. %1 hittades inte. %1: %2 %1: %2 Fragment Buttons Fragmentknappar Query Fragments Sökfragment IdxSchedW Index scheduling setup Inställning av indexeringsschema <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexering kan köras permanent, indexera filer efter hand som de ändras, eller köras i diskreta intervall. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Manualen kan hjälpa dig att välja mellan dessa metoder (tryck F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Det här verktyget kan hjälpa dig att ställa in ett schema för att automatisera batchindexkörningar eller starta indexering i realtid när du loggar in (eller både och, vilket sällan är vettigt). </p></body></html> Cron scheduling Cron-schema The tool will let you decide at what time indexing should run and will install a crontab entry. Verktyget låter dig bestämma vid vilken tid indexering ska köras och installerar en crontab-post. Real time indexing start up Starta indexering i realtid Decide if real time indexing will be started when you log in (only for the default index). Avgör om indexering i realtid ska startas när du loggar in (endast för standardindex). ListDialog Dialog Dialog GroupBox Gruppruta Main No db directory in configuration Ingen databasmapp i inställningarna Could not open database in Kunde inte öppna databasen i . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Klicka på Avbryt om du vill redigera konfigurationsfilen innan indexering startar, eller Ok för att låta den fortsätta. Configuration problem (dynconf Konfigurationsproblem (dynconf "history" file is damaged or un(read)writeable, please check or remove it: "historik" filen är skadad eller oskrivbar, kontrollera eller ta bort den: "history" file is damaged, please check or remove it: Historikfilen är skadad. Kontrollera eller ta bort den: Needs "Show system tray icon" to be set in preferences! Behöver "Visa systemfältikonen" att vara inställd i inställningarna! PTransEdit Path in index Sökväg i indexet Translated path Översatt sökväg Config error Inställningsfel Original path Ursprunglig sökväg Local path Lokal sökväg PTransEditBase Path Translations Sökvägsöversättningar Select one or several file types, then use the controls in the frame below to change how they are processed Välj en eller flera filtyper, använd sedan kontrollerna i ramen nedan för att ändra hur de behandlas. Add Lägg till Delete Ta bort Cancel Avbryt Save Spara Preview &Search for: &Sök efter: &Next &Nästa &Previous &Föregående Match &Case Skift&lägeskänsligt Clear Rensa Creating preview text Skapar förhandsgranskningstext Loading preview text into editor Läser in förhandsgranskningstext i redigeraren Cannot create temporary directory Kan inte skapa temporär katalog Cancel Avbryt Close Tab Stäng flik Missing helper program: Saknade hjälpprogram: Can't turn doc into internal representation for Kan inte göra doc till intern representation för Cannot create temporary directory: Kan inte skapa temporär katalog: Error while loading file Fel vid laddning av fil Form Formulär Tab 1 Flik 1 Open Öppna Canceled Avbruten Error loading the document: file missing. Kunde inte läsa in dokumentet: Filen saknas. Error loading the document: no permission. Kunde inte läsa in dokumentet: Behörighet saknas. Error loading: backend not configured. Kunde inte läsa in: Serversidan inte konfigurerad Error loading the document: other handler error<br>Maybe the application is locking the file ? Kunde inte läsa in dokumentet: Annat hanterarefel. <br>Programmet kanske låser filen? Error loading the document: other handler error. Kunde inte läsa in dokumentet: Annat hanterarefel. <br>Attempting to display from stored text. <br>Försöker visa från lagrad text. Could not fetch stored text Kunde inte hämta lagrad text Previous result document Föregående resultatdokument Next result document Nästa resultatdokument Preview Window Förhandsgranska fönster Close Window Stäng fönster Next doc in tab Nästa dokument i fliken Previous doc in tab Föregående dokument i fliken Close tab Stäng flik Print tab Print tab Close preview window Stäng förhandsgranskningsfönster Show next result Visa nästa resultat Show previous result Visa föregående resultat Print Skriv ut PreviewTextEdit Show fields Visa fält Show main text Visa huvudtext Print Skriv ut Print Current Preview Skriv ut aktuell förhandsgranskning Show image Visa bild Select All Markera alla Copy Kopiera Save document to file Spara dokument som fil Fold lines Viklinjer Preserve indentation Bevara indrag Open document Öppna dokument Reload as Plain Text Uppdatera som ren text Reload as HTML Uppdatera som HTML QObject Global parameters Övergripande parametrar Local parameters Lokala parametrar <b>Customised subtrees <b>Anpassade underträd The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Listan över undermappar i den indexerade hierarkin <br>där vissa parametrar behöver omdefinieras. Standard: tom. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>De parametrar som följer är inställda antingen på toppnivå, om inget<br>eller en tom rad är markerad i listrutan ovan, eller för den valda underkatalogen.<br>Du kan lägga till eller ta bort kataloger genom att klicka på +/- knapparna. Skipped names Undantagna namn These are patterns for file or directory names which should not be indexed. Detta är mallar för fil- eller mappnamn som inte skall indexeras. Default character set Standard teckenuppsättning This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Detta är teckenuppsättningen som används för att läsa filer som inte identifierar teckenuppsättningen internt, till exempel rena textfiler.<br>Standardvärdet är tomt och värdet från NLS-miljöerna används. Follow symbolic links Följ symboliska länkar Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Följ symboliska länkar vid indexering. Standard är nej, för att undvika dubblettindexering. Index all file names Indexera alla filnamn Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indexera namnen på filer som innehållet inte kan identifieras eller bearbetas för (ingen eller ej stödd mime-typ). Standard: sant. Beagle web history Beagle webbhistorik Search parameters Sökparametrar Web history Webbhistorik Default<br>character set Standard<br>teckenuppsättning Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Teckenuppsättning som används för läsning av filer som inte identifierar teckenuppsättningen internt, till exempel rena textfiler.<br>Standardvärdet är tom, och värdet från NLS-miljön används. Ignored endings Ignorerade ändelser These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Dessa är filnamnslut för filer som endast kommer att indexeras av innehåll (inga MIME-typ-identifieringsförsök, ingen dekompression, ingen innehållsindexering. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Dessa är filnamnsändelser för filer som endast kommer att indexeras efter namn. (ingen MIME-typidentifiering, ingen dekompression, ingen innehållsindexering). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>De parametrar som följer anges antingen på toppnivå, om ingenting eller en tom rad är markerad i listboxen ovan, eller för den markerade undermappen. Du kan lägga till eller ta bort mappar genom att klicka på +/-. These are patterns for file or directory names which should not be indexed. Dessa är mönster för fil- eller mappnamn som inte ska indexeras. QWidget Create or choose save directory Skapa eller välj mapp att spara i Choose exactly one directory Välj exakt en mapp Could not read directory: Kunde inte läsa mappen: Unexpected file name collision, cancelling. Oväntad filnamnskrock, avbryter. Cannot extract document: Kan inte extrahera dokument: &Preview &Förhandsgranska &Open &Öppna Open With Öppna med Run Script Kör skript Copy &File Name Kopiera &filnamn Copy &URL Kopiera &URL &Write to File &Skriv till fil Save selection to files Spara markerat till filer Preview P&arent document/folder Förhandsgranska &överordnat dokument/mapp &Open Parent document/folder &Öppna överordnat dokument/mapp Find &similar documents Hitta &liknande dokument Open &Snippets window Öppna &textavsnittsfönster Show subdocuments / attachments Visa dokument/bilagor &Open Parent document &Öppna överordnat dokument &Open Parent Folder Ö&ppna överordnad mapp Copy Text Kopiera text Copy &File Path Kopiera sökväg till filen Copy File Name Kopiera filnamn QxtConfirmationMessage Do not show again. Visa inte igen. RTIToolW Real time indexing automatic start Automatisk start av realtidsindexering <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexering kan ställas in för att köras som en tjänst, uppdatera indexet efterhand som filer ändras, i realtid. Du får ett alltid aktuellt index, men systemresurser används permanent.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Starta indexeringstjänsten med min skrivbordssession. Also start indexing daemon right now. Starta också indexertingstjänsten nu direkt. Replacing: Ersätter: Replacing file Ersätter fil Can't create: Kan inte skapa: Warning Varning Could not execute recollindex Kunde inte köra recollindex Deleting: Tar bort: Deleting file Tar bort fil Removing autostart Tar bort autostart Autostart file deleted. Kill current process too ? Autostartfilen borttagen. Vill du döda aktuell process också? Configuration name Konfigurationsnamn Short alphanumeric nickname for this config Kort alfanumeriskt smeknamn för denna konfiguration Could not find Kunde inte hitta RclCompleterModel Hits Träffar Hits RclMain About Recoll Om Recoll Executing: [ Kör: [ Cannot retrieve document info from database Kan inte hämta dokumentinformation från databasen Warning Varning Can't create preview window Kan inte skapa förhandsgranskningsfönster Query results Sökresultat Document history Dokumenthistorik History data Historikdata Indexing in progress: Indexering pågår: Files Filer Purge Rensa Stemdb Stemdb Closing Stänger Unknown Okänd This search is not active any more Sökningen är inte aktiv längre Can't start query: Kan't starta frågan: Bad viewer command line for %1: [%2] Please check the mimeconf file Felaktig kommandorad för %1: [%2] Kontrollera filen mimeconf Cannot extract document or create temporary file Kan inte extrahera dokument eller skapa temporär fil (no stemming) (ingen igenkänning) (all languages) (alla språk) error retrieving stemming languages kunde inte hämta igänkännda språk Update &Index Uppdatera &index Indexing interrupted Indexering avbruten Stop &Indexing Stoppa i&ndexering All Alla media media message meddelande other annat presentation presentation spreadsheet kalkylblad text text sorted sorterat filtered filtrerat External applications/commands needed and not found for indexing your file types: Externa program/kommandon behövs och hittades inte för att indexera dina filtyper: No helpers found missing Inga saknade hjälpare hittades Missing helper programs Saknade hjälpprogram Save file dialog Spara fildialog Choose a file name to save under Välj ett filnamn att spara under Document category filter Dokument kategori filter No external viewer configured for mime type [ Ingen extern visare konfigurerad för mime-typ [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Det visningsläge som anges i mimeview för %1: %2 hittas inte. Vill du starta inställningsdialogen? Can't access file: Kan inte komma åt fil: Can't uncompress file: Kan inte extrahera fil: Save file Spara fil Result count (est.) Antal träffar (uppsk.) Query details Sökdetaljer Could not open external index. Db not open. Check external index list. Kunde inte öppna externt index. Databasen inte öppen. Kolla extern indexlista. No results found Inga träffar None Inget Updating Uppdaterar Done Klar Monitor Övervaka Indexing failed Indexering misslyckades The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Den aktuella indexeringsprocessen startades inte från det här gränssnittet. Klicka på OK för att stoppa den ändå, eller Avbryt för att lämna den kvar. Erasing index Raderar index Reset the index and start from scratch ? Vill du återställa index och börja om från start? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Sökning pågår.<br>På grund av begränsningar i indexeringsbiblioteket,<br>kommer avbryt att avsluta programmet. Error Fel Index not open Index inte öppet Index query error Index-sökfel Indexed Mime Types Indexerade Mime-typer Content has been indexed for these MIME types: Innehåll har indexerats för dessa MIME-typer: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Index inte uppdaterat för denna fil. Vägran att riskera att visa fel post. Klicka på OK för att uppdatera indexet för den här filen och kör sedan om frågan när indexering är klar. Can't update index: indexer running Kan inte uppdatera index: Indexering körs. Indexed MIME Types Indexerade MIME-typer Bad viewer command line for %1: [%2] Please check the mimeview file Felaktigt visarkommando för %1: [%2] Kolla mimewiew-filen. Viewer command line for %1 specifies both file and parent file value: unsupported Visarkommandot för %1 specificerar både fil- och överordnat filvärde: Stöds ej. Cannot find parent document Kan inte hitta överordnat dokument Indexing did not run yet Indexeringen kördes inte ännu External applications/commands needed for your file types and not found, as stored by the last indexing pass in Externa program/kommandon som behövs för dina filtyper och inte hittas, som lagrats av det senaste indexeringspasset i Index not up to date for this file. Refusing to risk showing the wrong entry. Index inte uppdaterat för denna fil. Vägran att riskera att visa fel post. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Klicka på OK för att uppdatera indexet för den här filen och kör sedan om frågan när indexering är klar. Indexer running so things should improve when it's done Indexeraren kör så saker bör förbättras när det's gjort Sub-documents and attachments Underdokument och bilagor Document filter Dokumentfilter Index not up to date for this file. Refusing to risk showing the wrong entry. Index inte uppdaterat för denna fil. Vägran att riskera att visa fel post. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Klicka OK för att uppdatera indexet för denna fil, då måste du köra om frågan när indexering är klar. The indexer is running so things should improve when it's done. Indexeraren körs så saker och ting bör förbättras när det är klart. The document belongs to an external indexwhich I can't update. Dokumentet tillhör ett externt index som jag kan't uppdatera. Click Cancel to return to the list. Click Ignore to show the preview anyway. Klicka på Avbryt för att återvända till listan. Klicka på Ignorera för att visa förhandsgranskningen ändå. Duplicate documents Dubblettdokument These Urls ( | ipath) share the same content: Dessa URL:er ( | ipath) delar samma innehåll: Bad desktop app spec for %1: [%2] Please check the desktop file Felaktig programspec. för %1: [%2] Kolla desktop-filen. Bad paths Felagtiga sökvägar Bad paths in configuration file: Dåliga sökvägar i konfigurationsfilen: Selection patterns need topdir Markeringsmall behöver toppkatalog Selection patterns can only be used with a start directory Markeringsmallar kan bara användas med en startmapp No search Inget sök No preserved previous search Inga bevarade tidigare sökningar Choose file to save Välj fil att spara Saved Queries (*.rclq) Sparade förfrågningar (*.rclq) Write failed Skrivning misslyckades Could not write to file Kunde inte skriva till fil Read failed Läsning misslyckades Could not open file: Kunde inte öppna filen: Load error Inläsningsfel Could not load saved query Kunde inte läsa in sparad fråga Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Öppnar en tillfällig kopia. Redigeringar kommer att gå förlorade om du inte sparar<br/> till en permanent plats. Do not show this warning next time (use GUI preferences to restore). Visa inte denna varning nästa gång (använd GUI-inställningar för att återställa). Disabled because the real time indexer was not compiled in. Inaktiverad eftersom realtidsindexeraren inte kompilerats in. This configuration tool only works for the main index. Det här konfigurationsverktyget fungerar bara för huvudindexet. The current indexing process was not started from this interface, can't kill it Den aktuella indexeringsprocessen startades inte från detta gränssnitt, kan't döda det The document belongs to an external index which I can't update. Dokumentet tillhör ett externt index som jag inte kan uppdatera. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Klicka på Avbryt för att återvända till listan. <br>Klicka på Ignorera för att visa förhandsgranskningen ändå (och kom ihåg för denna session). Index scheduling Index schemaläggning Sorry, not available under Windows for now, use the File menu entries to update the index Tyvärr, inte tillgänglig under Windows för tillfället, använd menyposterna för att uppdatera indexet Can't set synonyms file (parse error?) Kan inte hämta synonymfil (tolkningsfel) Index locked Index låst Unknown indexer state. Can't access webcache file. Okänt indexeringsstatus. Kan inte komma åt Webcache-filen. Indexer is running. Can't access webcache file. Indexering körs. Kan inte komma åt Webcache-filen. with additional message: med tilläggsmeddelande: Non-fatal indexing message: Ofarligt indexeringsmeddelande: Types list empty: maybe wait for indexing to progress? Typlistan är tom: Kanske vänta på att indexering skall fortgå? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Visarkommando för %1 anger överordnad fil men URL är http[s]: Stöds ej. Tools Verktyg Results Resultat (%d documents/%d files/%d errors/%d total files) (%d dokument/%d filer/%d fel/%d filer totalt) (%d documents/%d files/%d errors) (%d dokument/%d filer/%d fel) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Tomma eller icke existerande sökvägar i konfigurationsfilen. Klicka på OK för att börja indexera ändå (frånvarande data kommer inte att rensas bort från index): Indexing done Indexering klar Can't update index: internal error Kan inte uppdatera index: Internt fel. Index not up to date for this file.<br> Index inte uppdaterat för denna fil.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Det verkar också som om senaste indexuppdatering för filen misslyckades.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Klicka OK för att försöka uppdatera index för den här filen. Du kommer att behöva köra sökningen igen när indexeringen är klar. <br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Klicka Avbryt för att gå tillbaka till listan. <br>Klicka Ignorera för att visa förhandsgranskningen ändå (och komma ihåg för den här sessionen). Det finns risk för att fel post visas.<br/> documents dokument document dokument files filer file fil errors fel error fel total files) antal filer) No information: initial indexing not yet performed. Ingen information: Inledande indexering ännu inte utförd. Batch scheduling Batchschemaläggning The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Verktyget låter dig bestämma vid vilken tid indexering ska köras. Det använder Windows schemaläggare. Confirm Bekräfta Erasing simple and advanced search history lists, please click Ok to confirm Raderar enkel och avancerad sökhistorik, klicka OK för att bekräfta. Could not open/create file Kunde inte öppna/skapa fil F&ilter &Filter Could not start recollindex (temp file error) Kunde inte starta recollindex (tempfilsfel) Could not read: Kunde inte läsa: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Detta kommer att ersätta det aktuella innehållet i rubriksträngen för resultatlistan och GUI qss-filnamn. Vill du fortsätta? You will need to run a query to complete the display change. Du behöver köra en sökning för att slutföra visningsändringen. Simple search type Enkel söktyp Any term Valfri term All terms Alla termer File name Filnamn Query language Frågespråk Stemming language Igenkänt språk Main Window Huvudfönster Focus to Search Fokusera på sökning Focus to Search, alt. Fokusera på sökning, alt. Clear Search Rensa sökning Focus to Result Table Fokusera på resultattabellen Clear search Rensa sökning Move keyboard focus to search entry Flytta tangentbordsfokus för att söka post Move keyboard focus to search, alt. Flytta tangentbordsfokus för att söka, alt. Toggle tabular display Växla tabulär visning Move keyboard focus to table Flytta tangentbordsfokus till tabell Flushing Spolar Show menu search dialog Visa meny sökdialog Duplicates Dubbletter Filter directories Filtrera kataloger Main index open error: Huvudindex öppningsfel: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Indexet kan vara korrupt. Försök kanske köra xapian-check eller återuppbygga indexet? This search is not active anymore Denna sökning är inte längre aktiv. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Visningskommandoraden för %1 specificerar överordnad fil men URL:en är inte fil:// : stöds inte The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Den visare som anges i mimeview för %1: %2 hittades inte. Vill du starta inställningsdialogen? Show advanced search dialog Visa avancerad sökdialog with additional message: RclMainBase Previous page Föregående sida Next page Nästa sida &File &Arkiv E&xit A&vsluta &Tools &Verktyg &Help &Hjälp &Preferences &Inställningar Search tools Sök verktyg Result list Resultatlista &About Recoll &Om Recoll Document &History Dokument&historik Document History Dokumenthistorik &Advanced Search &Avancerat sök Advanced/complex Search Avancerat/Komplext sök &Sort parameters &Sorteringsparametrar Sort parameters Sorteringsparametrar Next page of results Nästa resultatsida Previous page of results Föregående resultatsida &Query configuration &Frågekonfiguration &User manual &Användarmanual Recoll Återställa Ctrl+Q Ctrl+Q Update &index Uppdatera &index Term &explorer Term&utforskare Term explorer tool Termutforskningsverktyg External index dialog Extern indexdialog &Erase document history &Radera dokumenthistorik First page Första sidan Go to first page of results Gå till första resultatsidan &Indexing configuration &Indexeringskonfiguration All Alla &Show missing helpers &Visa saknade hjälpare PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Skift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen &Helskärm F11 F11 Full Screen Helskärmsläge &Erase search history &Radera sökhistorik sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Sortera efter datum från äldst till nyast sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Sortera efter datum från nyast till äldst Show Query Details Visa sökdetaljer Show results as table Visa resultat som tabell &Rebuild index &Bygg om index &Show indexed types &Visa indexerade typer Shift+PgUp Skift+PgUp &Indexing schedule &Indexeringsschema E&xternal index dialog E&xtern indexdialog &Index configuration &Indexkonfiguration &GUI configuration &GUI-konfiguration &Results &Resultat Sort by date, oldest first Sortera efter datum, äldst först Sort by date, newest first Sortera efter datum, nyast först Show as table Visa som tabell Show results in a spreadsheet-like table Visa resultat i en kalkylbladsliknande tabell Save as CSV (spreadsheet) file Spara som CSV-fil (kalkylblad) Saves the result into a file which you can load in a spreadsheet Spara resultatet i en fil som kan läsas in i ett kalkylblad Next Page Nästa sida Previous Page Föregående sida First Page Första sidan Query Fragments Sökfragment With failed files retrying Med misslyckade filers återförsök Next update will retry previously failed files Nästa uppdatering försöker igen med tidigare misslyckade filer Save last query Spara senaste sökningen Load saved query Läs in sparad sökning Special Indexing Specialindexering Indexing with special options Indexering med specialalternativ Indexing &schedule Indexerings&schema Enable synonyms Aktivera synonymer &View &Visa Missing &helpers Saknade &hjälpare Indexed &MIME types Indexerade &MIME-typer Index &statistics Index&statistik Webcache Editor Webbcache-redigerare Trigger incremental pass Utlös inkrementellt pass E&xport simple search history E&xportera enkel sökhistorik Use default dark mode Använd standardmörkt läge Dark mode Mörkt läge &Query &Fråga Increase results text font size Öka resultattextens teckenstorlek Increase Font Size Öka textstorlek Decrease results text font size Minska textens teckenstorlek för resultat Decrease Font Size Minska teckenstorlek Start real time indexer Starta realtidsindexeraren Query Language Filters Frågespråksfilter Filter dates Filtrera efter datum Assisted complex search Assisterad komplex sökning Filter birth dates Filtrera födelsedatum Switch Configuration... Växelkonfiguration... Choose another configuration to run on, replacing this process Välj en annan konfiguration att köra på, och ersätt denna process. &User manual (local, one HTML page) Användarmanual (lokal, en HTML-sida) &Online manual (Recoll Web site) &Online manual (Recoll webbplats) Path translations Sökvägöversättningar With failed files retrying RclTrayIcon Restore Återställ Quit Avsluta RecollModel Abstract Abstrakt Author Skapare Document size Dokumentstorlek Document date Dokumentdatum File size Filstorlek File name Filnamn File date Fildatum Ipath Iväg Keywords Nyckelord Mime type Mime-typ Original character set Ursprunglig teckenuppsättning Relevancy rating Relevansbetyg Title Titel URL URL Mtime Mtime Date Datum Date and time Datum och tid MIME type MIME-typ Can't sort by inverse relevance Kan inte sortera efter omvänd relevans ResList Result list Resultatlista Unavailable document Icke tillgängligt dokument Previous Föregående Next Nästa <p><b>No results found</b><br> <p><b>Inga träffar</b><br> &Preview &Förhandsgranska Copy &URL Kopiera &URL Find &similar documents Hitta &liknande dokument Query details Sökdetaljer (show query) (visa sökning) Copy &File Name Kopiera &filnamn filtered filtrerat sorted sorterat Document history Dokumenthistorik Preview Förhandsgranska Open Öppna <p><i>Alternate spellings (accents suppressed): </i> <p><i>Alternativa stavningar (accenter undantagna): </i> &Write to File &Skriv till fil Preview P&arent document/folder Förhandsgranska &överordnat dokument/mapp &Open Parent document/folder &Öppna överordnat dokument/mapp &Open &Öppna Documents Dokument out of at least ur minst for för <p><i>Alternate spellings: </i> <p><i>Alternativa stavningar: </i> Open &Snippets window Öppna &textavsnittsfönster Duplicate documents Dubblettdokument These Urls ( | ipath) share the same content: Dessa URL:er ( | ipath) delar samma innehåll: Result count (est.) Antal träffar (uppsk.) Snippets Utdrag This spelling guess was added to the search: Denna stavning gissning lades till i sökningen: These spelling guesses were added to the search: Dessa stavningstips lades till i sökningen: ResTable &Reset sort &Återställ sortering &Delete column &Ta bort kolumn Add " Lägg till " " column " kolumn Save table to CSV file Spara tabell till CSV-fil Can't open/create file: Kan inte öppna/skapa fil: &Preview &Förhandsgranska &Open &Öppna Copy &File Name Kopiera &filnamn Copy &URL Kopiera &URL &Write to File &Skriv till fil Find &similar documents Hitta &liknande dokument Preview P&arent document/folder Förhandsgranska &överordnat dokument/mapp &Open Parent document/folder &Öppna överordnat dokument/mapp &Save as CSV &Spara som CSV Add "%1" column Lägg till kolumn "%1" Result Table Resultattabell Open Öppna Open and Quit Öppna och avsluta Preview Förhandsgranska Show Snippets Visa textmoduler Open current result document Öppna aktuellt resultatdokument Open current result and quit Öppna nuvarande resultat och avsluta Show snippets Visa textmoduler Show header Visa sidhuvud Show vertical header Visa vertikalt sidhuvud Copy current result text to clipboard Kopiera nuvarande resultattext till urklipp Use Shift+click to display the text instead. Använd Shift+klicka för att visa texten istället. %1 bytes copied to clipboard %1 byte kopierades till urklipp. Copy result text and quit Kopiera resultattexten och avsluta ResTableDetailArea &Preview &Förhandsgranska &Open &Öppna Copy &File Name Kopiera &filnamn Copy &URL Kopiera &URL &Write to File &Skriv till fil Find &similar documents Hitta &liknande dokument Preview P&arent document/folder Förhandsgranska &överordnat dokument/mapp &Open Parent document/folder &Öppna överordnat dokument/mapp ResultPopup &Preview &Förhandsgranska &Open &Öppna Copy &File Name Kopiera &filnamn Copy &URL Kopiera &URL &Write to File &Skriv till fil Save selection to files Spara markerat till filer Preview P&arent document/folder Förhandsgranska &överordnat dokument/mapp &Open Parent document/folder &Öppna överordnat dokument/mapp Find &similar documents Hitta &liknande dokument Open &Snippets window Öppna &textavsnittsfönster Show subdocuments / attachments Visa dokument/bilagor Open With Öppna med Run Script Kör skript SSearch Any term Valfri term All terms Alla termer File name Filnamn Completions Slutföranden Select an item: Välj ett objekt: Too many completions För många slutföranden Query language Frågespråk Bad query string Felaktig söksträng Out of memory Slut på minne Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Ange uttryck för frågans språk. Cheat sheet:<br> <i>term1 term2</i> : 'term1' och 'term2' i alla fält.<br> <i>fält:term1</i> : 'term1' i fält 'fält'.<br> Standardfältnamn/synonymer:<br> titel/ämne/bildtext, författare/från, mottagare/till, filnamn, ext.<br> Pseudofält: dir, mime/format, type/rclcat, datum.<br> Två datumintervall exemplar: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 ELLER term3</i> : term1 OCH (term2 ELLER term3).<br> Inga faktiska parenteser tillåtna.<br> <i>"term1 term2"</i> : phrase (måste ske exakt). Möjliga modifierare:<br> <i>"term1 term2"p</i> : obeställd närhetssökning med standardavstånd.<br> Använd <b>Visa fråga</b> länk när du är osäker på resultatet och se manuell (&lt; 1>) för mer detaljer. Enter file name wildcard expression. Ange filnamn jokertecken uttryck. Enter search terms here. Type ESC SPC for completions of current term. Skriv in sökord här. Skriv ESC SPC för färdigställanden av nuvarande term. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Ange uttryck för frågans språk. Cheat sheet:<br> <i>term1 term2</i> : 'term1' och 'term2' i alla fält.<br> <i>fält:term1</i> : 'term1' i fält 'fält'.<br> Standardfältnamn/synonymer:<br> titel/ämne/bildtext, författare/från, mottagare/till, filnamn, ext.<br> Pseudofält: dir, mime/format, type/rclcat, datum, storlek.<br> Två datumintervall exemplar: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 ELLER term3</i> : term1 OCH (term2 ELLER term3).<br> Du kan använda parenteser för att göra saker tydligare.<br> <i>"term1 term2"</i> : phrase (måste ske exakt). Möjliga modifierare:<br> <i>"term1 term2"p</i> : obeställd närhetssökning med standardavstånd.<br> Använd <b>Visa fråga</b> länk när du är osäker på resultatet och se manuell (&lt; 1>) för mer detaljer. Stemming languages for stored query: Igenkända språk för lagrad sökning: differ from current preferences (kept) skiljer sig från aktuella inställningar (hålls) Auto suffixes for stored query: Autosuffix för lagrad sökning: External indexes for stored query: Externa index för lagrad fråga: Autophrase is set but it was unset for stored query Autofras är inställt men det var undantaget för lagrad sökning Autophrase is unset but it was set for stored query Autofras är undantaget men den angavs för lagrad förfrågan Enter search terms here. Ange söktermer här. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; kant: 1 px fast svart; border-collapse: collapse; gräns-kollaps: kollaps; } } th,td { th,td { text-align: center; textjustering: centrera; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Query-språkets lathund. Vid tvivel: Klicka <b>Visa Query</b>.&nbsp; You should really look at the manual (F1)</p> Du borde verkligen kolla manualen (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Vilka</th><th>exempel</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Och</td><td>en två&nbsp;&nbsp;&nbsp;en OCH två&nbsp;&nbsp;&nbsp;en && två</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Eller</td><td>en ELLER två&nbsp;&nbsp;&nbsp;en <unk> två</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Komplex boolean. ELLER har prioritet, använd parenteser&nbsp; where needed</td><td>(one AND two) OR three</td></tr> där det behövs</td><td>(en och två) ELLER tre</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Inte</td><td>sikt</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Fras</td><td>"stolthet och fördomar"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Obeställd prox. (standard slack=10)</td><td>"fördomar&nbsp;stolthet"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Ingen stamexpansion: kapitalisera</td><td>Golv</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Fältspecifik</td><td>författare:austen&nbsp;&nbsp;titel:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OCH inuti fältet (ingen ordning)</td><td>författare: jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>ELLER inuti fältet</td><td>författare:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Fältnamn</td><td>titel/ämne/bildtext&nbsp;&nbsp;författare/från<br>mottagare/till&nbsp;&nbsp;filnamn&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Katalogsökvägfilter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME-typfilter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Datumintervall</td><td>datum:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> datum:2018&nbsp;&nbsp;datum:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Kan inte öppna index Could not restore external indexes for stored query:<br> Kunde inte återställa externt index för lagrad sökning:<br> ??? ??? Using current preferences. Använder aktuella inställningar. Simple search Enkel sökning History Historik <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Frågespråksfuskblad. Vid tvekan: klicka på <b>Visa frågedetaljer</b>. <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Kapitalisera för att undertrycka stamexpansion</td><td>Golv</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Rensa Ctrl+S Ctrl+S Erase search entry Radera sökpost Search Sök Start query Starta sök Enter search terms here. Type ESC SPC for completions of current term. Skriv in sökord här. Skriv ESC SPC för färdigställanden av nuvarande term. Choose search type. Välj söktyp Show query history Visa sökhistorik Enter search terms here. Ange söktermer här. Main menu Huvudmeny SearchClauseW SearchClauseW SökClauseW Any of these Någon av dessa All of these Alla dessa None of these Inget av dessa This phrase Denna fras Terms in proximity Villkor i närhet File name matching Filnamn som matchar Select the type of query that will be performed with the words Välj vilken typ av sökning som skall utföras med orden Number of additional words that may be interspersed with the chosen ones Antal ytterligare ord som kan varvas med de valda In field I fält No field Inga fält Any Valfritt All Alla None Ingen Phrase Fras Proximity Närheten File name Filnamn Snippets Snippets Textsnuttar X X Find: Sök: Next Nästa Prev Föregående SnippetsW Search Sök <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Ingen exakt träff hittades inom gränsen. Dokumentet är troligen väldigt stort och textsnuttgeneratorn gick vilse i en labyrint...</p> Sort By Relevance Sortera efter relevans Sort By Page Sortera efter sida Snippets Window Textmoduler Fönster Find Hitta Find (alt) Hitta (alt) Find Next Hitta nästa Find Previous Hitta föregående Hide Dölj Find next Sök nästa Find previous Sök föregående Close window Stäng fönster Increase font size Öka teckenstorleken Decrease font size Minska teckenstorlek SortForm Date Datum Mime type Mime-typ SortFormBase Sort Criteria Sortera kriterier Sort the Sortera den most relevant results by: mest relevanta resultat genom att: Descending Fallande Close Stäng Apply Tillämpa SpecIdxW Special Indexing Specialindexering Do not retry previously failed files. Försök inte igen tidigare misslyckade filer. Else only modified or failed files will be processed. Annars kommer endast ändrade eller misslyckade filer att bearbetas. Erase selected files data before indexing. Radera valda filers data före indexering Directory to recursively index Katalog att rekursivt indexera Browse Bläddra Start directory (else use regular topdirs): Startkatalog (använd annars vanliga topdirs): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Lämnas tom för att markera alla filer. Du kan använda flera blankstegsseparerade skaltypsmallar.<br>Mallar innehållande blanksteg bör infattas med sitationstecken (").<br>Kan bara användas om startmapp har angetts. Selection patterns: Markeringsmallar: Top indexed entity Toppindexerad enhet Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Mapp att indexera rekursivt. Detta måste finnas innanför det vanliga indexerade området<br> som definieras i konfigurationsfilen (överordnade mappar). Retry previously failed files. Försök igen med tidigare misslyckade filer. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start katalog. Måste vara en del av det indexerade trädet. Vi använder topdirs om det är tomt. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Startmapp. Måste vara en del av det indexerade trädet. Använder hela det indexerade området om den lämnas tom. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnostikutdatafil. Kommer att bli avkortad och få indexdiagnostik (orsaker till att filer inte indexeras). Diagnostics file Diagnostikfil SpellBase Term Explorer Termutforskare &Expand &Expandera Alt+E Alt+E &Close &Stäng Alt+C Alt+C Term Termin No db info. Ingen databasinfo. Doc. / Tot. Dok. / Tot. Match Matcha Case Skiftläge Accents Accenter SpellW Wildcards Jokertecken Regexp Regexp Spelling/Phonetic Stavning/Fonetik Aspell init failed. Aspell not installed? Aspell init misslyckades. Aspell inte installerad? Aspell expansion error. Aspell expansionsfel. Stem expansion Stamutvidgning error retrieving stemming languages fel vid hämtning av igenkänningsspråk No expansion found Ingen utvidgning hittades Term Termin Doc. / Tot. Dok. / Tot. Index: %1 documents, average length %2 terms Index: %1 dokument, genomsnittslängd %2 termer Index: %1 documents, average length %2 terms.%3 results Index: %1 dokument, genomsnittlig längd %2 termer.%3 träffar %1 results %1 träffar List was truncated alphabetically, some frequent Listan avkortades alfabetiskt, några frekventa terms may be missing. Try using a longer root. termer kan saknas. försök använda en längre root. Show index statistics Visa indexstatistik Number of documents Antal dokument Average terms per document Genomsnittligt antal termer per dokument Smallest document length Minsta dokumentlängd Longest document length Längsta dokumentlängd Database directory size Databasmappens storlek MIME types: MIME-typer: Item Objekt Value Värde Smallest document length (terms) Kortast dokumentlängd (termer) Longest document length (terms) Längst dokumentlängd (termer) Results from last indexing: Resultat från senaste indexering: Documents created/updated Skapade/Uppdaterade dokument Files tested Testade filer Unindexed files Ej indexerade filer List files which could not be indexed (slow) Lista filer som inte kunde indexeras (långsam) Spell expansion error. Fel vif stavningsutvidgning. Spell expansion error. Stavningsutvidgningsfel. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index Den valda mappen verkar inte vara ett Xapian-index This is the main/local index! Detta är lokalt huvudindex! The selected directory is already in the index list Den valda mappen finns redan i indexlistan Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Välj xapian index katalog (dvs: /home/buddy/.recoll/xapiandb) error retrieving stemming languages fel vid hämtning av igenkända språk Choose Välj Result list paragraph format (erase all to reset to default) Styckeformat för resultatlista (radera alla för att återställa till standard) Result list header (default is empty) Rubrik för resultatlista (tomt som standard) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Välj Recoll konfigurationsmapp eller Xapian indexmapp (t.ex. /home/<användare>/.recoll eller /home/<användare>/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Den valda mappen ser ut som en Recoll konfigurationsmapp men det gick inte att läsa konfigurationen At most one index should be selected Ett index bör väljas, som mest Cant add index with different case/diacritics stripping option Kan inte lägga till index med olika skiftläge / diakritiska strippningsalternativ Default QtWebkit font Standard QtWebkit-teckensnitt Any term Valfri term All terms Alla termer File name Filnamn Query language Frågespråk Value from previous program exit Värde från föregående programavslut Context Kontext Description Beskrivning Shortcut Genväg Default Standard Choose QSS File Välj QSS-fil Can't add index with different case/diacritics stripping option. Kan inte lägga till index med olika inställningar för att ta bort storleks- och diakritiska tecken. Light Ljus Dark Mörk System System - System UIPrefsDialogBase User interface Användargränssnitt Number of entries in a result page Antal poster i resultatlistan Result list font Teckensnitt i resultatlistan Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Öppnar en dialog för att välja teckensnitt i resultatlistan Reset Återställ Resets the result list font to the system default Återställer teckensnittet till systemstandard Auto-start simple search on whitespace entry. Auto-starta enkel sökning på blanksteg. Start with advanced search dialog open. Starta med "Avancerad sökning" öppnad. Start with sort dialog open. Börja med att öppna sorteringsdialogrutan. Search parameters Sökparametrar Stemming language Igenkänt språk Dynamically build abstracts Bygg abstrakta referat dynamiskt Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Vill du försöka bygga sammandrag för resultatlisteposter genom att använda kontexten för frågetermer? Kan vara långsamt med stora dokument. Replace abstracts from documents Ersätt abstrakter från dokument Do we synthetize an abstract even if the document seemed to have one? Vill du synthetisera en abstrakt även om dokumentet verkade ha en? Synthetic abstract size (characters) Syntetisk abstraktstorlek (tecken) Synthetic abstract context words Syntetiska abstrakta kontextord External Indexes Externa index Add index Lägg till index Select the xapiandb directory for the index you want to add, then click Add Index Välj katalogen xapiandb för det index du vill lägga till, klicka sedan på Lägg till index Browse Bläddra &OK &Ok Apply changes Tillämpa ändringar &Cancel &Avbryt Discard changes Ignorera ändringar Result paragraph<br>format string Resultatstycke<br>formatsträng Automatically add phrase to simple searches Lägg automatiskt till fras, vid enkel sökning A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. En sökning efter [rolling stones] (2 termer) kommer att ändras till [rolling eller stones eller (rolling fras 2 stones)]. Detta bör ge högre företräde till de träffar där söktermerna visas exakt som de anges. User preferences Användarens inställningar Use desktop preferences to choose document editor. Använd skrivbordsinställningar för att välja dokumentredigerare. External indexes Externa index Toggle selected Omvänd markering Activate All Aktivera alla Deactivate All Avaktivera alla Remove selected Ta bort markerat Remove from list. This has no effect on the disk index. Ta bort från listan. Detta har ingen effekt på diskindex. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definierar formatet för varje resultatlista stycket. Använd qt html-format och utskrifts-liknande ersättningar:<br>%A Abstrakt<br> %D Datum<br> %I Ikonbildnamn<br> %K Nyckelord (om någon)<br> %L Förhandsgranska och redigera länkar<br> %M Mime-typ<br> %N Resultatnummer<br> %R Relevansprocent<br> %S Storleksinformation<br> %T Titel<br> %U Url<br> Remember sort activation state. Kom ihåg status för sorteringsaktivering. Maximum text size highlighted for preview (megabytes) Maximal textstorlek markerad för förhandsgranskning (megabyte) Texts over this size will not be highlighted in preview (too slow). Texter över denna storlek kommer inte att markeras i förhandsgranskningen (för långsamt). Highlight color for query terms Markera färg för frågetermer Prefer Html to plain text for preview. Föredra HTML framför oformaterad text i förhandsgranskning. If checked, results with the same content under different names will only be shown once. Om markerad, visas träffar med samma innehåll under olika namn, endast en gång. Hide duplicate results. Dölj dubbletträffar. Choose editor applications Välj redigeringsprogram Display category filter as toolbar instead of button panel (needs restart). Visa kategorifilter som verktygsfält istället för knapppanel (kräver omstart). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Orden i listan kommer automatiskt att omvandlas till ext:xxx-satser i frågespråksposten. Query language magic file name suffixes. Frågespråkets magiska filnamnssuffix. Enable Aktivera ViewAction Changing actions with different current values Ändra åtgärder med olika aktuella värden Mime type Mime-typ Command Kommando MIME type MIME-typ Desktop Default Skrivbordsstandard Changing entries with different current values Ändrar poster med olika aktuella värden ViewActionBase File type Typ av fil Action Åtgärd Select one or several file types, then click Change Action to modify the program used to open them Välj en eller flera filtyper, klicka sedan på Ändra åtgärd för att ändra programmet som används för att öppna dem Change Action Ändra åtgärd Close Stäng Native Viewers Inbyggda visare Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Välj en eller flera mime-typer och klicka sedan på "Ändra åtgärd"<br>Du kan också stänga denna dialogruta och kontrollera "Använd skrivbordsinställningar"<br>i huvudpanelen för att ignorera denna lista och använda dina skrivbordsinställningar. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Välj en eller flera mime-typer, använd sedan kontrollerna i den nedre ramen för att ändra hur de bearbetas. Use Desktop preferences by default Använd skrivbordsinställningar som standard Select one or several file types, then use the controls in the frame below to change how they are processed Välj en eller flera filtyper, använd sedan kontrollerna i ramen nedan för att ändra hur de bearbetas Exception to Desktop preferences Undantag från skrivbordsinställningar Action (empty -> recoll default) Åtgärd (tom -> recoll-standard) Apply to current selection Tillämpa på aktuell markering Recoll action: Recoll-åtgärd: current value aktuellt värde Select same Välj samma <b>New Values:</b> <b>Nya värden:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Värdet är en kommandorad som ska köras. Substitutioner: %s: söksträng; %p: sidnummer; <br>%f: dokumentfilnamn. F1 för mer hjälp. Webcache Webcache editor Webbcache-redigerare Search regexp Sök regexp TextLabel Textetikett WebcacheEdit Copy URL Kopiera URL Unknown indexer state. Can't edit webcache file. Okänt indexeringsstatus. Kan inte redigera webbcache-filen. Indexer is running. Can't edit webcache file. Indexeraren körs. Kan inte redigera webbcache-filen. Delete selection Ta bort markerat Webcache was modified, you will need to run the indexer after closing this window. Webbcachen har ändrats, du måste indexera efter att detta fönster stängts. Save to File Spara till fil File creation failed: Filskapande misslyckades: Maximum size %1 (Index config.). Current size %2. Write position %3. Maximal storlek %1 (Indexkonfig.). Aktuell storlek %2. Skrivposition %3. WebcacheModel MIME MIME Url URL Date Datum Size Storlek URL URL WinSchedToolW Error Fel Configuration not initialized Konfigurationen är inte initierad <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Återställa indexering batch schemaläggning</h3><p>Vi använder standard Windows uppgift schemaläggare för detta. Programmet kommer att startas när du klickar på knappen nedan.</p><p>Du kan använda antingen det fullständiga gränssnittet (<i>Skapa uppgift</i> i menyn till höger) eller den förenklade <i>Skapa grundläggande uppgiften</i> guiden. I båda fallen Kopiera/Klistra in sökvägen för kommandofilen som anges nedan som <i>Åtgärden</i> som ska utföras.</p> Command already started Kommandot är redan startat Recoll Batch indexing Återskapa batch-indexering Start Windows Task Scheduler tool Starta schemaläggningsverktyget för Windows Could not create batch file Kunde inte skapa satsfil confgui::ConfBeaglePanelW Steal Beagle indexing queue Stjäla Beagle indexering kö Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle MÅSTE inte köras. Aktiverar bearbetning av beagle kö för att indexera Firefox webbhistorik.<br>(Du bör också installera Firefox Beagle plugin) Web cache directory name Webb cache katalognamn The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Namnet på en katalog där cachen lagras för besökta webbsidor.<br>En icke-absolut sökväg tas i förhållande till konfigurationskatalogen. Max. size for the web cache (MB) Max. storlek för webbcache (MB) Entries will be recycled once the size is reached Inlägg kommer att återvinnas när storleken är nådd Web page store directory name Mappnamn för webbsidelagring The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Namnet på en mapp där kopiorna av besökta webbsidor skall lagras.<br>En icke-absolut sökväg tas i förhållande till konfigurationskatalogen. Max. size for the web store (MB) Max storlek för webblagring (MB) Process the WEB history queue Bearbeta webbhistorikkön Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Aktiverar indexering av sidor besökta med Firefox.<br>(Du behöver installera Recoll-tillägget i Firefox). Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Poster kommer att återvinnas när storleken är uppnådd. <br>Bara ökad storlek är meningsfull, eftersom minskat värde inte kommer att trunkera en befintlig fil (bara slösa med utrymmet). confgui::ConfIndexW Can't write configuration file Kan inte skriva inställningsfil Recoll - Index Settings: Återställa - Index inställningar: confgui::ConfParamFNW Browse Bläddra Choose Välj confgui::ConfParamSLW + + - - Add entry Lägg till post Delete selected entries Ta bort markerade poster ~ ~ Edit selected entries Redigera markerade poster confgui::ConfSearchPanelW Automatic diacritics sensitivity Automatisk känslighet för diakritiska tecken <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. Utlöser automatisk känslighet för diakritiska tecken om söktermen har accenttecken (inte i unac_except_trans). Annars behöver du använda frågespråket och <i>D</i>-modifieraren för att ange diakritiska teckens känslighet. Automatic character case sensitivity Atomatisk skiftlägeskänslighet <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Utlöser automatiskt skiftlägeskänslighet om posten har versaltecken i någon annan än den första positionen. Annars behöver du använda frågespråket och <i>C</i>-modifieraren för att ange skiftlägeskänslighet. Maximum term expansion count Max antal termutvidgningar <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. Max antal utvidgningar för en enskild term (t.ex vid användning av jokertecken). Standardvärdet 10 000 är rimligt och kommer att undvika förfrågningar som verkar frysta, medan motorn går igenom termlistan. Maximum Xapian clauses count Max antal Xapian-satser <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. Max antal elementärsatser vi lägger till i en enda Xapian-sökning. I vissa fall kan resultatet av termutvidgning vara multiplikativ, och vi vill undvika att använda överdrivet mycket minne. Standardvärdet 100 000 bör i de flesta fall, vara både tillräckligt högt och kompatibelt med aktuella typiska maskinvarukonfigurationer. confgui::ConfSubPanelW Global Övergripande Max. compressed file size (KB) Max komprimerad filstorlek (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Det här värdet anger ett tröskelvärde bortom vilket komprimerade filer inte kommer att bearbetas. Ange -1 för ingen begränsning, 0 för ingen dekomprimering någonsin. Max. text file size (MB) Max textfilsstorlek (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Det här värdet anger ett tröskelvärde bortom vilket textfiler inte kommer att behandlas. Ange -1 för ingen begränsning. Detta är för att utesluta monsterloggfiler från indexet. Text file page size (KB) Sidstorlek för textfiler (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Om detta värde anges (inte lika med -1), kommer textfiler att delas upp i bitar av denna storlek, för indexering. Detta kommer att underlätta vid genomsökning av mycket stora textfiler (t.ex. loggfiler). Max. filter exec. time (S) Max. filtret körtid (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Externa filter som fungerar längre än detta kommer att avbrytas. Detta är för det sällsynta fallet (dvs: postscript) där ett dokument kan orsaka ett filter att loopSet till -1 för ingen gräns. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Externa filter som arbetar längre än detta kommer att avbrytas. Detta är för det sällsynta fallet (t.ex. postscript) där ett dokument kan orsaka att ett filter loopar. Ange -1 för ingen begränsning. Only mime types Endast mime-typer An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive En exklusiv lista över indexerade mime-typer.<br>Inget annat kommer att indexeras. Normalt tom och inaktiv. Exclude mime types Undanta mime-typer Mime types not to be indexed Mime-typer som inte skall indexeras Max. filter exec. time (s) Maxtid för filterexekvering. (s) confgui::ConfTabsW Apply Tillämpa confgui::ConfTopPanelW Top directories Toppmappar The list of directories where recursive indexing starts. Default: your home. Listan över mappar där rekursiv indexering börjar. Standard är din hemkatalog. Skipped paths Undantagna sökvägar These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Dessa är namn på kataloger som indexering inte kommer in.<br> Kan innehålla jokertecken. Måste matcha sökvägar som ses av indexeraren (dvs: om topdirs innehåller '/home/me' och '/home' är faktiskt en länk till '/usr/home', en korrekt skippedPath post skulle vara '/home/me/tmp*', inte '/usr/home/me/tmp*') Stemming languages Igenkända språk The languages for which stemming expansion<br>dictionaries will be built. Språken som hindrar expansion<br>ordböcker kommer att byggas. Log file name Loggfilsnamn The file where the messages will be written.<br>Use 'stderr' for terminal output Filen där meddelandena kommer att skrivas.<br>Använd "stderr" för utdata i terminal. Log verbosity level Informationsnivå i loggen This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Detta värde justerar mängden meddelanden,<br>från endast felmeddelanden till en mängd felsökningsdata. Index flush megabytes interval Indexdumpningsintervall i megabyte This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Detta värde justera mängden data som indexeras mellan dumpningar till disk.<br>Detta hjälper till att kontrollera indexerarens minnesanvändning. Standard är 10MB Max disk occupation (%) Max antal diskockupationer (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Detta är den procentandel av diskockupation där indexering kommer att misslyckas och stoppa (för att undvika att fylla din disk).<br>0 betyder ingen gräns (detta är standard). No aspell usage Ingen Aspell-användning Aspell language Aspell-språk The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Språket för aspell ordbok. Detta bör se ut 'sv' eller 'fr' . .<br>Om detta värde inte är inställt, kommer NLS-miljön att användas för att beräkna det, vilket vanligtvis fungerar. o få en uppfattning om vad som installeras på ditt system, typ 'aspell config' och leta efter . vid filer i katalogen 'data-dir' Database directory name Databasens mappnamn The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Namnet på en katalog där indexet ska lagras<br>En icke-absolut sökväg tas i förhållande till konfigurationskatalogen. Standard är 'xapiandb'. Use system's 'file' command Använd systemet's 'fil' kommando Use the system's 'file' command if internal<br>mime type identification fails. Använd systemet's 'fil' kommandot om intern<br>mime-typ-identifiering misslyckas. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Inaktiverar användning av Aspell för att generera stavningsnärmevärde i termutforskarverktyget. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Språket för aspell ordbok. Detta bör se ut 'sv' eller 'fr' . .<br>Om detta värde inte är inställt, kommer NLS-miljön att användas för att beräkna det, vilket vanligtvis fungerar. För att få en uppfattning om vad som installeras på ditt system, skriv 'aspell config' och leta efter . vid filer i katalogen 'data-dir' The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Namnet på en mapp där index lagras.<br>En icke-absolut sökväg tas i förhållande till konfigurationskatalogen. Standard är "xapiandb". Unac exceptions Unac-undantag <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Dessa är undantag från unac-mekanismen som, som standard, tar bort alla diakritiska tecken, och utför vägledande nedbrytning. Du kan åsidosätta vissa ointressanta tecken, beroende på ditt språk, och ange ytterligare nedbrytningar, t.ex. för ligaturer. I varje blankstegsseparerad post är det första tecknet källan och resten är översättningen. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Det här är sökvägsnamn till kataloger som inte kommer att indexeras.<br>Sökvägar kan innehålla jokertecken. Posterna måste matcha de sökvägar som indexeraren ser (exempel: Om överordnade kataloger inkluderar "/home/me" och "/home" egentligen är en länk till "/usr/home", skulle en korrekt undantagen sökväg vara "/home/me/tmp*", inte "/usr/home/me/tmp*") Max disk occupation (%, 0 means no limit) Max diskockupation (%, 0 betyder ingen gräns) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Det här är diskanvändningen i procent - Sammanlagd diskanvändning, inte den storlek där indexering kommer att misslyckas och stoppas.<br>Standardvärdet 0, tar bort all begränsning. uiPrefsDialogBase User preferences Användarens inställningar User interface Användargränssnitt Number of entries in a result page Antal poster i resultatlistan If checked, results with the same content under different names will only be shown once. Om markerad, visas träffar med samma innehåll under olika namn, endast en gång. Hide duplicate results. Dölj dubbletträffar. Highlight color for query terms Markera färg för frågetermer Result list font Teckensnitt i resultatlistan Opens a dialog to select the result list font Öppnar en dialog för att välja teckensnitt i resultatlistan Helvetica-10 Helvetica-10 Resets the result list font to the system default Återställer teckensnittet till systemstandard Reset Återställ Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definierar formatet för varje resultatlista stycket. Använd qt html-format och utskrifts-liknande ersättningar:<br>%A Abstrakt<br> %D Datum<br> %I Ikonbildnamn<br> %K Nyckelord (om någon)<br> %L Förhandsgranska och redigera länkar<br> %M Mime-typ<br> %N Resultatnummer<br> %R Relevansprocent<br> %S Storleksinformation<br> %T Titel<br> %U Url<br> Result paragraph<br>format string Resultatstycke<br>formatsträng Texts over this size will not be highlighted in preview (too slow). Texter över denna storlek kommer inte att markeras i förhandsgranskningen (för långsamt). Maximum text size highlighted for preview (megabytes) Maximal textstorlek markerad för förhandsgranskning (megabyte) Use desktop preferences to choose document editor. Använd skrivbordsinställningar för att välja dokumentredigerare. Choose editor applications Välj redigeringsprogram Display category filter as toolbar instead of button panel (needs restart). Visa kategorifilter som verktygsfält istället för knapppanel (kräver omstart). Auto-start simple search on whitespace entry. Auto-starta enkel sökning på blanksteg. Start with advanced search dialog open. Starta med "Avancerad sökning" öppnad. Start with sort dialog open. Börja med att öppna sorteringsdialogrutan. Remember sort activation state. Kom ihåg status för sorteringsaktivering. Prefer Html to plain text for preview. Föredra HTML framför oformaterad text i förhandsgranskning. Search parameters Sökparametrar Stemming language Igenkänt språk A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. En sökning efter [rolling stones] (2 termer) kommer att ändras till [rolling eller stones eller (rolling fras 2 stones)]. Detta bör ge högre företräde till de träffar där söktermerna visas exakt som de anges. Automatically add phrase to simple searches Lägg automatiskt till fras, vid enkel sökning Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Vill du försöka bygga sammandrag för resultatlisteposter genom att använda kontexten för frågetermer? Kan vara långsamt med stora dokument. Dynamically build abstracts Bygg abstrakta referat dynamiskt Do we synthetize an abstract even if the document seemed to have one? Vill du synthetisera en abstrakt även om dokumentet verkade ha en? Replace abstracts from documents Ersätt abstrakter från dokument Synthetic abstract size (characters) Syntetisk abstraktstorlek (tecken) Synthetic abstract context words Syntetiska abstrakta kontextord The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Orden i listan kommer automatiskt att omvandlas till ext:xxx-satser i frågespråksposten. Query language magic file name suffixes. Frågespråkets magiska filnamnssuffix. Enable Aktivera External Indexes Externa index Toggle selected Omvänd markering Activate All Aktivera alla Deactivate All Avaktivera alla Remove from list. This has no effect on the disk index. Ta bort från listan. Detta har ingen effekt på diskindex. Remove selected Ta bort markerat Click to add another index directory to the list Klicka för att lägga till en annan indexkatalog i listan Add index Lägg till index Apply changes Tillämpa ändringar &OK &Ok Discard changes Ignorera ändringar &Cancel &Avbryt Abstract snippet separator Avgränsare för abstrakta kodavsnitt Use <PRE> tags instead of <BR>to display plain text as html. Använd <PRE> taggar istället för <BR>för att visa oformaterad text som html. Lines in PRE text are not folded. Using BR loses indentation. Linjer i PRE text viks inte. Använda BR förlorar indragning. Style sheet Stilmall Opens a dialog to select the style sheet file Öppnar en dialog för att välja formatmallsfil Choose Välj Resets the style sheet to default Återställer formatmallen till standard Lines in PRE text are not folded. Using BR loses some indentation. Linjer i PRE text viks inte. Använda BR förlorar en del indragning. Use <PRE> tags instead of <BR>to display plain text as html in preview. Använd <PRE> taggar istället för <BR>för att visa oformaterad text som html i förhandsgranskningen. Result List Resultatlista Edit result paragraph format string Redigera formatsträngen för resultatstycket Edit result page html header insert Redigera resultatsidans HTML-sidhuvud Date format (strftime(3)) Datumformat (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Tröskelvärde i procent, över vilket vi inte använder termer inuti autofras. Frekventa termer är ett stort prestandaproblem med fraser. Överhoppade termer förstärkar frasens slack och minskar autofraseffektiviteten. Standardvärdet är 2 (procent). Autophrase term frequency threshold percentage Tröskelvärde i procent, för autofrastermfrekvens Plain text to HTML line style Oformaterad text till HTML-stil Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Rader i PRE-text radbryts inte. Används BR, förloras vissa indrag. PRE + Wrap stil kan vara vad du vill ha. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + wrap Exceptions Undantag Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Mime-typer som inte bör skickas till xdg-open även när "Använd skrivbordsinställningar" är satta.<br> Användbart att skicka sidnummer och söksträngsalternativ till, t.ex. evince. Disable Qt autocompletion in search entry. Inaktivera Qt-autokomplettering i sökposten. Search as you type. Sök som du skriver. Paths translations Sökvägsöversättningar Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Klicka här om du vill lägga till ytterligare en indexkatalog i listan. Du kan välja antingen en Recoll-konfigurationsmapp eller ett Xapian-index. Snippets window CSS file CSS-fil för textavsnittsfönster Opens a dialog to select the Snippets window CSS style sheet file Öppna en dialog för att välja CSS-fil för textavsnittsfönster Resets the Snippets window style Återställ stilen på textavsnittsfönster Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Bestäm om dokumentfilter ska visas som alternativknappar, kombinationsruta i verktygsfältet eller meny. Document filter choice style: Val av dokumentfilterstil: Buttons Panel Knappanel Toolbar Combobox Kombobox i verktygsfältet Menu Meny Show system tray icon. Visa systemfältsikon. Close to tray instead of exiting. Stäng till systemfältet istället för att avsluta. Start with simple search mode Starta i enkelt sökläge Show warning when opening temporary file. Visa varning när tillfällig fil öppnas. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Användarstil att tillämpa på textavsnittsfönstret. <br>Notis: Sidhuvudet för resultatsidan ingår också i textavsnittets fönsterrubrik. Synonyms file Synonymfiler Highlight CSS style for query terms Framhäv CSS-stil för frågetermer Recoll - User Preferences Recoll - Användarinställningar Set path translations for the selected index or for the main one if no selection exists. Ange sökvägsöversättningar för valt index eller för det huvudsakliga om inget markerats. Activate links in preview. Aktivera länkar i förhandsgranskning Make links inside the preview window clickable, and start an external browser when they are clicked. Gör länkar inne i förhandsgranskningsfönstret klickbara, och startar en extern webbläsare. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Frågetermer som framhävs i resultat. <br>Prova något som "color:red;background:yellow" för något mer livfullt än standardblå ... Start search on completer popup activation. Starta sökning vid aktivering av kompletteringspopup. Maximum number of snippets displayed in the snippets window Maximalt antal textavsnitt som visas i textavsnittsfönstret Sort snippets by page number (default: by weight). Sortera textavsnitt efter sidnummer (standard är efter vikt). Suppress all beeps. Undertryck alla pip. Application Qt style sheet Qt-formatmall för programmet Limit the size of the search history. Use 0 to disable, -1 for unlimited. Begränsa sökhistorikens storlek. Använd 0 för att inaktivera, -1 för obegränsat. Maximum size of search history (0: disable, -1: unlimited): Maximal storlek på sökhistoriken (0: inaktiverat, -1: obegränsat): Generate desktop notifications. Generera skrivbordsaviseringar. Misc Diverse Work around QTBUG-78923 by inserting space before anchor text Arbeta runt QTBUG-78923 genom att infoga utrymme före ankartext Display a Snippets link even if the document has no pages (needs restart). Visa en textavsnittslänk även om dokumentet inte har några sidor (omstart krävs). Maximum text size highlighted for preview (kilobytes) Maximal textstorlek som framhävs i förhandsgranskning (kilobyte) Start with simple search mode: Starta i enkelt sökläge: Hide toolbars. Dölj verktygsfält. Hide status bar. Dölj statusfält. Hide Clear and Search buttons. Dölj knapparna Rensa och Sök. Hide menu bar (show button instead). Dölj menyraden (visa knappen istället). Hide simple search type (show in menu only). Dölj enkel söktyp (visa endast i menyn). Shortcuts Genvägar Hide result table header. Dölj resultattabellens rubrik. Show result table row headers. Visa radhuvuden för resultattabellen. Reset shortcuts defaults Återställ standardgenvägar Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Inaktivera Ctrl+[0-9]/[a-z] genvägar för att hoppa till tabellrader. Use F1 to access the manual Använd F1 för att komma åt manualen Hide some user interface elements. Dölj vissa användargränssnittselement. Hide: Dölj: Toolbars Verktygsfält Status bar Statusfält Show button instead. Visa knapp istället. Menu bar Menyraden Show choice in menu only. Visa endast val i menyn. Simple search type Enkel söktyp Clear/Search buttons Rensa/Sök knappar Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Inaktivera genvägarna Ctrl+[0-9]/Shift+[a-z] för att hoppa till tabellrader. None (default) Inget (standard) Uses the default dark mode style sheet Använder standardmörkt läge stilark Dark mode Mörkt läge Choose QSS File Välj QSS-fil To display document text instead of metadata in result table detail area, use: För att visa dokumenttext istället för metadata i detaljområdet i resultat-tabellen, använd: left mouse click vänsterklicka med musen Shift+click Shift+klick Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Öppnar en dialogruta för att välja stilarkiv. <br>Se på /usr/share/recoll/examples/recoll[-dark].qss för ett exempel. Result Table Resultattabell Do not display metadata when hovering over rows. Visa inte metadata när du svävar över rader. Work around Tamil QTBUG-78923 by inserting space before anchor text Arbeta runt Tamil QTBUG-78923 genom att infoga mellanslag före ankartexten The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Felet orsakar att konstiga cirkeltecken visas inuti markerade tamiliska ord. Åtgärden infogar ett extra mellanslagstecken som verkar lösa problemet. Depth of side filter directory tree Djupet av sidofilterkatalogträdet Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Zoomfaktor för användargränssnittet. Användbart om standardinställningen inte är rätt för din skärmupplösning. Display scale (default 1.0): Visningsskala (standard 1.0): Automatic spelling approximation. Automatisk stavning närmar sig. Max spelling distance Maximal stavavstånd Add common spelling approximations for rare terms. Lägg till vanliga stavfel för sällsynta termer. Maximum number of history entries in completer list Max antal historikposter i kompletteringslistan Number of history entries in completer: Antal historikposter i autocompleten: Displays the total number of occurences of the term in the index Visar det totala antalet förekomster av termen i indexet. Show hit counts in completer popup. Visa träffantal i kompletteringspopupen. Prefer HTML to plain text for preview. Föredra HTML framför ren text för förhandsgranskning. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Se Qt QDateTimeEdit-dokumentationen. T.ex. yyyy-MM-dd. Lämna tomt för att använda standardformatet för Qt/System. Side filter dates format (change needs restart) Sidofilterdatumformat (ändring kräver omstart) If set, starting a new instance on the same index will raise an existing one. Om inställd, kommer att starta en ny instans på samma index att höja en befintlig. Single application Enstaka applikation Set to 0 to disable and speed up startup by avoiding tree computation. Sätt till 0 för att inaktivera och påskynda uppstart genom att undvika trädberäkning. The completion only changes the entry when activated. Slutförandet ändrar endast posten när det aktiveras. Completion: no automatic line editing. Slutförande: ingen automatisk radredigering. Interface language (needs restart): Gränsspråk (kräver omstart): Note: most translations are incomplete. Leave empty to use the system environment. Observera: de flesta översättningar är ofullständiga. Lämna tomt för att använda systemmiljön. Preview Förhandsgranska Set to 0 to disable details/summary feature Sätt till 0 för att inaktivera detalj/summeringsfunktionen. Fields display: max field length before using summary: Fältvisning: max fältlängd innan sammanfattning används: Number of lines to be shown over a search term found by preview search. Antal rader som ska visas över en sökterm som hittats av förhandsgranskningssökningen. Search term line offset: Sökterm radförskjutning: Wild card characters *?[] will processed as punctuation instead of being expanded Jokertecken *?[] kommer att behandlas som skiljetecken istället för att expanderas. Ignore wild card characters in ALL terms and ANY terms modes Ignorera jokertecken i ALLA termer och VILKA termer lägen. Color scheme Färgsättning When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. När du visar HTML i mörkt läge, försök att använda en mörk bakgrund (och ljus färg). Detta strider mot många dokument som kommer att åsidosätta vår ljusa inställning med sin egen CSS (mörk) förgrundsfärg, vilket resulterar i ett oläsbart dokument, så det är avstängt som standard. Use dark background when displaying HTML in dark mode. Använd mörk bakgrund när du visar HTML i mörkt läge. recoll-1.43.12/qtgui/i18n/recoll_ko.ts0000644000175000017500000075726615124431112016716 0ustar dockesdockes ActSearchDLG Menu search 메뉴 검색 AdvSearch All clauses 모든 조건 만족 Any clause 하나라도 만족 texts 텍스트들 spreadsheets 스프레트쉬트들 presentations presentations media 미디어 messages messages other 기타 Bad multiplier suffix in size filter 사이즈 필터의 접미사 배수기능 상태 나쁨 text 텍스트 spreadsheet 스프레드쉬트 presentation 프레젠테이션 message 메세지 Advanced Search 고급 검색 History Next History Next History Prev History Prev Load next stored search 다음 저장된 검색 로드 Load previous stored search 이전 저장된 검색 로드 AdvSearchBase Advanced search 고급검색 Restrict file types 파일 형식 제한 Save as default 기본값으로 저장 Searched file types 검색된 파일 형식들 All ----> 모두 ----> Sel -----> 선택 -----> <----- Sel <----- 선택 <----- All <----- 모두 Ignored file types 무시할 파일 형식 Enter top directory for search 검색을 위해 최상위 폴더를 입력하십시오. Browse 탐색 Restrict results to files in subtree: 선택한 폴더의 하위 파일들의 결과들을 제한합니다: Start Search 검색 시작 Search for <br>documents<br>satisfying: 다음을<br>만족: Delete clause 조건 삭제 Add clause 조건 추가 Check this to enable filtering on file types 파일 형식에 대한 필터링을 활성화하려면 이것을 선택하십시오. By categories 카테고리 별로 Check this to use file categories instead of raw mime types MIME 형식 대신 파일 카테고리를 사용하려면 이것을 선택하십시오. Close 닫기 All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. "모든 조건 만족"을 선택하면, 오른쪽에 입력된 모든 조건은 AND로 결합되며, "하나라도 만족"을 선택하면 OR로 결합됩니다.<br>"하나라도", "모두", 그리고 "없음" 유형들은 단순 단어들의 혼합도, 큰 따옴표로 묶은 어구도 받아들일 수 있으며, <br> 입력되지 않은 필드들은 무시됩니다. Invert 역순 Minimum size. You can use k/K,m/M,g/G as multipliers 최소 용량을 지정합니다. k/K, m/M, g/G 단위를 사용할 수 있습니다. Min. Size 최소 용량 Maximum size. You can use k/K,m/M,g/G as multipliers 최대 용량을 지정합니다. k/K, m/M, g/G 단위를 사용할 수 있습니다. Max. Size 최대 용량 Select Select Filter 필터 From 언제부터 To 까지 Check this to enable filtering on dates 날짜 필터링을 활성화하려면 이 옵션을 선택하십시오. Filter dates 날짜 필터 Find 찾기 Check this to enable filtering on sizes 용량을 필터링하려면이 옵션을 선택하십시오. Filter sizes 용량 필터 Filter birth dates 생년월일 필터링 ConfIndexW Can't write configuration file 환경설정 파일을 쓸 수 없습니다 Global parameters 광역 환경설정 Local parameters 지역 환경설정 Search parameters 검색 매개변수들 Top directories 색인할 최상위 폴더 The list of directories where recursive indexing starts. Default: your home. 색인 작성이 시작되는 폴더 목록. 기본값 : home(리눅스). Skipped paths 제외할 폴더 These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') 색인 작업이 실행되지 않게 될 폴더 경로들입니다.<br>경로에는 와일드 카드가 포함될 수 있습니다. 항목들은 색인자가 보는 경로와 일치해야합니다 (예 : 최상위 폴더에 '/home /me'가 포함되어 있고 '/home'이 실제로 '/usr/home'에 대한 링크인 경우 올바른 '건너뛴 경로들' 항목은 '/home/me'입니다. '/usr/home/me/tmp*'가 아닌 /tmp*') Stemming languages 형태소 언어 The languages for which stemming expansion<br>dictionaries will be built. 형태소 확장 사전을 만들 언어가<br>작성됩니다. Log file name 로그 파일 이름 The file where the messages will be written.<br>Use 'stderr' for terminal output 메시지가 기록 될 파일입니다.<br>터미널에 출력하려면 'stderr'을 입력하십시오. Log verbosity level 상세 로그 수준 This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. 이 값은 메시지의 범위를<br>단순 오류에서부터 많은 디버깅 데이터에까지 조정합니다. Index flush megabytes interval 색인 정비 간격(MB) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB 이 값은 색인되는 데이터의 양을 적절한 값으로 조정합니다.<br>색인 작업자가 메모리 사용을 제어하는 데 도움이 됩니다. 기본 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. 색인을 실패시키고 중지시킬 디스크 크기의 백분율입니다.<br>기준은 색인 크기가 아닌 전체 디스크 사용량입니다.<br>기본값인 0은 제한을 두지 않습니다. No aspell usage 철자검색기 사용안함 Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. 용어 탐색기 도구에서 유사한 철자를 발생시키는 철자 사용을 비활성화 합니다. <br> 철자가 없거나 작동하지 않는 경우에 유용합니다. Aspell language 철자검색기 언어 The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. 철자 사전의 언어입니다. 이것은 'en'이나 'fr' 등으로 나타나야 합니다.<br>만약 이 값이 지정되어있지 않다면, NLS 환경설정이 일반적으로 사용되는 값을 찾을 것입니다. 시스템에 무엇이 설치되어 있는지 이해하려면 'aspell config'를 입력하고 'data-dir'디렉토리에서 .dat 파일을 찾으십시오. Database directory name 데이터베이스 폴더 이름 The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. 색인을 저장할 폴더 이름<br>상대 경로일 경우, 환경설정 폴더를 기본으로 합니다. 기본값은 'xapiandb'입니다. Unac exceptions Unac 예외 <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p> 이것은 기본적으로 모든 분음 부호를 제거하고 정식 분해를 수행하는 unac 메커니즘에 대한 예외를 설정합니다. 언어에 따라 일부 문자의 강조를 무시, 추가, 분해를 지정할 수 있습니다(예 : 합자의 경우. 공백으로 구분된 각 항목에서 첫 번째 문자는 원본이고 나머지는 번역입니다). Process the WEB history queue 웹 기록 큐 처리 Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Firefox 방문 페이지 색인 작성을 활성화합니다.<br>(Firefox Recoll 플러그인도 설치필요) Web page store directory name 웹 페이지 저장소 디렉토리 이름 The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. 방문한 웹 페이지의 사본을 저장할 디렉토리의 이름을 지정해줍니다.<br>상대적인 경로를 입력한 경우, 환경설정 폴더를 기준으로 합니다. Max. size for the web store (MB) 웹 저장소의 최대 용량(MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). 용량이 한계에 도달하면 항목들이 재활용됩니다.<br>값을 줄이면 기존 파일이 잘리지 않기 때문에 크기를 늘리는 것만으로도 의미가 있습니다(끝 공간만 낭비됩니다). Automatic diacritics sensitivity 발음구별 부호 자동 감도 <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. 검색어에 악센트 부호가 있는 문자(unac_except_trans에 없는)가 있으면 분음 부호 민감도를 자동으로 조정합니다. 그렇지 않고 분음 부호 민감도를 직접 지정하려면 검색어 언어와 <i>D</i> 수정자를 사용해야합니다. Automatic character case sensitivity 대소문자 자동 구분 <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p> 항목 중 첫 글자 이외에 대문자가 있으면 대소문자 구분을 자동으로 처리합니다. 그렇지 않으면 검색어 언어와 <i>C</i> 수정자를 사용하여 대소문자 구분을 지정해야합니다. Maximum term expansion count 용어 확장 최대값 <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p> 단일 용어의 최대 확장 횟수(예 : 와일드 카드 사용시). 기본값인 10,000은 합리적이며, 엔진이 그 확장된 용어 목록을 처리하는 동안 처리할 수 없는 용어는 피합니다. Maximum Xapian clauses count Xapian의 절 계수의 최대값 <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. 단일 Xapian 검색 요청에 넣을 수 있는 절 숫자의 최대값입니다. 경우에 따라 확장된 용어의 결과가 곱해질 수 있기에 과도한 메모리 사용을 피하려고합니다. 기본값 100 000은 대부분의 경우에 충분하며, 하드웨어 구성과 호환되어야합니다. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... 형태소 확장 사전을 빌드할 언어.<br>가능한 값은 Xapian 형태소 분석기 문서를 참조하십시오. 예: 영어, 프랑스어, 독일어... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. 철자 검색기 사전의 언어입니다. 값은 2 글자 언어 코드입니다 (예 : 'en', 'fr'... <br>이 값을 설정하지 않으면 NLS 환경이 언어 코드를 계산하는 데 사용되며 일반적으로 작동합니다. 시스템에 무엇이 설치되어 있는지 이해하려면 'aspell config'를 입력하고 'data-dir'디렉토리에서 .dat 파일을 찾으십시오. Indexer log file name 색인 로그 파일명 If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) 인덱싱을 중지할 디스크 전체 임계값 백분율<br>(E.g. 90% 로 설정하면 90% 도달시 멈춤, 0 또는 100 은 제한이 없는 것을 의미) Web history 웹 기록 Process the Web history queue 웹 기록 큐 처리하기 (by default, aspell suggests mispellings when a query has no results). 디폴트로, 검색에 대한 결과가 없을 때 aspell 이 올바른 맞춤법을 제시합니다 Page recycle interval 페이지 재활용 간격 <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. 디폴트로, 캐시에는 하나의 URL 인스턴스만 보관됩니다. 여러 인스턴스를 보관하는 빈도를 설정해 이를 변경할 수 있습니다 ('day', 'week', 'month', 'year'). 간격을 늘린다고 기존 항목이 지워지는 것은 아닙니다. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 참고: 최대 크기에 도달하면 이전 페이지가 지워져 새 페이지를 위한 공간을 만듭니다. 현재 크기: %1 Start folders 폴더 시작 The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. 색인할 폴더/디렉토리 목록입니다. 하위 폴더는 재귀적으로 처리됩니다. 기본값: 홈 폴더. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) 색인을 중지하는 디스크 가득 차는 임계치 백분율<br>(예: 90은 90% 가득 찼을 때 중지, 0 또는 100은 제한 없음) Browser add-on download folder 브라우저 애드온 다운로드 폴더 Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) 이것을 설정한 경우에만 "웹 브라우저 추가 기능 설정"에서 "다운로드 하위 디렉토리" 매개변수를 설정하십시오. <br>이 경우에는 디렉토리의 전체 경로여야 합니다 (예: /home/[me]/Downloads/my-subdir) Store some GUI parameters locally to the index 인덱스에 일부 GUI 매개변수를 로컬로 저장합니다. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index <p>GUI 설정은 일반적으로 모든 색인에 대해 유효한 전역 파일에 저장됩니다. 이 매개변수를 설정하면 결과 테이블 설정과 같은 일부 설정이 해당 색인에 특정해집니다. Suspend the real time indexer when running on battery 배터리로 작동 중일 때 실시간 인덱서 일시 중지 The indexer will wait for a return on AC and reexec itself when it happens 색인 작업은 AC에 대한 반환을 기다릴 것이며, 그것이 발생할 때 다시 실행될 것입니다. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. 색인할 폴더/디렉토리 목록은 하위 폴더와 함께 재귀적으로 색인됩니다. '~' 문자는 홈 디렉토리로 확장되며, 이것이 기본 초기 값입니다. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types 특정 MIME만 색인 An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive 여기서 설정된 MIME 유형들만 색인합니다.<br>보통은 비어있음(비활성화). Exclude mime types 제외할 MIME 유형 Mime types not to be indexed 색인처리되지 않는 MIME 유형 Max. compressed file size (KB) 압축된 파일 용량의 최대값(KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. 이 값은 압축 파일이 처리되지 않게 할 임계 값을 설정합니다. 제한이 없으면 -1로, 압축 해제를 하지 않으려면 0으로 설정하십시오. Max. text file size (MB) 텍스트 파일 용량의 최대값(MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. 이 값은 텍스트 파일이 처리되지 않게 할 임계 값을 설정합니다. 제한이 없으면 -1로 설정하십시오. 이것은 색인에서 너무 큰 로그 파일을 제외하기 위한 것입니다. Text file page size (KB) 텍스트 파일 페이지 용량(KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). 이 값을 설정하면(-1이 아닌) 텍스트 파일이 색인을 위해 설정한 크기 단위로 분할됩니다. 이는 매우 큰 텍스트 파일(예 : 로그 파일)을 검색하는 데 도움이 됩니다. Max. filter exec. time (s) 필터 최대 실행시간(초) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. 이 값보다 오래 작동하는 외부 필터는 중단됩니다. 문서가 필터를 무한 반복하게 만들 수 있는 드문 경우에 사용됩니다(예 : 포스트 스크립트). 제한이 없으면 -1로 설정하십시오. Global 광역 ConfigSwitchDLG Switch to other configuration 다른 구성으로 전환 ConfigSwitchW Choose other 다른 것을 선택하세요. Choose configuration directory 구성 디렉토리를 선택하세요. CronToolW Cron Dialog 예약 대화창 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> 일괄 색인 작성 일정(예약-cron:리눅스 프로그램 실행 예약 도구-역자 주) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">각 필드는 한 개의 와일드카드(*), 단일 숫자값, 콤마로 분리된 리스트(1,3,5), 그리고 범위들(1-7)을 포함할 수 있습니다. 필드가 더 일반적으로 사용됩니다. <span style=" font-style:italic;">현재 그대로</span> crontab 파일 내부에서 전체 crontab 구문을 사용할 수 있습니다 (도움말 중 crontab (5) 참조).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />예를 들어, <span style=" font-style:italic;">날짜들 </span> 항목에 <span style=" font-family:'Courier New,courier';">*</span>를 입력하고, <span style=" font-style:italic;">시간</span> 항목에 <span style=" font-family:'Courier New,courier';">12,19</span>를 입력하고, <span style=" font-style:italic;">분</span> 항목에 <span style=" font-family:'Courier New,courier';">15</span>를 입력하면, recollindex(Recoll 색인 작성 프로그램-역자 주)은 매일 오전 12:15와 7:15 PM에 시작될 것입니다.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">일정을 활성화를 너무 자주하는 것보다는, 실시간 색인 작성이 더 효율적입니다.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) 주간 요일 지정 (* 혹은 0-7. 0이나 7은 주일) Hours (* or 0-23) 시간 (* 혹은 0-23) Minutes (0-59) 분 (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">일괄 자동 색인 작성을 중지하려면 <span style=" font-style:italic;">비활성화</span>를 클릭, 활성화 하려면<span style=" font-style:italic;">활성화</span>를 클릭, 아무 것도 변경하지 않으려면 <span style=" font-style:italic;">취소</span>를 클릭하십시오.</p></body></html> Enable 활성화 Disable 비활성화 It seems that manually edited entries exist for recollindex, cannot edit crontab recollindex를 수동으로 편집한 항목이 있으므로 crontab을 편집할 수 없습니다. Error installing cron entry. Bad syntax in fields ? cron 항목을 설치하는 중에 오류가 발생했습니다. 필드에 잘못된 구문이 있습니까? EditDialog Dialog 대화창 EditTrans Source path 소스 경로 Local path 로컬 경로 Config error 설정 오류 Original path 원본 경로 Path in index 인덱스 경로 Translated path 번역된 경로 EditTransBase Path Translations 경로 변경 Setting path translations for 다음 파일을 위한 경로를 변경해주십시오 : Select one or several file types, then use the controls in the frame below to change how they are processed 하나 혹은 복수의 파일 형식을 선택한 다음, 아래 프레임의 컨트롤을 사용하여 처리 방식을 변경하십시오. Add 추가 Delete 삭제 Cancel 취소 Save 저장 FirstIdxDialog First indexing setup 최초 색인 작성 설정 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">이 구성에 대한 색인이 존재하지 않습니다.</span><br /><br />단지 적절한 기본값들로 구성하여 HOME 디렉토리를 색인하고자 한다면, <span style=" font-style:italic;">지금 색인 시작</span> 버튼을 누르십시오. 나중에 세부 항목을 조정할 수 있습니다. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">더 많은 제어가 필요한 경우 다음 링크로 따라가서 색인 구성 및 일정을 조정하십시오.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">이 도구들은 추후에 <span style=" font-style:italic;">환경설정</span> 메뉴를 통해서 접근할 수 있습니다.</p></body></html> Indexing configuration 색인 작성 구성 This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. 이것은 색인을 생성하려는 디렉토리, 제외할 파일 경로 또는 이름, 기본 문자 집합 등과 같은 기타 매개 변수를 조정하도록 도와줍니다. Indexing schedule 색인 작성 일정 This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). 이것은 일괄 혹은 실시간 색인 작성 중 선택을 돕습니다. 그리고 일괄 자동 색인 작성 일정을 설정할 수 있습니다 (cron 사용). Start indexing now 지금 색인 작성 시작 FragButs %1 not found. %1을 찾을 수 없습니다. %1: %2 %1: %2 Fragment Buttons Fragment Buttons Query Fragments 쿼리 프래그먼트 IdxSchedW Index scheduling setup 색인 예약 설정 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> 색인 작성은 실시간으로 실행되거나, 파일이 변경될 때마다 실행되거나, 불규칙한 간격으로 실행될 수 있습니다. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">설명서를 읽으면 접근 방식을 결정하는 데 도움이 될 수 있습니다 (설명서를 보시려면 F1을 누르세요-영문판만 지원). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">이 도구는 일괄 자동 색인 작성을 예약하거나, 로그인 할 때마다 실시간 색인 작성을 시작하는 것을 설정하도록 도와줍니다. 참고로, 일괄과 실시간 색인 작성을 함께 설정 가능하지만 일반적인 경우에서는 불필요합니다. </p></body></html> Cron scheduling Cron 예약 The tool will let you decide at what time indexing should run and will install a crontab entry. 이 도구는 언제 색인을 작성할지 결정하도록 돕고, crontab 내 항목을 설치합니다. Real time indexing start up 실시간 색인 작성 시작 Decide if real time indexing will be started when you log in (only for the default index). 로그인 할 때 실시간 색인 작성을 시작할 것인지 결정합니다(기본 색인에만 해당). ListDialog Dialog 대화창 GroupBox 그룹박스 Main No db directory in configuration 설정에 DB 디렉토리가 없습니다. Could not open database in Could not open database in . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. Configuration problem (dynconf Configuration problem (dynconf "history" file is damaged or un(read)writeable, please check or remove it: "history" file is damaged or un(read)writeable, please check or remove it: "history" file is damaged, please check or remove it: "history" 파일이 손상되었습니다. 점검 혹은 삭제해주세요. Needs "Show system tray icon" to be set in preferences! 환경 설정에서 "시스템 트레이 아이콘 표시"를 설정해야 합니다! PTransEdit Path in index 인덱스 경로 Translated path 번역된 경로 Config error 설정 오류 Original path 원본 경로 Local path 로컬 경로 PTransEditBase Path Translations 경로 변경 Select one or several file types, then use the controls in the frame below to change how they are processed 하나 혹은 복수의 파일 형식을 선택한 다음, 아래 프레임의 컨트롤을 사용하여 처리 방식을 변경하십시오. Add 추가 Delete 삭제 Cancel 취소 Save 저장 Preview &Search for: 검색(&S) : &Next 다음(&N) &Previous 이전(&P) Match &Case 대소문자 일치(&C) Clear 검색어 삭제 Creating preview text 미리보기 텍스트를 만드는 중입니다. Loading preview text into editor 편집기에 미리보기 텍스트를 불러오는 중입니다. Cannot create temporary directory Cannot create temporary directory Cancel 취소 Close Tab Close Tab Missing helper program: 도우미 프로그램이 없습니다 : Can't turn doc into internal representation for 이 프로그램 내에서 표시할 수 없는 문서 : Cannot create temporary directory: Cannot create temporary directory: Error while loading file Error while loading file Form 양식 Tab 1 탭 1 Open 열기 Canceled 취소됨 Error loading the document: file missing. 문서 로딩 중 오류 : 파일이 없습니다. Error loading the document: no permission. 문서 로딩 중 오류 : 권한이 없습니다. Error loading: backend not configured. 로딩 오류 : 백앤드가 구성되지 않았습니다. Error loading the document: other handler error<br>Maybe the application is locking the file ? 문서 로딩 오류 : 다른 핸들러 오류<br> 프로그램이 파일을 잠그고 있지는 않습니까? Error loading the document: other handler error. 문서 로딩 오류 : 다른 핸들러 오류 <br>Attempting to display from stored text. <br>저장되었던 텍스트 표시를 시도 중 Could not fetch stored text 저장된 텍스트를 가져올 수 없습니다. Previous result document 이전 결과 문서 Next result document 다음 결과 문서 Preview Window 미리보기 화면 Close Window Close Window Next doc in tab Next doc in tab Previous doc in tab Previous doc in tab Close tab 탭 닫기 Print tab Print tab Close preview window 미리보기 화면 닫기 Show next result 다음 결과 보기 Show previous result 이전 결과 보기 Print 인쇄 PreviewTextEdit Show fields 필드 보이기 Show main text 메인 텍스트 보이기 Print 인쇄 Print Current Preview 현재 미리보기를 인쇄 Show image 이미지 보이기 Select All 모두 선택 Copy 복사 Save document to file 문서를 파일로 저장 Fold lines 줄 내리기 Preserve indentation 들여쓰기 유지 Open document 문서 열기 Reload as Plain Text 일반 텍스트로 다시 불러오기 Reload as HTML HTML로 다시로드 QObject Global parameters 광역 환경설정 Local parameters 지역 환경설정 <b>Customised subtrees <b>폴더별 환경설정 The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. 색인 구조 중 하위 디렉터리 목록을 선택하십시오.<br>일부 환경 설정는 재정의해야합니다.<br>기본값 : 비어 있음 <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. Skipped names 생략할 이름 These are patterns for file or directory names which should not be indexed. 파일 또는 디렉토리 이름 중 색인 작성해서는 안되는 패턴을 설정합니다. Default character set Default character set This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Follow symbolic links 심볼릭 링크 따라가기 Follow symbolic links while indexing. The default is no, to avoid duplicate indexing 이중 색인 작성을 피하기 위해서, 심볼릭 링크의 본래 경로로 색인합니다. 기본값은 no. Index all file names 모든 파일 이름을 색인하기 Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true 내용들을 파악할 수 없거나 처리할 수 없는 파일들(확장자가 없거나 지원하지 않는 MIME 형식)의 이름들도 색인합니다. 기본값: true Beagle web history Beagle web history Search parameters 매개변수들을 검색 Web history 웹 기록 Default<br>character set 기본값<br>문자 설정 Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. 문자 설정은 내부적으로 문자를 인식할 수 없는 파일들을 읽을 때 사용됩니다. 예, 순수한 텍스트 파일들.<br> 기본값은 비어있으며, NLS 환경으로부터 받은 값은 사용됩니다. Ignored endings 무시할 확장자 These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). 파일 이름만 색인하고, 파일 내용은 색인하지 않습니다. (지원 안되는 MIME 유형, 압축 내 파일, 색인할 컨텐츠 없음) <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>위에 추가할 폴더는 '광역 환경설정'에서 정해준 '색인할 최상위 폴더'의 하위 폴더이어야 합니다. 위 목록 상자에서 아무것도 추가하지 않았거나, 빈 줄을 선택한다면, 아래의 설정들은 최상위 레벨에서 설정됩니다. 추가한 하위 폴더를 선택하였다면, 아래 설정한 내용은 해당 폴더에만 적용됩니다. +/- 버튼을 클릭하여 폴더들을 추가하거나 지울 수 있습니다.</i> These are patterns for file or directory names which should not be indexed. 이것은 색인되지 말아야 하는 파일 또는 디렉토리 이름에 대한 패턴입니다. QWidget Create or choose save directory 저장할 폴더를 만들거나 선택하십시오. Choose exactly one directory 한 개의 폴더를 선택하십시오. Could not read directory: 폴더를 읽을 수 없습니다: Unexpected file name collision, cancelling. 예기치 않은 파일 이름 충돌 발생, 취소 중. Cannot extract document: 문서를 추출할 수 없습니다. &Preview 미리보기(&P) &Open 열기(&O) Open With 함께 열기 Run Script 스크립트 실행 Copy &File Name 파일 이름 복사(&F) Copy &URL 웹 주소 복사(&U) &Write to File 파일에 기록(&W) Save selection to files 선택한 것을 파일들에 저장 Preview P&arent document/folder 상위 문서/폴더 미리보기(&a) &Open Parent document/folder 상위 문서/폴더 열기(&O) Find &similar documents 유사한 문서들 검색(&S) Open &Snippets window 문서별 검색창 열기(&S) Show subdocuments / attachments 하위 문서들/첨부내용들 보기 &Open Parent document &Open Parent document &Open Parent Folder &Open Parent Folder Copy Text 텍스트 복사 Copy &File Path 파일 경로 복사 Copy File Name 파일 이름 복사 QxtConfirmationMessage Do not show again. 이제 보지 않겠습니다. RTIToolW Real time indexing automatic start 실시간 자동 색인 작성 시작 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> 색인 작성은 데몬으로서 실행할 수 있으며, 파일이 변경되었을 때, 혹은 실시간으로 작동하도록 설정할 수 있습니다. 항상 색인을 최신상태로 유지할 수 있지만, 시스템 자원은 계속해서 사용됩니다.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. 색인 작성을 데스크톱 세션과 함께 데몬으로 실행합니다. Also start indexing daemon right now. 또한 색인 작성 데몬을 지금 바로 시작합니다. Replacing: 교체: Replacing file 교체 파일 Can't create: 만들 수 없습니다: Warning 경고 Could not execute recollindex recollindex를 실행할 수 없습니다. Deleting: 삭제 중 : Deleting file 파일 삭제 중 Removing autostart 자동실행 제거 중 Autostart file deleted. Kill current process too ? 자동실행 파일을 삭제하였습니다. 현재 프로세스도 종료할까요? Configuration name 구성 이름 Short alphanumeric nickname for this config 이 구성에 대한 짧은 알파벳 닉네임 Could not find 다음 텍스트 조각을 한국어로 번역하십시오: Could not find RclCompleterModel Hits 검색 결과 Hits RclMain About Recoll Recoll에 대하여 Executing: [ 실행중: [ Cannot retrieve document info from database 데이터베이스에서 문서 정보를 검색할 수 없습니다. Warning 경고 Can't create preview window 미리보기 창을 만들 수 없습니다. Query results 검색 결과 Document history 문서 기록 History data 데이터 역사 Indexing in progress: 색인 작성이 진행 중입니다: Files Files Purge 완전삭제 Stemdb 형태소 DB Closing 종료하는 중 Unknown 알려지지 않은 This search is not active any more 이 검색은 더 이상 유효하지 않습니다. Can't start query: Can't start query: Bad viewer command line for %1: [%2] Please check the mimeconf file Bad viewer command line for %1: [%2] Please check the mimeconf file Cannot extract document or create temporary file 문서를 추출하거나 임시 파일을 만들 수 없습니다. (no stemming) (형태소 없음) (all languages) (모든 언어들) error retrieving stemming languages 언어 형태소 분석 오류 Update &Index 색인 업데이트(&I) Indexing interrupted 색인 작업 멈춤 Stop &Indexing 색인 작성 중지(&I) All 모두 media 미디어 message 메세지 other 기타 presentation 프레젠테이션 spreadsheet 스프레드쉬트 text 텍스트 sorted 정렬된 filtered 필터된 External applications/commands needed and not found for indexing your file types: External applications/commands needed and not found for indexing your file types: No helpers found missing 누락된 도우미 프로그램이 없습니다. Missing helper programs 누락된 도우미 프로그램들 Save file dialog Save file dialog Choose a file name to save under Choose a file name to save under Document category filter Document category filter No external viewer configured for mime type [ 다음 MIME 형식에 대해 구성된 외부 뷰어가 없습니다: [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? %1: %2를 위한 뷰어(mimeview 파일에 기록된)를 찾을 수 없습니다. 환경설정 대화창을 시작하기 원하십니까? Can't access file: 파일 접근 불가 Can't uncompress file: 압축해제 할 수 없는 파일: Save file 파일 저장 Result count (est.) 결과 목록 갯수 (추정값) Query details 쿼리 상세보기 Could not open external index. Db not open. Check external index list. 외부 색인을 열 수 없습니다. DB를 열 수 없습니다. 외부 색인 목록을 확인하십시오. No results found 아무 결과가 없습니다. None 없음 Updating 업데이트 중 Done 완료 Monitor 모니터 Indexing failed 색인 작성 실패 The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone 이 인터페이스에서 현재 색인 작성 프로세스가 시작되지 않았습니다. 확인을 클릭하여 종료하거나, 취소하십시오. Erasing index 색인 삭제 Reset the index and start from scratch ? 색인을 재설정하고 다시 작성하시겠습니까? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program 검색어 요청이 진행중입니다.<br>취소되면 색인 작업 보관용량의 제한 때문에<br>프로그램이 종료될 것입니다. Error 오류 Index not open Index not open Index query error 색인 요청 오류 Indexed Mime Types Indexed Mime Types Content has been indexed for these MIME types: 다음 MIME 유형 컨텐츠가 색인되었습니다: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Can't update index: indexer running 색인을 업데이트 할 수 없습니다: 색인 작성자가 실행중입니다. Indexed MIME Types 색인된 MIME 목록 Bad viewer command line for %1: [%2] Please check the mimeview file %1: [%2]에 대한 뷰어 명령줄이 잘못되었습니다. mimeview 파일을 확인하십시오. Viewer command line for %1 specifies both file and parent file value: unsupported %1에 대한 뷰어 명령줄은 파일 및 상위 파일 값을 모두 지정합니다: 지원되지 않음 Cannot find parent document 상위 문서를 찾을 수 없습니다. Indexing did not run yet Indexing did not run yet External applications/commands needed for your file types and not found, as stored by the last indexing pass in 최근 색인 처리가 되어 저장된 일부 파일 유형에 외부(도우미) 프로그램들/명령들이 필요하지만, 찾을 수 없습니다. Index not up to date for this file. Refusing to risk showing the wrong entry. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Indexer running so things should improve when it's done Indexer running so things should improve when it's done Sub-documents and attachments 하위 문서들과 첨부 문서들 Document filter 문서 필터 Index not up to date for this file. Refusing to risk showing the wrong entry. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. The indexer is running so things should improve when it's done. 색인 작성자가 실행 중이므로, 작업이 완료되면 결과가 개선될 것입니다. The document belongs to an external indexwhich I can't update. The document belongs to an external indexwhich I can't update. Click Cancel to return to the list. Click Ignore to show the preview anyway. Click Cancel to return to the list. Click Ignore to show the preview anyway. Duplicate documents 문서들 복제하기 These Urls ( | ipath) share the same content: 이 웹 주소들( | ipath)는 같은 내용을 공유합니다: Bad desktop app spec for %1: [%2] Please check the desktop file %1: [%2]에 지정된 데스크톱 프로그램이 올바르지 않습니다. 데스크톱 파일을 확인하십시오. Bad paths 옳지 않은 경로들 Bad paths in configuration file: Bad paths in configuration file: Selection patterns need topdir 패턴 선택은 최상위 폴더를 필요로 합니다. Selection patterns can only be used with a start directory 패턴 선택은 오직 시작 폴더에서만 사용할 수 있습니다. No search 검색 안함 No preserved previous search 이전 검색을 보존하지 않음 Choose file to save 저장할 파일을 선택하세요. Saved Queries (*.rclq) 저장된 쿼리들 (*.rclq) Write failed 쓰기 실패 Could not write to file 파일을 기록할 수 없습니다. Read failed 읽기 실패 Could not open file: 파일을 열 수 없습니다: Load error 불러오기 오류 Could not load saved query 저장된 쿼리들을 불러올 수 없습니다. Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. 임시 복사본을 여는 중입니다. 다른 곳에 저장하지 않으면<br/>변경내용이 손실됩니다. Do not show this warning next time (use GUI preferences to restore). 이 경고를 다음부터 띄우지 않습니다(GUI 설정에서 변경할 수 있습니다). Disabled because the real time indexer was not compiled in. 비활성화. 실시간 색인 기록자가 컴파일되지 않음. This configuration tool only works for the main index. 이 설정 도구는 오직 주 색인에서만 작동합니다. The current indexing process was not started from this interface, can't kill it The current indexing process was not started from this interface, can't kill it The document belongs to an external index which I can't update. 그 문서는 업데이트 할 수 없는 외부 색인에 속해있습니다. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Index scheduling 색인 예약 Sorry, not available under Windows for now, use the File menu entries to update the index 죄송합니다, 지금 윈도우에서는 지원되지 않습니다. 색인을 업데이트 하려면 '파일' 메뉴를 사용하십시오. Can't set synonyms file (parse error?) 동의어 파일을 설정할 수 없습니다(구문 분석 오류?). Index locked 잠긴 색인 Unknown indexer state. Can't access webcache file. 인식할 수 없는 색인 작성기 상태. 웹 캐시 파일에 접근할 수 없습니다. Indexer is running. Can't access webcache file. 색인 작성이 진행되고 있습니다. 웹 캐시 파일에 접근할 수 없습니다. with additional message: 부가 메세지 : Non-fatal indexing message: 치명적이지 않은 색인 작성 메세지: Types list empty: maybe wait for indexing to progress? 형식 리스트가 비어있습니다: 색인 작성이 완료될 때까지 기다려주십시오. Viewer command line for %1 specifies parent file but URL is http[s]: unsupported %1를 위한 뷰어 명령줄은 상위 파일 특정짓지만, http[s]는 지원되지 않습니다. Tools 도구 Results 검색 결과 (%d documents/%d files/%d errors/%d total files) (%d documents/%d files/%d errors/%d total files) (%d documents/%d files/%d errors) (%d documents/%d files/%d errors) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): 비어있거나 존재하지 않는 경로가 환경설정 파일에 있습니다. 그래도 색인 작성을 시작하려면 OK를 클릭하십시오(비어있는 데이터는 인덱스에서 지워지지 않습니다). Indexing done 색인 작성 완료 Can't update index: internal error 색인을 업데이트 할 수 없습니다: 내부 오류 Index not up to date for this file.<br> 이 파일에 대해 색인이 업데이트 되지 않았습니다. <em>Also, it seems that the last index update for the file failed.</em><br/> <em>또한, 최근 그 파일에 대한 색인 업데이트가 실패한 것으로 보입니다.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> OK를 클릭하여 이 파일에 대한 색인 업데이트를 시도하십시오. 검색은 색인 작성이 끝난 후에 다시 해야할 것입니다. Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> 목록으로 돌아가려면 'Cancel'을 클릭하십시오.<br>그래도 미리보기를 표시하려면 'Ignore'을 클릭하십시오(이 세션을 기억하십시오). 이것은 잘못된 항목을 보여줄 위험이 있습니다.<br/> documents 문서들 document 문서 files 파일들 file 파일 errors 오류들 error 오류 total files) 파일 총계) No information: initial indexing not yet performed. 정보가 없습니다: 색인 작성이 한 번도 진행되지 않았습니다. Batch scheduling 일괄 작업 예약 The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. 이 도구를 사용하면 색인 작성 시간을 결정할 수 있습니다. Windows 작업 스케줄러를 사용합니다. Confirm 승인 Erasing simple and advanced search history lists, please click Ok to confirm 단순, 혹은 고급 검색 기록들을 지우려면, 확인을 클릭하여 승인하십시오. Could not open/create file 파일 열기/만들기 불가 F&ilter 필터(&i) Could not start recollindex (temp file error) Could not start recollindex (temp file error) Could not read: Could not read: This will replace the current contents of the result list header string and GUI qss file name. Continue ? This will replace the current contents of the result list header string and GUI qss file name. Continue ? You will need to run a query to complete the display change. You will need to run a query to complete the display change. Simple search type Simple search type Any term 하나라도 포함 All terms 모두 포함 File name 파일 이름 Query language 쿼리 언어 Stemming language 형태소 언어 Main Window 메인 화면 Focus to Search Focus to Search Focus to Search, alt. Focus to Search, alt. Clear Search Clear Search Focus to Result Table Focus to Result Table Clear search 검색 화면 지우기 Move keyboard focus to search entry 키보드 포커스를 검색창으로 이동 Move keyboard focus to search, alt. 키보드 포커스를 검색창으로 이동, 표식 표시 아닐때. Toggle tabular display 표식 표시 전환 Move keyboard focus to table 키보드 포커스를 테이블로 이동 Flushing 플러싱 Show menu search dialog 메뉴 검색 대화 상자 표시 Duplicates 중복된 항목 Filter directories 디렉토리 필터 Main index open error: 주 색인 열기 오류: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. 색인이 손상되었을 수 있습니다. xapian-check를 실행하거나 색인을 다시 빌드해 보세요. This search is not active anymore 이 검색은 더 이상 활성화되지 않았습니다. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported %1에 대한 뷰어 명령줄이 부모 파일을 지정하지만 URL이 file://이 아닙니다 : 지원되지 않음 The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? %1에 대해 mimeview에서 지정된 뷰어 %2을(를) 찾을 수 없습니다. 환경 설정 대화 상자를 시작하시겠습니까? Show advanced search dialog 고급 검색 대화 상자 표시 with additional message: RclMainBase Previous page 이전 페이지 Next page 다음 페이지 &File 파일(&F) E&xit 종료(&x) &Tools 도구(&T) &Help 도움말(&H) &Preferences 환경설정(&P) Search tools Search tools Result list 결과 목록 &About Recoll Recoll에 대하여(&A) Document &History 문서 기록(&H) Document History 문서 기록 &Advanced Search 고급검색(&A) Advanced/complex Search 고급/복합 검색 &Sort parameters 매개변수 정렬(&S) Sort parameters 매개변수 정렬 Next page of results 다음 페이지 결과들 Previous page of results 검색 결과의 이전 페이지 &Query configuration &Query configuration &User manual (영어)사용자 메뉴얼(&U) Recoll Recoll Ctrl+Q Ctrl+Q Update &index 색인 업데이트(&i) Term &explorer 용어 탐색기(&e) Term explorer tool 용어 탐색기 도구 External index dialog 외부 색인 대화창 &Erase document history 문서 기록 삭제(&E) First page 첫 페이지 Go to first page of results 검색결과의 첫 페이지로 가기 &Indexing configuration &색인 작성 구성 All 모두 &Show missing helpers &Show missing helpers PgDown 페이지 다운 Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp 페이지 업 &Full Screen 전체화면(&F) F11 F11 Full Screen 전체화면 &Erase search history 검색 기록 삭제(&E) sortByDateAsc sortByDateAsc Sort by dates from oldest to newest 날짜 오름차순 정렬 sortByDateDesc sortByDateDesc Sort by dates from newest to oldest 날짜 내림차순 정렬 Show Query Details 쿼리 상세보기 Show results as table Show results as table &Rebuild index 색인 재구축(&R) &Show indexed types &Show indexed types Shift+PgUp Shift+페이지 업 &Indexing schedule &색인 작성 일정 E&xternal index dialog 외부 색인 대화창(&E) &Index configuration 색인 구성(&I) &GUI configuration GUI 환경설정(&G) &Results 검색 결과(&R) Sort by date, oldest first 날짜 오름차순 정렬 Sort by date, newest first 날짜 내림차순 정렬 Show as table 표 형식으로 보여주기 Show results in a spreadsheet-like table 표 형식으로 검색 결과들을 보여주기 Save as CSV (spreadsheet) file CSV (스프레드쉬트) 파일로 저장 Saves the result into a file which you can load in a spreadsheet 검색 결과를 읽어올 수 있는 스프레드쉬트 파일로 저장합니다. Next Page 다음 페이지 Previous Page 이전 페이지 First Page 첫 페이지 Query Fragments 쿼리 프래그먼트 With failed files retrying 파일들 재시도 실패 Next update will retry previously failed files 이전에 실패한 파일들을 다음 업데이트 시 재시도 Save last query 최근 검색어 저장 Load saved query 저장된 검색어 불러오기 Special Indexing 특별한 색인 Indexing with special options 특별한 옵션과 함께 색인 작성 Indexing &schedule 색인 작성 예약(&s) Enable synonyms 동의어들 활성화 &View 보기(&V) Missing &helpers 누락된 도우미 프로그램들(&h) Indexed &MIME types 색인된 MIME 유형들(&M) Index &statistics 색인 현황(&s) Webcache Editor 웹 캐시 편집기 Trigger incremental pass 증가분 패스 시도 E&xport simple search history 단순 검색어 기록 내보내기(&x) Use default dark mode Use default dark mode Dark mode Dark mode &Query 쿼리(&Q) Increase results text font size 결과 화면 글꼴 키우기 Increase Font Size 글꼴 크기 증가 Decrease results text font size 결과 화면 글꼴 줄이기 Decrease Font Size 글꼴 크기 줄이기 Start real time indexer 실시간 인덱서 시작 Query Language Filters 쿼리 언어 필터 Filter dates 날짜 필터 Assisted complex search 보조 복잡한 검색 Filter birth dates 생년월일 필터링 Switch Configuration... 스위치 구성... Choose another configuration to run on, replacing this process 이 프로세스를 대체할 다른 구성을 선택하여 실행할 수 있습니다. &User manual (local, one HTML page) 사용자 매뉴얼 (로컬, 하나의 HTML 페이지) &Online manual (Recoll Web site) 온라인 매뉴얼 (Recoll 웹 사이트) Path translations 경로 번역 With failed files retrying RclTrayIcon Restore 복구 Quit 종료 RecollModel Abstract 발췌 Author 저자 Document size 문서 크기 Document date 문서 날짜 File size 파일 크기 File name 파일 이름 File date 파일 날짜 Ipath I경로 Keywords 키워드들 Mime type Mime type Original character set 본래 문자 집합 Relevancy rating 관련성 등급 Title 제목 URL 웹 주소 Mtime M시간 Date 날짜 Date and time 날짜와 시간 MIME type MIME 유형 Can't sort by inverse relevance 관련성 역순으로 정렬할 수 없습니다. ResList Result list 결과 목록 Unavailable document 사용할 수 없는 문서 Previous 이전 Next 다음 <p><b>No results found</b><br> <p><b>아무 결과도 없습니다</b><br> &Preview 미리보기(&P) Copy &URL 웹 주소 복사(&U) Find &similar documents 유사한 문서들 검색(&S) Query details 쿼리 상세보기 (show query) (쿼리 보기) Copy &File Name 파일 이름 복사(&F) filtered 필터된 sorted 정렬된 Document history 문서 기록 Preview 미리보기 Open 열기 <p><i>Alternate spellings (accents suppressed): </i> <p><i>대체 철자들 (엑센트 무시): </i> &Write to File 파일에 기록(&W) Preview P&arent document/folder 상위 문서/폴더 미리보기(&a) &Open Parent document/folder 상위 문서/폴더 열기(&O) &Open 열기(&O) Documents 문서 번호 out of at least , 총 갯수는 최소 for <p><i>Alternate spellings: </i> <p><i>대체 철자들: </i> Open &Snippets window 문서별 검색창 열기(&S) Duplicate documents 문서들 복제하기 These Urls ( | ipath) share the same content: 이 웹 주소들( | ipath)는 같은 내용을 공유합니다: Result count (est.) 결과 계수 (추정값) Snippets 문서별 검색창 This spelling guess was added to the search: 이 철자 추측이 검색에 추가되었습니다: These spelling guesses were added to the search: 검색에 이 철자 추측이 추가되었습니다. ResTable &Reset sort 정렬 초기화(&R) &Delete column 줄 삭제(&D) Add " Add " " column " column Save table to CSV file 표를 CSV 파일로 저장 Can't open/create file: 파일을 열거나 만들 수 없습니다: &Preview 미리보기(&P) &Open 열기(&O) Copy &File Name 파일 이름 복사(&F) Copy &URL 웹 주소 복사(&U) &Write to File 파일에 기록(&W) Find &similar documents 유사한 문서들 검색(&S) Preview P&arent document/folder 상위 문서/폴더 미리보기(&a) &Open Parent document/folder 상위 문서/폴더 열기(&O) &Save as CSV CSV로 저장(&S) Add "%1" column "%1"줄 추가 Result Table 결과 테이블 Open 열기 Open and Quit Open and Quit Preview 미리보기 Show Snippets Show Snippets Open current result document 현재 결과 문서 열기 Open current result and quit 현재 결과 문서 열고 종료 Show snippets 부분 발췌 보기 Show header 헤더 보이기 Show vertical header 수직 헤더 보이기 Copy current result text to clipboard 현재 결과 텍스트를 클립보드에 복사하기 Use Shift+click to display the text instead. 텍스트 검색 GUI에서 다음 텍스트 조각을 한국어로 번역하십시오. 텍스트 조각: Shift+클릭을 사용하여 텍스트를 표시합니다. %1 bytes copied to clipboard 클립보드에 %1 바이트가 복사되었습니다. Copy result text and quit 결과 텍스트를 복사하고 종료합니다. ResTableDetailArea &Preview 미리보기(&P) &Open 열기(&O) Copy &File Name 파일 이름 복사(&F) Copy &URL 웹 주소 복사(&U) &Write to File 파일에 기록(&W) Find &similar documents 유사한 문서들 검색(&S) Preview P&arent document/folder 상위 문서/폴더 미리보기(&a) &Open Parent document/folder 상위 문서/폴더 열기(&O) ResultPopup &Preview 미리보기(&P) &Open 열기(&O) Copy &File Name 파일 이름 복사(&F) Copy &URL 웹 주소 복사(&U) &Write to File 파일에 기록(&W) Save selection to files 선택한 것을 파일들에 저장 Preview P&arent document/folder 상위 문서/폴더 미리보기(&a) &Open Parent document/folder 상위 문서/폴더 열기(&O) Find &similar documents 유사한 문서들 검색(&S) Open &Snippets window 문서별 검색창 열기(&S) Show subdocuments / attachments 하위 문서들/첨부내용들 보기 Open With 함께 열기 Run Script 스크립트 실행 SSearch Any term 하나라도 포함 All terms 모두 포함 File name 파일 이름 Completions Completions Select an item: Select an item: Too many completions Too many completions Query language 쿼리 언어 Bad query string 옳지 않은 검색어 명령 문자열 Out of memory 메모리 초과 Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter file name wildcard expression. 파일 이름 와일드 카드 표현식을 입력하십시오. Enter search terms here. Type ESC SPC for completions of current term. Enter search terms here. Type ESC SPC for completions of current term. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. 쿼리 언어 표현식을 입력하십시오:<br> <i>용어1 용어2</i> : 어느 곳에 있든 '용어1'과 '용어2'.<br> <i>필드:용어1</i> : '용어1'은 '필드'필드에 있음.<br> 일반적인 필드 이름/동음어들:<br> 제목/주제/표제, 저자/출처, 수취인/발송지, 파일이름, 그 외.<br> 유사 필드: 폴더, MIME/확장자, 형식/rclcat, 날짜, 크기.<br> 두 날짜 간격 예제들: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>용어1 용어2 OR 용어3</i> : 용어1 AND (용어2 OR 용어3).<br> 이것들을 명확하게 만들기 위해 매개변수를 사용할 수 있습니다.<br> <i>"용어1 용어2"</i> : 어구 (정확히 발생해야 합니다). 가능한 수정자:<br> <i>"용어1 용어2"p</i> : 기본 거리를 사용한 정렬되지 않은 근접 검색<br> 결과에 대해 의심스럽다면 <b>"쿼리 보기"</b> 링크를 사용하십시오. 더 자세한 내용을 위해 메뉴얼을 참고할 수 있습니다(&lt;F1>). Stemming languages for stored query: 저장된 쿼리에 대한 형태소 언어들 differ from current preferences (kept) 현재 환경설정과 다르게 유지합니다. Auto suffixes for stored query: 저장된 쿼리에 대한 자동 접미사: External indexes for stored query: 저장된 쿼리에 대한 외부 색인: Autophrase is set but it was unset for stored query 자동 어구가 설정되지만, 저장된 쿼리에는 설정되지 않습니다. Autophrase is unset but it was set for stored query 자동 어구는 설정되지 않습니다만, 저장된 쿼리에 대해서는 설정합니다. Enter search terms here. 여기에 검색 용어를 입력하세요. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border-collapse: collapse; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>쿼리 언어 힌트. 결과에 대해 의심스럽다면 <b>쿼리 보기</b>.&nbsp; 링크를 사용하십시오. You should really look at the manual (F1)</p> 꼭 메뉴얼을 보셔야 합니다.(F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>어떤</th><th>예제들</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>And</td><td>하나 둘&nbsp;&nbsp;&nbsp;하나 AND 둘&nbsp;&nbsp;&nbsp;하나 && 둘</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Or</td><td>하나 OR 둘&nbsp;&nbsp;&nbsp;하나 || 둘</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>복잡한 불리언(boolean). 'OR'이 우선권을 가지니, 괄호를 사용하세요.&nbsp; where needed</td><td>(one AND two) OR three</td></tr> 필요한 곳에</td><td>(하나 AND 둘) OR 셋</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Not</td><td>-용어</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>문구</td><td>"자존심 and 편견"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>정렬된 근접성(slack:느슨함=1)</td><td>"자존심 편견"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>정렬되지 않은 근접성 (slack:느슨함=1)</td><td>"편견 자존심"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>정렬되지 않은 근접성. (기본 slack:느슨함 값=10)</td><td>"편견&nbsp;자존심"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>형태소 확장 없음: 대문자화가 </td><td>너무 많습니다.</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>특정 필드</td><td>저자:오스틴&nbsp;&nbsp;제목:편견</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND 내부 필드 (정렬 없음 )</td><td>저자:제인,오스틴</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR 내부 필드</td><td>저자:오스틴/브론테</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>필드 이름들</td><td>제목/주제/표제&nbsp;&nbsp;저자/출처<br>수취인/수신자&nbsp;&nbsp;파일이름&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>폴더 경로 필터</td><td>폴더:/home/me&nbsp;&nbsp;폴더:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME 유형 필터</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>날짜 간격</td><td>날짜:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> 날짜:2018&nbsp;&nbsp;날짜:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>용량</td><td>용량&gt;100k 용량&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Can't open index Could not restore external indexes for stored query:<br> Could not restore external indexes for stored query:<br> ??? ??? Using current preferences. Using current preferences. Simple search 간단한 검색 History 역사 <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <p>쿼리 언어 치트 시트. 의심이 들면: <b>쿼리 세부 정보 표시</b>를 클릭하십시오. &nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>어간 확장 억제를 위해 대문자로 변환</td><td>바닥</td></tr> differ from current preferences (kept) SSearchBase SSearchBase S검색 베이스 Clear 목록 지우기 Ctrl+S Ctrl+S Erase search entry 검색 항목 지우기 Search 검색 Start query 검색어 요청 시작 Enter search terms here. Type ESC SPC for completions of current term. Enter search terms here. Type ESC SPC for completions of current term. Choose search type. 검색 형식을 지정해주세요. Show query history 검색어 요청 기록 보기 Enter search terms here. 여기에 검색 용어를 입력하세요. Main menu Main menu SearchClauseW SearchClauseW SearchClauseW Any of these Any of these All of these All of these None of these None of these This phrase This phrase Terms in proximity Terms in proximity File name matching File name matching Select the type of query that will be performed with the words 검색을 수행할 검색어 요청의 유형을 선택해주세요. Number of additional words that may be interspersed with the chosen ones 선택한 단어와 함께 산재시킬 수 있는 추가적인 단어들의 숫자 In field In field No field 필드 없음 Any 하나라도 All 모두 None 없음 Phrase 어구(Phrase) Proximity 근사치 File name 파일 이름 Snippets Snippets 문서별 검색창 X X Find: 찾기: Next 다음 Prev 이전 SnippetsW Search 검색 <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>죄송합니다. 한도 내에서 정확히 일치하는 것을 발견하지 못했습니다. 아마도 문서가 매우 크거나, 스니펫 생성기가 미로에서 길을 잃었을 것입니다...</p> Sort By Relevance 관련성 별로 정리 Sort By Page 페이지 별로 정리 Snippets Window 부분 발췌 화면 Find 찾기 Find (alt) 찾기 (alt) Find Next Find Next Find Previous Find Previous Hide Hide Find next 다음 찾기 Find previous 이전 찾기 Close window 창 닫기 Increase font size 글꼴 크기를 키우다. Decrease font size 글꼴 크기 줄이기 SortForm Date 날짜 Mime type Mime type SortFormBase Sort Criteria Sort Criteria Sort the Sort the most relevant results by: most relevant results by: Descending Descending Close 닫기 Apply Apply SpecIdxW Special Indexing 특별한 색인 작성 Do not retry previously failed files. Do not retry previously failed files. Else only modified or failed files will be processed. 체크하지 않으면 수정되거나 실패한 파일만 처리됩니다. Erase selected files data before indexing. 색인 작업 전에 선택된 파일들의 데이터를 지웁니다. Directory to recursively index Directory to recursively index Browse 탐색 Start directory (else use regular topdirs): Start directory (else use regular topdirs): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. 모든 파일을 선택하려면 비워 두십시오. 공백으로 구분된 쉘 유형 패턴을 여러 개 사용할 수 있습니다.<br>공간이 포함된 패턴은 큰 따옴표로 묶어야합니다.<br>시작 대상이 설정된 경우에만 사용할 수 있습니다. Selection patterns: 패턴 선택 Top indexed entity 최상위 색인된 항목 Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). 재귀적으로 색인할 폴더입니다. 최상위 폴더에 있는 환경설정 파일에 정의된대로<br> 정규 색인 영역 안에 있어야합니다. Retry previously failed files. 이전에 실패한 파일을 재시도하기. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Must be part of the indexed tree. Use full indexed area if empty. 폴더를 지정하십시오. 색인된 폴더들 중 하나여야합니다. 만일 지정하지 않는다면, 전체 색인 영역이 사용됩니다. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). 진단결과 파일. 지정한 위치에 진단결과(파일이 인덱싱되지 않은 이유) 파일이 생성됩니다. Diagnostics file 진단결과 파일 SpellBase Term Explorer 용어 탐색기 &Expand 확장(&E) Alt+E Alt+E &Close 닫기(&C) Alt+C Alt+C Term 용어 No db info. DB정보 없음 Doc. / Tot. 문서 / 총계 Match 일치 Case 대소문자 Accents 액센트 SpellW Wildcards 와일드카드 Regexp 정규식 Spelling/Phonetic 철자/음성 Aspell init failed. Aspell not installed? Aspell init failed. Aspell not installed? Aspell expansion error. Aspell expansion error. Stem expansion 용어 확장 error retrieving stemming languages 언어 형태소 분석 오류 No expansion found 발견된 확장이 없음 Term 용어 Doc. / Tot. 문서 / 총계 Index: %1 documents, average length %2 terms Index: %1 documents, average length %2 terms Index: %1 documents, average length %2 terms.%3 results 색인: %1 문서, 평균 길이 %2 용어들.%3 결과들 %1 results %1 결과들 List was truncated alphabetically, some frequent 목록이 알파벳 순으로 잘렸습니다. terms may be missing. Try using a longer root. 용어가 아마 누락된 것 같습니다. 더 긴 어근을 사용하여 시도하십시오. Show index statistics 색인 현황 보기 Number of documents 문서 개수 Average terms per document 문서당 평균 용어 개수 Smallest document length Smallest document length Longest document length Longest document length Database directory size 데이터베이스 폴더 크기 MIME types: 색인된 MIME 유형: Item 아이템 Value Smallest document length (terms) 가장 작은 문서 길이(용어 개수) Longest document length (terms) 가장 긴 문서 길이(용어 개수) Results from last indexing: 최근 색인 작성 결과들 Documents created/updated 만들어진/업데이트된 문서들 Files tested 테스트된 파일들 Unindexed files 색인되지 않은 파일들 List files which could not be indexed (slow) 색인할 수 없는 파일들 목록(느림) Spell expansion error. 철자 오류입니다. Spell expansion error. 주문 확장 오류. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index 선택한 디렉토리는 Xapian index가 아닌 것으로 보입니다. This is the main/local index! 이것은 주/지역 색인입니다! The selected directory is already in the index list 선택한 폴더는 이미 색인 목록에 있습니다. Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) error retrieving stemming languages 형태소 분석 언어 오류 Choose 선택 Result list paragraph format (erase all to reset to default) 결과 목록 단락 형식 (모두 삭제하여 기본값으로 재설정) Result list header (default is empty) 결과 목록 헤더 (기본값은 비어 있음) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) recoll 환경설정 폴더 또는 xapian 색인 폴더를 선택하십시오 (예 : /home/me/.recoll 또는 /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read 선택한 디렉토리는 Recoll 환경설정 디렉토리처럼 보이지만 환경설정을 읽을 수 없습니다. At most one index should be selected 한 개의 색인만 선택되어야 합니다. Cant add index with different case/diacritics stripping option 다른 대소문자 / 분음 부호 제거 옵션으로 색인을 추가 할 수 없습니다. Default QtWebkit font QtWebkit 기본 폰트 Any term 하나라도 포함 All terms 모두 포함 File name 파일 이름 Query language 쿼리 언어 Value from previous program exit 이전 프로그램 종료 값 Context 컨텍스트 Description 설명 Shortcut 단축키 Default 기본값 Choose QSS File QSS 파일 선택하기 Can't add index with different case/diacritics stripping option. 다른 대/발음 기호 제거 옵션을 사용하여 색인을 추가할 수 없습니다. Light Dark 어두운 System 시스템 UIPrefsDialogBase User interface 사용자 인터페이스 Number of entries in a result page 결과 페이지 당 표시할 자료 갯수 Result list font 검색 결과 목록 폰트 Helvetica-10 Helvetica-10 Opens a dialog to select the result list font 결과 목록 폰트를 선택하기 위해 검색창을 엽니다. Reset 재설정 Resets the result list font to the system default 검색 결과 목록 폰트를 시스템 기본값으로 재설정 Auto-start simple search on whitespace entry. Auto-start simple search on whitespace entry. Start with advanced search dialog open. Recoll을 시작할 때마다 고급 검색창을 엽니다. Start with sort dialog open. Start with sort dialog open. Search parameters 매개변수들을 검색 Stemming language 형태소 언어 Dynamically build abstracts 검색 결과에 나타나는 문서 내용에 검색어를 표시합니다. Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. 검색 결과에서, 검색된 단어들을 문맥적으로 표시하도록 할까요? 큰 문서들은 아마 느려질 것입니다. Replace abstracts from documents 문서들로부터 검색된 단어들을 재배치합니다. Do we synthetize an abstract even if the document seemed to have one? 검색어가 문서 내 단 하나만 있어도 추출한 단어를 합성할까요?(무슨 기능인지 잘 모르겠음-역자 주) Synthetic abstract size (characters) 결과 보기의 미리보기 글자 수 분량 Synthetic abstract context words 문서별 검색창의 미리보기 단어 수 External Indexes 외부 색인들 Add index 색인 추가 Select the xapiandb directory for the index you want to add, then click Add Index Select the xapiandb directory for the index you want to add, then click Add Index Browse 탐색 &OK &OK Apply changes 변경사항 적용 &Cancel 취소(&C) Discard changes 변경 내역 취소 Result paragraph<br>format string Result paragraph<br>format string Automatically add phrase to simple searches 단순한 검색을 수행할 시, 자동으로 검색어를 추가합니다. A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. [rolling stones]을 검색했다면, (2 음절들)은 [rolling] 혹은 [stones] 혹은 [rolling (절 2개) stones]로 변환됩니다. 입력한 검색어대로 정확히 보여주는 결과에 더 높은 우선순위가 부여됩니다. User preferences User preferences Use desktop preferences to choose document editor. Use desktop preferences to choose document editor. External indexes External indexes Toggle selected 선택된 항목 Activate All 모두 활성화 Deactivate All 모두 비활성화 Remove selected 선택 삭제 Remove from list. This has no effect on the disk index. 목록에서 삭제. 디스크 색인에 영향 없음. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Remember sort activation state. 검색 결과창의 정렬 기준을 기억합니다. Maximum text size highlighted for preview (megabytes) 미리보기를 위한 강조된 글자 수 크기의 최대값(MB) Texts over this size will not be highlighted in preview (too slow). 이 크기를 초과하는 글자들은 미리보기에서 강조(Highlight)가 되지 않습니다. Highlight color for query terms Highlight color for query terms Prefer Html to plain text for preview. 미리보기에서 텍스트보다 HTML을 우선합니다. If checked, results with the same content under different names will only be shown once. 이 옵션을 선택하면, 이름이 달라도 내용이 동일할 경우 결과가 한 번만 표시됩니다. Hide duplicate results. 중복된 결과들을 숨깁니다. Choose editor applications MIME별 실행 프로그램 선택 창 Display category filter as toolbar instead of button panel (needs restart). Display category filter as toolbar instead of button panel (needs restart). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. 목록 내 단어들은 검색어 언어 항목 안에서 자동으로 'ext"xxx' 절들로 전환됩니다. Query language magic file name suffixes. 언어 매직 파일 이름 접미사를 검색하십시오. Enable 활성화 ViewAction Changing actions with different current values Changing actions with different current values Mime type Mime type Command 명령 MIME type MIME 타입 Desktop Default 데스크톱 기본값 Changing entries with different current values 현재 값과 다른 항목을 변경함 ViewActionBase File type File type Action Action Select one or several file types, then click Change Action to modify the program used to open them Select one or several file types, then click Change Action to modify the program used to open them Change Action Change Action Close 닫기 Native Viewers 내장 뷰어들 Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Select one or several mime types then use the controls in the bottom frame to change how they are processed. 하나 또는 여러 개의 MIME 유형을 선택한 다음, 창 하단에 있는 명령을 수정하여 파일 실행 방식을 변경할 수 있습니다. Use Desktop preferences by default 데스크톱 설정들을 기본값으로 사용합니다. Select one or several file types, then use the controls in the frame below to change how they are processed 하나 혹은 복수의 파일 형식을 선택한 다음, 아래 프레임의 컨트롤을 사용하여 처리 방식을 변경하십시오. Exception to Desktop preferences 기본값을 사용하지 않으려면 선택하십시오. Action (empty -> recoll default) 명령 (비어있음 -> Recoll 기본값) : Apply to current selection 명령을 선택한 곳에 적용합니다(기본값을 사용하지 않아야 적용됩니다). Recoll action: 현재 명령 : current value 현재값 Select same 같은 것 선택 <b>New Values:</b> <b>새 값:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. 값은 실행할 명령 줄입니다. 대체: %s: 검색 문자열; %p: 페이지 번호; <br>%f: 문서 파일 이름. 더 많은 도움말을 위해 F1을 누르세요. Webcache Webcache editor 웹 캐시 편집기 Search regexp 정규식 검색 TextLabel 텍스트 레이블 WebcacheEdit Copy URL 웹 주소 복사 Unknown indexer state. Can't edit webcache file. 인덱서의 상태를 알 수 없습니다. 웹 캐시 파일을 수정할 수 없습니다. Indexer is running. Can't edit webcache file. 인덱서가 실행중입니다. 웹 캐시 파일을 수정할 수 없습니다. Delete selection 선택 삭제 Webcache was modified, you will need to run the indexer after closing this window. 웹 캐시가 수정되었으므로 이 창을 닫은 후에 인덱서를 실행해야 합니다. Save to File 파일로 저장 File creation failed: 파일 생성 실패: Maximum size %1 (Index config.). Current size %2. Write position %3. 최대 크기 %1 (인덱스 구성). 현재 크기 %2. 쓰기 위치 %3. WebcacheModel MIME MIME Url 웹 주소 Date 날짜 Size 크기 URL 웹 주소 WinSchedToolW Error 오류 Configuration not initialized 구성이 초기화되지 않았습니다. <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll 색인 일괄 예약</h3><p>우리는 이 작업을 위해 기본적으로 '윈도우즈 작업 스케쥴러'를 사용합니다. 아래 버튼을 클릭하여 스캐쥴러를 시작할 수 있습니다.</p><p>당신은 오른쪽의 메뉴 안에 <i>작업 만들기</i>로 전체 인터페이스를 사용할 수 있으며, 혹은 간단하게 <i> 기본 작업 만들기</i> 마법사를 사용할 수 있습니다.<p> 작업을 수행하기 위하여 아래 나열된 일괄 파일 경로를 복사/붙여넣기 하십시오. Command already started 명령이 이미 시작되었습니다. Recoll Batch indexing Recoll 일괄 색인 Start Windows Task Scheduler tool 윈도우즈 작업 스캐쥴러 도구 시작 Could not create batch file 일괄 파일을 만들 수 없습니다. confgui::ConfBeaglePanelW Steal Beagle indexing queue Steal Beagle indexing queue Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Web cache directory name Web cache directory name The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Max. size for the web cache (MB) Max. size for the web cache (MB) Entries will be recycled once the size is reached Entries will be recycled once the size is reached Web page store directory name 웹 페이지 저장소 디렉토리 이름 The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. 방문한 웹 페이지의 사본을 저장할 디렉토리의 이름.<br>상대적인 경로인 경우 환경설정 폴더를 기준으로합니다. Max. size for the web store (MB) 웹 저장소의 최대 용량(MB) Process the WEB history queue 웹 히스토리 큐 처리 Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Firefox 방문 페이지 색인 작성을 활성화합니다.<br>(Firefox Recoll 플러그인도 설치필요) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). 용량이 한계에 도달하면 항목들이 재활용됩니다.<br>값을 줄이면 기존 파일이 잘리지 않기 때문에 크기를 늘리는 것만으로도 의미가 있습니다(끝 공간만 낭비됩니다). confgui::ConfIndexW Can't write configuration file 환경설정 파일을 쓸 수 없습니다 Recoll - Index Settings: Recoll - 색인 설정: confgui::ConfParamFNW Browse 탐색 Choose 선택 confgui::ConfParamSLW + + - - Add entry 항목 추가 Delete selected entries 선택된 항목 삭제 ~ ~ Edit selected entries 선택된 항목 편집 confgui::ConfSearchPanelW Automatic diacritics sensitivity 발음구별 부호 자동 감도 <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. 검색어에 악센트 부호가 있는 문자(unac_except_trans에 없는)가 있으면 분음 부호 민감도를 자동으로 조정합니다. 그렇지 않고 분음 부호 민감도를 직접 지정하려면 검색어 언어와 <i>D</i> 수정자를 사용해야합니다. Automatic character case sensitivity 대소문자 자동 구분 <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p> 항목 중 첫 글자 이외에 대문자가 있으면 대소문자 구분을 자동으로 처리합니다. 그렇지 않으면 검색어 언어와 <i>C</i> 수정자를 사용하여 대소문자 구분을 지정해야합니다. Maximum term expansion count 용어 확장 최대값 <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p> 단일 용어의 최대 확장 횟수(예 : 와일드 카드 사용시). 기본값인 10,000은 합리적이며, 엔진이 그 확장된 용어 목록을 처리하는 동안 처리할 수 없는 용어는 피합니다. Maximum Xapian clauses count Xapian의 절 계수의 최대값 <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. 단일 Xapian 검색 요청에 넣을 수 있는 절 숫자의 최대값입니다. 경우에 따라 확장된 용어의 결과가 곱해질 수 있기에 과도한 메모리 사용을 피하려고합니다. 기본값 100 000은 대부분의 경우에 충분하며, 하드웨어 구성과 호환되어야합니다. confgui::ConfSubPanelW Global 광역 Max. compressed file size (KB) 압축된 파일 용량의 최대값(KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. 이 값은 압축 파일이 처리되지 않게 할 임계 값을 설정합니다. 제한이 없으면 -1로, 압축 해제가 없으면 0으로 설정하십시오. Max. text file size (MB) 텍스트 파일 용량의 최대값(MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. 이 값은 텍스트 파일이 처리되지 않게 할 임계 값을 설정합니다. 제한이 없으면 -1로 설정하십시오. 이것은 색인에서 너무 큰 로그 파일을 제외하기위한 것입니다. Text file page size (KB) 텍스트 파일 페이지 용량(KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). 이 값을 설정하면(-1이 아닌) 텍스트 파일이 색인을 위해 설정한 크기 단위로 분할됩니다. 이는 매우 큰 텍스트 파일(예 : 로그 파일)을 검색하는 데 도움이 됩니다. Max. filter exec. time (S) Max. filter exec. time (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. 이 값보다 오래 작동하는 외부 필터는 중단됩니다. 문서가 필터를 무한 반복하게 만들 수 있는 드문 경우에 사용됩니다(예 : 포스트 스크립트). 제한이 없으면 -1로 설정하십시오. Only mime types 오직 MIME 유형만 An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive 색인 처리된 MIME 유형들의 독점 목록입니다.<br>다른 것들은 색인되지 않을 것입니다. 보통 비어있음, 비활성화. Exclude mime types 제외된 MIME 유형들 Mime types not to be indexed 색인처리되지 않는 MIME 유형 Max. filter exec. time (s) 필터 최대 실행시간 confgui::ConfTabsW Apply Apply confgui::ConfTopPanelW Top directories 최상위 폴더들 The list of directories where recursive indexing starts. Default: your home. 재귀 색인 작성이 시작되는 폴더 목록. 기본값 : home. Skipped paths 건너뛴 경로들 These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Stemming languages 형태소 언어 The languages for which stemming expansion<br>dictionaries will be built. 형태소 확장 사전을 만들 언어가<br>작성됩니다. Log file name 로그 파일 이름 The file where the messages will be written.<br>Use 'stderr' for terminal output 메시지가 기록 될 파일입니다.<br>터미널 출력에 'stderr'을 사용하십시오. Log verbosity level 로그 상세 수준 This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. 이 값은 메시지의 분량을<br>오류에서 많은 디버깅 데이터에 이르기까지 조정합니다. Index flush megabytes interval 색인 정비 간격(MB) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB 이 값은 색인되는 데이터의 양을 적절한 값으로 조정합니다.<br>색인 작업자가 메모리 사용을 제어하는 데 도움이 됩니다. 기본 10MB Max disk occupation (%) Max disk occupation (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). No aspell usage 철자 사용법 없음 Aspell language 철자 언어 The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Database directory name 데이터베이스 폴더 이름 The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Use system's 'file' command Use system's 'file' command Use the system's 'file' command if internal<br>mime type identification fails. Use the system's 'file' command if internal<br>mime type identification fails. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. 용어 탐색기 도구에서 유사한 철자를 발생시키는 철자 사용을 비활성화 합니다. <br> 철자가 없거나 작동하지 않는 경우에 유용합니다. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. 철자 사전의 언어입니다. 이것은 'en'이나 'fr' 등으로 나타나야 합니다.<br>만약 이 값이 지정되어있지 않다면, NLS 환경설정이 일반적으로 사용되는 값을 찾을 것입니다. 시스템에 무엇이 설치되어 있는지 이해하려면 'aspell config'를 입력하고 'data-dir'디렉토리에서 .dat 파일을 찾으십시오. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. 색인을 저장할 폴더 이름<br>상대 경로는 환경설정 폴더를 기본으로 합니다. 기본값은 'xapiandb'입니다. Unac exceptions Unac 예외 <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p> 이것은 기본적으로 모든 분음 부호를 제거하고 정식 분해를 수행하는 unac 메커니즘에 대한 예외를 설정합니다. 언어에 따라 일부 문자의 강조를 무시, 추가, 분해를 지정할 수 있습니다(예 : 합자의 경우. 공백으로 구분된 각 항목에서 첫 번째 문자는 원본이고 나머지는 번역입니다). These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') 색인 작업이 실행되지 않게 될 폴더 경로들입니다.<br>경로에는 와일드 카드가 포함될 수 있습니다. 항목들은 색인자가 보는 경로와 일치해야합니다 (예 : 최상위 폴더에 '/home /me'가 포함되어 있고 '/home'이 실제로 '/usr/home'에 대한 링크인 경우 올바른 '건너뛴 경로들' 항목은 '/home/me'입니다. '/usr/home/me/tmp*'가 아닌 /tmp*') Max disk occupation (%, 0 means no limit) 최대 디스크 점유율(%, 0은 제한없음) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. 색인을 실패시키고 중지할 디스크 크기(색인 크기가 아닌 전체 디스크 사용량)의 백분율입니다.<br>기본값 0은 제한을 두지 않습니다. uiPrefsDialogBase User preferences User preferences User interface 사용자 인터페이스 Number of entries in a result page 결과 페이지 당 표시할 자료 갯수 If checked, results with the same content under different names will only be shown once. 이 옵션을 선택하면, 이름이 달라도 내용이 동일할 경우 결과가 한 번만 표시됩니다. Hide duplicate results. 중복된 결과들을 숨깁니다. Highlight color for query terms Highlight color for query terms Result list font 검색 결과 목록 폰트 Opens a dialog to select the result list font 결과 목록 폰트를 선택하기 위해 검색창을 엽니다. Helvetica-10 Helvetica-10 Resets the result list font to the system default 검색 결과 목록 폰트를 시스템 기본값으로 재설정 Reset 재설정 Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Result paragraph<br>format string Result paragraph<br>format string Texts over this size will not be highlighted in preview (too slow). 이 크기를 초과하는 글자들은 미리보기에서 강조(Highlight)가 되지 않습니다. Maximum text size highlighted for preview (megabytes) 미리보기를 위한 강조된 글자 수 크기의 최대값(MB) Use desktop preferences to choose document editor. Use desktop preferences to choose document editor. Choose editor applications MIME별 실행 프로그램 선택 창 Display category filter as toolbar instead of button panel (needs restart). Display category filter as toolbar instead of button panel (needs restart). Auto-start simple search on whitespace entry. Auto-start simple search on whitespace entry. Start with advanced search dialog open. Recoll을 시작할 때마다 고급 검색창을 엽니다. Start with sort dialog open. Start with sort dialog open. Remember sort activation state. 검색 결과창의 정렬 기준을 기억합니다. Prefer Html to plain text for preview. 미리보기에서 텍스트보다 HTML을 우선합니다. Search parameters 검색 매개변수 Stemming language 형태소 언어 A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. [rolling stones]을 검색했다면, (2 음절들)은 [rolling] 혹은 [stones] 혹은 [rolling (절 2개) stones]로 변환됩니다. 입력한 검색어대로 정확히 보여주는 결과에 더 높은 우선순위가 부여됩니다. Automatically add phrase to simple searches 단순한 검색을 수행할 시, 자동으로 검색어를 추가합니다. Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. 검색 결과에서, 검색된 단어들을 문맥적으로 표시하도록 할까요? 큰 문서들은 아마 느려질 것입니다. Dynamically build abstracts 검색 결과에 나타나는 문서 내용에 검색어를 표시합니다. Do we synthetize an abstract even if the document seemed to have one? 검색어가 문서 내 단 하나만 있어도 추출한 단어를 합성할까요?(무슨 기능인지 잘 모르겠음-역자 주) Replace abstracts from documents 문서들로부터 검색된 단어들을 재배치합니다. Synthetic abstract size (characters) 결과 보기의 미리보기 글자 수 분량 Synthetic abstract context words 문서별 검색창의 미리보기 단어 수 The words in the list will be automatically turned to ext:xxx clauses in the query language entry. 목록 내 단어들은 검색어 언어 항목 안에서 자동으로 'ext"xxx' 절들로 전환됩니다. Query language magic file name suffixes. 언어 매직 파일 이름 접미사를 검색하십시오. Enable 사용함 External Indexes 외부 색인들 Toggle selected 선택된 항목 Activate All 모두 활성화 Deactivate All 모두 비활성화 Remove from list. This has no effect on the disk index. 목록에서 삭제. 디스크 색인에 영향 없음. Remove selected 선택 삭제 Click to add another index directory to the list Click to add another index directory to the list Add index 색인 추가 Apply changes 변경사항 적용 &OK 적용(&O) Discard changes 변경 내역 취소 &Cancel 취소(&C) Abstract snippet separator 문서별 검색 내용 분리자 Use <PRE> tags instead of <BR>to display plain text as html. Use <PRE> tags instead of <BR>to display plain text as html. Lines in PRE text are not folded. Using BR loses indentation. Lines in PRE text are not folded. Using BR loses indentation. Style sheet 스타일 시트 Opens a dialog to select the style sheet file 스타일 시트 파일을 선택하기 위해 대화창을 엽니다. Choose 선택 Resets the style sheet to default 스타일 시트를 기본값으로 재설정 Lines in PRE text are not folded. Using BR loses some indentation. Lines in PRE text are not folded. Using BR loses some indentation. Use <PRE> tags instead of <BR>to display plain text as html in preview. Use <PRE> tags instead of <BR>to display plain text as html in preview. Result List 검색 결과 목록 Edit result paragraph format string 결과 목록을 구성하는 표와 글서식 편집 Edit result page html header insert 검색 결과 페이지의 HTML Header에 삽입할 내용 편집 Date format (strftime(3)) 날짜 서식 (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). 백분율 값을 높이면, 자주 사용되는 단어를 구문검색에 활용하지 않습니다. 이것은 성능 향상에 도움을 줄 수는 있지만, 원하는 문장을 찾는데에는 지장을 줄 수 있습니다. 기본값은 2 입니다.(단위는 퍼센트) Autophrase term frequency threshold percentage 용어를 검색 빈도수에 따라서 자동 문구 생성에 활용합니다(백분율). Plain text to HTML line style 단순 텍스트를 HTML 스타일로 변경할 때 Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. PRE 텍스트의 줄은 접히지 않습니다. BR은 들여쓰기가 손실됩니다. PRE + Wrap 스타일을 원하고 있을지도 모릅니다. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + wrap Exceptions Exceptions Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Disable Qt autocompletion in search entry. 검색어 입력창에서 자동완성을 끕니다. Search as you type. Search as you type. Paths translations 변경된 경로들 Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. 목록에 다른 색인 폴더를 추가하려면 클릭하십시오. Recoll 환경설정 폴더 또는 Xapian 색인을 선택할 수 있습니다. Snippets window CSS file 문서별 검색창을 위한 CSS 파일 Opens a dialog to select the Snippets window CSS style sheet file 문서별 검색창의 CSS 스타일 시트 파일을 선택하기 위해 대화창을 엽니다. Resets the Snippets window style 문서별 검색창 스타일을 재설정 Decide if document filters are shown as radio buttons, toolbar combobox, or menu. 검색 결과의 문서 필터를 라디오 버튼으로 볼지, 툴바 콤보 박스로 볼지, 혹은 메뉴로 볼지 결정하십시오. Document filter choice style: 검색된 자료의 필터 선택 스타일: Buttons Panel 버튼 패널 Toolbar Combobox 툴바 콤보박스 Menu 메뉴 Show system tray icon. 시스템 트레이에 아이콘을 표시합니다. Close to tray instead of exiting. 프로그램 종료 대신, 작업표시줄의 트레이로 최소화합니다. Start with simple search mode 단순 검색의 검색 기준 기본값: Show warning when opening temporary file. 임시 파일이 열렸을 때 경고창을 봅니다. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. 문서별 검색창에 적용할 사용자 스타일입니다.<br> 참고: 결과 페이지의 헤더에 삽입한 값들도 문서 검색창 헤더에 같이 포함됩니다. Synonyms file 동의어 파일 Highlight CSS style for query terms 검색어 단어를 위한 강조 CSS 스타일 Recoll - User Preferences Recoll - 사용자 환경설정 Set path translations for the selected index or for the main one if no selection exists. 선택된 색인의 경로 지시, 혹은 선택한 색인이 없을 때 주 색인의 경로를 설정하십시오. Activate links in preview. 미리보기에서 링크를 활성화합니다. Make links inside the preview window clickable, and start an external browser when they are clicked. 미리보기에 외부 브라우저 시작이 가능한 링크를 만듭니다. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... 검색 결과에서 검색어 강조. <br> 예를 들어, 기본값은 파란색이지만, "color:red;background:yellow"를 설정하면 더 돋보일 것입니다. Start search on completer popup activation. 자동완성 항목 선택 시 검색을 즉각 시작합니다. Maximum number of snippets displayed in the snippets window 문서별 검색창 내에 표시되는 검색결과의 최대 수 Sort snippets by page number (default: by weight). 문서별 검색 결과를 페이지 순서대로 정리합니다(기본값: 검색어 관련도). Suppress all beeps. 모든 경고음을 억제합니다. Application Qt style sheet 응용 프로그램 Qt 스타일 시트 Limit the size of the search history. Use 0 to disable, -1 for unlimited. 검색 기록의 크기를 제한하십시오. 0:비활성화, -1:무제한. Maximum size of search history (0: disable, -1: unlimited): 검색 기록 최대 크기 (0:사용 안함, -1:무제한): Generate desktop notifications. 데스크탑 알림을 생성합니다. Misc 기타 Work around Tamil QTBUG-78923 by inserting space before anchor text 앵커 텍스트 앞에 공백을 삽입하여 Tamil QTBUG-78923을 해결합니다. Display a Snippets link even if the document has no pages (needs restart). 문서에 페이지가 없더라도 문서별 검색기 링크를 표시합니다(다시 시작해야 함). Maximum text size highlighted for preview (kilobytes) 미리보기를 위한 하이라이트 처리된 글자의 최대 용량(KB) Start with simple search mode: 단순 검색의 검색 기준 기본값: Hide toolbars. Hide toolbars. Hide status bar. Hide status bar. Hide Clear and Search buttons. Hide Clear and Search buttons. Hide menu bar (show button instead). Hide menu bar (show button instead). Hide simple search type (show in menu only). Hide simple search type (show in menu only). Shortcuts 단축키 Hide result table header. 결과 테이블의 헤더 숨기기. Show result table row headers. 결과 테이블의 행 헤더 표시. Reset shortcuts defaults 단축키 초기화 Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Use F1 to access the manual F1을 사용하여 설명서에 액세스합니다. Hide some user interface elements. 일부 사용자 인터페이스 요소 숨기기. Hide: 숨기기: Toolbars 툴바 Status bar 상태바 Show button instead. 메뉴바 대신 버튼이 보여집니다. Menu bar 메뉴바 Show choice in menu only. 메뉴를 통해서만 유형을 선택합니다. Simple search type 단순 검색 유형 Clear/Search buttons 지우기/검색 버튼 Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. 테이블 행으로 이동하는 Ctrl+[0-9]/Shift+[a-z] 단축키 비활성화 None (default) None (default) Uses the default dark mode style sheet 스타일 시트를 기본 다크모드로 설정 Dark mode Dark mode Choose QSS File QSS 파일 선택하기 To display document text instead of metadata in result table detail area, use: 결과 테이블에서 메타데이터가 아닌 문서 텍스트를 보려면: left mouse click 마우스 클릭 Shift+click Shift+클릭 Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. 파일탐색기를 열어 스타일시트 파일을 선택합니다.<br>예시로 /usr/share/recoll/examples/recoll[-dark].qss 를 참고하세요. Result Table 결과 테이블 Do not display metadata when hovering over rows. 마우스가 행 위에 있을 때 메타데이터 표시하지 않기. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. 버그로 인해 강조된 타밀어 단어 안에 이상한 원 모양의 문자가 표시됩니다. 해결책은 문제를 해결하는 것으로 보이는 추가 공백 문자를 삽입하는 것입니다. Depth of side filter directory tree 사이드 필터 디렉토리 트리의 깊이 Zoom factor for the user interface. Useful if the default is not right for your screen resolution. 사용자 인터페이스의 확대/축소 비율. 기본값이 화면 해상도에 맞지 않을 경우 유용합니다. Display scale (default 1.0): 표시 배율 (기본 1.0): Automatic spelling approximation. 자동 맞춤법 근사화. Max spelling distance 최대 철자 거리 Add common spelling approximations for rare terms. 희귀한 용어에 대한 일반적인 철자 근사치를 추가하십시오. Maximum number of history entries in completer list 완성 목록에서의 최대 히스토리 항목 수 Number of history entries in completer: 완성기록에서의 항목 수: Displays the total number of occurences of the term in the index 색인에 용어가 총 몇 번 발생했는지 표시합니다. Show hit counts in completer popup. 완성기 팝업에서 히트 횟수 표시하기. Prefer HTML to plain text for preview. 미리보기에 일반 텍스트 대신 HTML을 선호합니다. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Qt QDateTimeEdit 문서를 참조하십시오. 예: yyyy-MM-dd. 기본 Qt/System 형식을 사용하려면 비워 두십시오. Side filter dates format (change needs restart) 사이드 필터 날짜 형식 (변경 시 재시작 필요) If set, starting a new instance on the same index will raise an existing one. 만약 설정되어 있다면, 동일한 인덱스에서 새로운 인스턴스를 시작하면 기존 인스턴스가 발생합니다. Single application 단일 응용 프로그램 Set to 0 to disable and speed up startup by avoiding tree computation. 트리 계산을 피하여 시작 속도를 높이기 위해 0으로 설정하십시오. The completion only changes the entry when activated. 완료는 활성화될 때에만 항목을 변경합니다. Completion: no automatic line editing. 완료: 자동 줄 편집 없음. Interface language (needs restart): 인터페이스 언어 (재시작 필요): Note: most translations are incomplete. Leave empty to use the system environment. 참고: 대부분의 번역은 불완전합니다. 시스템 환경을 사용하려면 비워 두십시오. Preview 미리보기 Set to 0 to disable details/summary feature 세부 정보/요약 기능을 비활성화하려면 0으로 설정하세요. Fields display: max field length before using summary: 필드 표시: 요약 사용 전 최대 필드 길이: Number of lines to be shown over a search term found by preview search. 미리보기 검색에서 찾은 검색어 위에 표시할 라인 수. Search term line offset: 검색어 라인 오프셋: Wild card characters *?[] will processed as punctuation instead of being expanded 와일드 카드 문자 *?[]는 확장되는 대신 구두점으로 처리됩니다. Ignore wild card characters in ALL terms and ANY terms modes 모든 용어 및 어떤 용어 모드에서 와일드 카드 문자를 무시합니다. Color scheme 색 구성 When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. 다크 모드에서 HTML을 표시할 때는 어두운 배경(및 밝은 색상)을 사용하려고 노력하십시오. 이는 많은 문서와 충돌하며, 이러한 문서는 우리의 밝은 설정을 자체 CSS(어두운) 전경 색상으로 덮어씌우기 때문에 읽기 어려운 문서가 됩니다. 그래서 기본적으로 비활성화되어 있습니다. Use dark background when displaying HTML in dark mode. 다크 모드에서 HTML을 표시할 때는 어두운 배경을 사용하십시오. recoll-1.43.12/qtgui/i18n/recoll_zh_CN.ts0000644000175000017500000077223615124431112017300 0ustar dockesdockes ActSearchDLG Menu search 待定 搜索菜单 AdvSearch All clauses 全部条件 Any clause 任意条件 texts 文本 spreadsheets 电子表格 presentations 演示文稿 media 多媒体文件 messages 邮件 other 其它 Bad multiplier suffix in size filter 文件尺寸过滤器的后缀单位不正确 text 文本 spreadsheet 电子表格 presentation 演示文档 message 邮件 Advanced Search 高级搜索 History Next 下一历史记录 History Prev 历史记录 Load next stored search 加载下一个存储的搜索 Load previous stored search 加载先前存储的搜索 AdvSearchBase Advanced search 高级搜索 Restrict file types 限定文件类型 Save as default 保存为默认值 Searched file types 将被搜索的文件类型 All ----> 移动全部→ Sel -----> 移动选中项→ <----- Sel ←移动选中项 <----- All ←移动全部 Ignored file types 要忽略的文件类型 Enter top directory for search 输入要搜索的最上层目录 Browse 浏览 Restrict results to files in subtree: 将结果中的文件限定在此子目录树中: Start Search 开始搜索 Search for <br>documents<br>satisfying: 搜索<br>满足以下条件<br>的文档: Delete clause 删除条件 Add clause 添加条件 Check this to enable filtering on file types 选中这个,以便针对文件类型进行过滤 By categories 按大类来过滤 Check this to use file categories instead of raw mime types 选中这个,以便使用较大的分类,而不使用具体的文件类型 Close 关闭 All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. 右边的所有非空字段都会按照逻辑与(“全部条件”选项)或逻辑或(“任意条件”选项)来组合。<br>“任意”“全部”和“无”三种字段类型都接受输入简单词语和双引号引用的词组的组合。<br>空的输入框会被忽略。 Invert 反转过滤条件 Minimum size. You can use k/K,m/M,g/G as multipliers 最小尺寸。你可使用k/K、m/M、g/G作为单位 Min. Size 最小尺寸 Maximum size. You can use k/K,m/M,g/G as multipliers 最大尺寸。你可使用k/K、m/M、g/G作为单位 Max. Size 最大尺寸 Select 选择 Filter 过滤 From To Check this to enable filtering on dates 选中这个,以便针对日期进行过滤 Filter dates 过滤日期 Filter birth dates 过滤创建日期 Find 查找 Check this to enable filtering on sizes 选中这个,以便针对文件尺寸进行过滤 Filter sizes 过滤尺寸 ConfIndexW Can't write configuration file 无法写入配置文件 Global parameters 全局参数 Local parameters 局部参数 Search parameters 搜索参数 Top directories 顶级目录 The list of directories where recursive indexing starts. Default: your home. 索引从这个列表中的目录开始,递归地进行。默认:你的家目录。 Skipped paths 略过的路径 These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') 索引输入的目录的路径名。<br>路径元素可能包含通配符。 条目必须与索引器看到的路径匹配(例如:如果顶级路径包含 '/home/me' ,并且 '/home' 实际上是 '/usr/home' 的链接,则正确的相对路径条目应为 '/home/me/tmp*' ,而不是 '/usr/home/me/tmp*') Stemming languages 启用词根扩展的语言 The languages for which stemming expansion<br>dictionaries will be built. 将会针对这些语言<br>构造词根扩展词典。 Log file name 记录文件名 The file where the messages will be written.<br>Use 'stderr' for terminal output 程序输出的消息会被保存到这个文件。<br>使用'stderr'以表示将消息输出到终端 Log verbosity level 记录的话痨级别 This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. 这个值调整的是输出的消息的数量,<br>其级别从仅输出报错信息到输出一大堆调试信息。 Index flush megabytes interval 刷新索引的间隔,兆字节 This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB 这个值调整的是,当积累咯多少索引数据时,才将数据刷新到硬盘上去。<br>用来控制索引进程的内存占用情况。默认为10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. 这是磁盘使用量(是总磁盘使用量而不是索引大小)的百分比,在该百分比下索引将失败并停止。<br>默认值0将消除所有限制。 No aspell usage 不使用aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. 禁止在词语探索器中使用aspell来生成拼写相近的词语。<br>在没有安装aspell或者它工作不正常时使用这个选项。 Aspell language Aspell语言 The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. aspell词典的语言。表示方式是'en'或'fr'……<br>如果不设置这个值,则会使用系统环境中的自然语言设置信息,而那个通常是正确的。要想查看你的系统中安装咯哪些语言的话,就执行'aspell config',再在'data-dir'目录中找.dat文件。 Database directory name 数据库目录名 The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. 用来储存索引数据的目录的名字<br>如果使用相对路径,则路径会相对于配置目录进行计算。默认值是'xapiandb'。 Unac exceptions Unac例外 <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>这是针对unac机制的例外,默认情况下,该机制会删除所有的判断信息,并进行正规的分解。你可以按照自己的语言的特点针对某个字符覆盖掉口音解除设置,以及指定额外的分解(例如,针对复数)。在每个由空格分隔的条目中,第一个字符是源字符,剩下的就是翻译。 Process the WEB history queue 处理网页历史队列 Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) 启用对火狐的已访问页面进行索引。<br>(你还需要安装火狐的Recoll插件) Web page store directory name 网页储存目录名 The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. 用来储存复制过来的已访问网页的目录名。<br>如果使用相对路径,则会相对于配置目录的路径进行处理。 Max. size for the web store (MB) 网页存储的最大尺寸(MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). 一旦大小达到,条目将被回收。<br>仅增加大小确实有意义,因为减小该值不会截断现有文件(最后只是浪费空间而已) Automatic diacritics sensitivity 自动判断大小写 <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>如果搜索语句中包含带有口音特征(不在unac_except_trans中)的话,则自动触发大小写的判断。否则,你需要使用查询语言和<i>D</i>修饰符来指定对大小写的判断。 Automatic character case sensitivity 自动调整字符的大小写敏感性 <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>如果搜索语句中除首字母之外包含有大写字母的话,则自动触发大小写的判断。否则,你需要使用查询语言和<i>C</i>修饰符来指定对大小写的判断。 Maximum term expansion count 最大词根扩展数目 <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>针对单个单词的最大词根扩展数目(例如:此选项在使用通配符时会生效)。默认的10000是一个狠合理的值,能够避免当引擎遍历词根列表时引起查询界面假死。 Maximum Xapian clauses count 最大的Xapian子句数目 <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>我们向单个Xapian查询语句中加入的最大的子句数目。某些情况下,词根扩展的结果会是倍增的,而我们想要避免使用过多内存。默认的100000应当既能满足日常的大部分要求,又能与当前的典型硬件配置相兼容。 The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... 生成扩展字典的语言。<br>查看Xapian stammer文档以获取可能的值。例如:英文、 法语、 相关人... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. 所用词典的语言。值是两字母的语言代码,例如 'en', 'fr' 。 。<br>如果未设置此值,NLS环境将被用于计算它,通常是正常工作。 要想了解您的系统上安装了什么,请输入 'aspell 配置' 并寻找。 在 'data dir' 目录内的文件。 Indexer log file name 索引器日志文件名 If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. 如果为空,将使用上面的日志文件名称值。 一个单独的日志用于诊断目的可能有用,因为当<br>GUI启动时,通用日志将被删除。 Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) 磁盘完整的阈值百分比,我们将停止索引<br>例如, 90% 停止为 90% 完整, 0 或 100 表示没有限制) Web history 网页历史 Process the Web history queue 索引浏览器历史记录 (by default, aspell suggests mispellings when a query has no results). 默认情况下aspell会在搜索不到结果时给出可能的错误拼写提示 Page recycle interval 网页整理间隔 <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. 缓存中可能存在同一个URL的多个实例。缓存定期维护后会只保留一个(这是默认值)。这个值可以延长缓存清理间隔(天、周、月、年)。注意:增加间隔不会清楚现有实例。 Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 注意:当索引增长到体积上限时,recoll会清除旧网页以便为新网页腾空间。当前索引体积:%1 Disk full threshold percentage at which we stop indexing<br>(E.g. 90% to stop at 90% full, 0 or 100 means no limit) 当磁盘已使用空间达到某个百分比之后,recoll会停止索引<br>例如, 90% 意味着磁盘占用90%时停止, 0 或 100 表示没有限制) Start folders 开始文件夹 The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. 要被索引的文件夹/目录列表。子文件夹将被递归处理。默认值:您的主目录。 Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) 磁盘已满阈值百分比,我们停止索引的百分比(例如,90表示在90%满时停止,0或100表示没有限制) Browser add-on download folder 浏览器插件下载文件夹 Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) 只有在Web浏览器插件设置中设置了“下载子目录”参数时才设置此选项。<br>在这种情况下,它应该是目录的完整路径(例如/home/[me]/Downloads/my-subdir)。 Store some GUI parameters locally to the index 将一些GUI参数存储到本地索引中。 <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index <p>GUI设置通常存储在一个全局文件中,适用于所有索引。设置此参数将使一些设置,如结果表格设置,特定于索引。 Suspend the real time indexer when running on battery 在电池供电时暂停实时索引器 The indexer will wait for a return on AC and reexec itself when it happens 索引器将等待AC返回,并在发生时重新执行自身。 The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. 要递归地索引的文件夹/目录列表及其子文件夹。<br>字符“~”会扩展为您的主目录,这是默认初始值。 (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types 仅MIME类型 An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive 已索引的MIME类型的排除列表。<br>其他将不被索引。 通常为空且不活动 Exclude mime types 排除MIME类型 Mime types not to be indexed MIME类型将不被索引 Max. compressed file size (KB) 压缩文件最大尺寸(KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. 尺寸大于这个值的压缩文件不会被处理。设置成-1以表示不加任何限制,设置成0以表示根本不处理压缩文件。 Max. text file size (MB) 文本文件最大尺寸(MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. 尺寸大于这个值的文本文件不会被处理。设置成-1以表示不加限制。 其作用是从索引中排除巨型的记录文件。 Text file page size (KB) 文本文件单页尺寸(KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). 如果设置咯这个值(不等于-1),则文本文件会被分割成这么大的块,并且进行索引。 这是用来搜索大型文本文件的(例如记录文件)。 Max. filter exec. time (s) 最大筛选执行时间(秒) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. 工作时间长于这个值的外部过滤器会被中断。这是针对某种特殊情况的,该情况下,一个文档可能引起过滤器无限循环下去(例如:postscript)。设置为-1则表示不设限制。 Global 全局 ConfigSwitchDLG Switch to other configuration 切换到其他配置 ConfigSwitchW Choose other 选择其他 Choose configuration directory 选择配置目录 CronToolW Cron Dialog 计划任务对话框 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T19:47:37" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T19:56:53" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T1 { font-weight:bold; } .T3 { font-style:italic; } .T4 { font-family:Courier New,courier; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1"><span class="T1">Recoll</span> 批量索引计划任务(cron) </p><p class="P1">每个字段都可以包括一个通配符(*)、单个数字值、逗号分隔的列表(1,3,5)和范围(1-7)。更准确地说,这些字段会被<span class="T3">按原样</span>输出到crontab 文件中,因此这里可以使用crontab 的所有语法,参考crontab(5)。</p><p class="P1"><br/>例如,在<span class="T3">日期</span>中输入<span class="T4">*</span>,<span class="T3">小时</span>中输入<span class="T4">12,19</span>,<span class="T3">分钟</span>中输入<span class="T4">15 </span>的话,会在每天的12:15 AM 和7:15 PM启动recollindex。</p><p class="P1">一个频繁执行的计划任务,其性能可能比不上实时索引。</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) 星期日(*或0-7,0或7是指星期天) Hours (* or 0-23) 小时(*或0-23) Minutes (0-59) 分钟(0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T20:08:00" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T20:11:47" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T2 { font-style:italic; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1">点击<span class="T2">禁用</span>以停止进行自动化的批量索引,点击<span class="T2">启用</span>以启用此功能,点击<span class="T2">取消</span>则不改变任何东西。</p></body></html> Enable 启用 Disable 禁用 It seems that manually edited entries exist for recollindex, cannot edit crontab 看起来已经有手动编辑过的recollindex条目了,因此无法编辑crontab Error installing cron entry. Bad syntax in fields ? 插入cron条目时出错。请检查语法。 EditDialog Dialog 对话框 EditTrans Source path 源路径 Local path 本地路径 Config error 配置错误 Original path 原始路径 Path in index 索引中的路径 Translated path 存疑 已变换的路径 EditTransBase Path Translations 路径变换 Setting path translations for 针对右侧事务设置路径变换 Select one or several file types, then use the controls in the frame below to change how they are processed 选中一个或多个文件类型,然后使用下面框框中的控件来设置要如何处理它们 Add 添加 Delete 删除 Cancel 取消 Save 保存 FirstIdxDialog First indexing setup 第一次索引设置 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T20:14:44" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T20:23:13" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T2 { font-weight:bold; } .T4 { font-style:italic; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1"><span class="T2">未找到对应于此配置实例的索引数据。</span><br/><br/>如果你只想以一组合理的默认参数来索引你的家目录的话,就直接按<span class="T4">立即开始索引</span>按钮。以后还可以调整配置参数的。</p><p class="P1">如果你想调整某些东西的话,就使用下面的链接来调整其中的索引配置和定时计划吧。</p><p class="P1">这些工具可在以后通过<span class="T4">选项</span>菜单访问。</p></body></html> Indexing configuration 索引配置 This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. 在这里可以调整你想要对其进行索引的目录,以及其它参数,例如:要排除和路径或名字、默认字符集…… Indexing schedule 定时索引任务 This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). 在这里可以选择是要进行批量索引还是实时索引,还可以设置一个自动化的定时(使用cron)批量索引任务。 Start indexing now 立即开始索引 FragButs %1 not found. %1 未找到 %1: %2 %1: %2 Fragment Buttons 片段按钮 Query Fragments 预定义的查询条件 IdxSchedW Index scheduling setup 定时索引设置 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T20:27:11" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T20:30:49" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T1 { font-weight:bold; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1"><span class="T1">Recoll</span> 索引程序可持续运行并且在文件发生变化时对其进行索引,也可以间隔一定时间运行一次。</p><p class="P1">你可以读一下手册,以便更好地做出抉择(按F1)。</p><p class="P1">这个工具可帮助你设置一个自动进行批量索引的定时任务,或者设置成当你登录时便启动实时索引(或者两者同时进行,当然那几乎没有意义)。</p></body></html> Cron scheduling 定时任务 The tool will let you decide at what time indexing should run and will install a crontab entry. 这个工具帮助你确定一个让索引运行的时间,它会插入一个crontab条目。 Real time indexing start up 实时索引设置 Decide if real time indexing will be started when you log in (only for the default index). 作出决定,是否要在登录时便启动实时索引(只对默认索引有效)。 ListDialog Dialog 对话框 GroupBox 分组框 Main No db directory in configuration 配置实例中没有数据库目录 Could not open database in 无法打开数据库于 . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. 。 如果您想要在索引开始前编辑配置文件,请点击取消,或者允许它继续。 Configuration problem (dynconf 配置问题 (dynconf "history" file is damaged or un(read)writeable, please check or remove it: "history"文件被损坏,或者不可(读)写,请检查一下或者删除它: "history" file is damaged, please check or remove it: "history"文件被损坏,请检查一下或者删除它: Needs "Show system tray icon" to be set in preferences! 需要在首选项中选中“显示任务栏图标” PTransEdit Path in index 索引中的路径 Translated path 已变换的路径 Config error 配置错误 Original path 原始路径 Local path 本地路径 PTransEditBase Path Translations 路径变换 Select one or several file types, then use the controls in the frame below to change how they are processed 选中一个或多个文件类型,然后使用下面框框中的控件来设置要如何处理它们 Add 添加 Delete 删除 Cancel 取消 Save 保存 Preview &Search for: 搜索(&S): &Next 下一个(&N) &Previous 上一个(&P) Match &Case 匹配大小写(&C) Clear 清空 Creating preview text 正在创建预览文本 Loading preview text into editor 正在将预览文本载入到编辑器中 Cannot create temporary directory 无法创建临时目录 Cancel 取消 Close Tab 关闭标签页 Missing helper program: 缺少的辅助程序: Can't turn doc into internal representation for 无法为此文件将文档转换成内部表示方式: Cannot create temporary directory: 无法创建临时目录: Error while loading file 文件载入出错 Form Tab 1 标签页1 Open 打开 Canceled 已取消 Error loading the document: file missing. 加载文档时出错:文件丢失 Error loading the document: no permission. 加载文档时出错:无权限 Error loading: backend not configured. 加载错误:后台未配置 Error loading the document: other handler error<br>Maybe the application is locking the file ? 加载文档时出错:其他处理程序错误<br>也许应用程序正在锁定文件? Error loading the document: other handler error. 加载文档时出错:其他处理程序错误 <br>Attempting to display from stored text. <br>试图从存储的文本中显示 Could not fetch stored text 无法获取存储的文本 Previous result document 上一个结果文档 Next result document 下一个结果文档 Preview Window 预览窗口 Close Window 关闭窗口 Next doc in tab 标签中的下一个 Previous doc in tab 标签中上一个 doc Close tab 关闭标签 Print tab Print tab Close preview window 关闭预览窗口 Show next result 显示下一个结果 Show previous result 显示上一个结果 Print 打印 PreviewTextEdit Show fields 显示字段 Show main text 显示主文本 Print 打印 Print Current Preview 打印当前预览文本 Show image 显示图片 Select All 全选 Copy 复制 Save document to file 将文档保存到文件 Fold lines 自动换行 Preserve indentation 保留缩进符 Open document 打开文档 Reload as Plain Text 重新加载为纯文本 Reload as HTML 重新加载为HTML QObject Global parameters 全局参数 Local parameters 局部参数 <b>Customised subtrees <b>自定义的子目录树 The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. 这是已索引的目录树中的一些子目录组成的列表<br>,它们的某些参数需要重定义。默认:空白。 <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>以下的参数,当你在上面的列表中不选中任何条目或者选中一个空行时,<br>就是针对顶级目录起作用的,否则便是对选中的子目录起作用的。<br>你可以点击+/-按钮,以便添加或删除目录。 Skipped names 要略过的文件名 These are patterns for file or directory names which should not be indexed. 具有这些模式的文件或目录不会被索引。 Default character set 默认字符集 This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. 这是用来读取那些未标明自身的字符集的文件时所使用的字符集,例如纯文本文件。<br>默认值是空,会使用系统里的自然语言环境参数中的值。 Follow symbolic links 跟踪符号链接 Follow symbolic links while indexing. The default is no, to avoid duplicate indexing 在索引时跟踪符号链接。默认是不跟踪的,以避免重复索引 Index all file names 对所有文件名进行索引 Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true 对那些无法判断或处理其内容(未知类型或其类型不被支持)的文件的名字进行索引。默认为是 Beagle web history Beagle网页历史 Search parameters 搜索参数 Web history 网页历史 Default<br>character set 默认<br>字符集 Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. 这是用来读取那些未标明自身的字符集的文件时所使用的字符集,例如纯文本文件。<br>默认值是空,会使用系统里的自然语言环境参数中的值。 Ignored endings 忽略的结尾 These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. 这些是仅以内容为 索引的文件的文件名结尾(没有MIME 类型识别尝试,没有解密,没有内容索引。 These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). 这些是仅按名称索引的文件的文件名结尾 (没有尝试识别MIME类型,没有解压缩,没有内容索引) <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>以下的参数,当你在上面的列表中不选中任何条目或者选中一个空行时,<br>就是针对顶级目录起作用的,否则便是对选中的子目录起作用的。<br>你可以点击+/-按钮,以便添加或删除目录。 These are patterns for file or directory names which should not be indexed. 这些是文件或目录名称的模式,不应该被索引。 QWidget Create or choose save directory 创建或选择保存目录 Choose exactly one directory 选择(刚好)一个目录 Could not read directory: 无法读取目录: Unexpected file name collision, cancelling. 意外的文件名冲突,取消中... Cannot extract document: 无法提取文档: &Preview 预览(&P) &Open 打开(&O) Open With 打开方式 Run Script 运行脚本 Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) &Write to File 写入文件(&W) Save selection to files 将选中内容保存到文件中 Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) Find &similar documents 查找类似的文档(&s) Open &Snippets window 打开片断窗口(&S) Show subdocuments / attachments 显示子文档/附件 &Open Parent document 打开父文档(&O) &Open Parent Folder 打开父文件夹(&O) Copy Text 复制文本 Copy &File Path 复制文件路径(&F) Copy File Name 复制文件名 QxtConfirmationMessage Do not show again. 不再显示 RTIToolW Real time indexing automatic start 实时索引自动启动 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-22T21:00:38" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-22T21:02:43" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .P1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:Nimbus Roman No9 L; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; } .T1 { font-weight:bold; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="P1"><span class="T1">Recoll</span> 索引程序可以以守护进程的方式运行,在文件发生变化时便实时更新索引。这样你的索引一直是与文件同步的,但是会占用一定的系统资源。</p></body></html> Start indexing daemon with my desktop session. 在我的桌面会话启动时便启动索引进程。 Also start indexing daemon right now. 同时此次也立即启动索引进程。 Replacing: 正在替换: Replacing file 正在替换文件 Can't create: 无法创建: Warning 警告 Could not execute recollindex 无法执行recollindex Deleting: 正在删除: Deleting file 正在删除文件 Removing autostart 正在删除自动启动项 Autostart file deleted. Kill current process too ? 自动启动文件已经删除。也要杀死当前进程吗? Configuration name 配置名称 Short alphanumeric nickname for this config 这个配置的短字母数字昵称 Could not find 无法找到 RclCompleterModel Hits 存疑 点击量 Hits RclMain About Recoll Recoll说明 Executing: [ 正在执行:[ Cannot retrieve document info from database 无法从数据库获取文档信息 Warning 警告 Can't create preview window 无法创建预览窗口 Query results 查询结果 Document history 文档历史 History data 历史数据 Indexing in progress: 正在索引: Files 文件 Purge 删除 Stemdb Stem数据库 Closing 正在关闭 Unknown 未知 This search is not active any more 这个查询已经不是活跃的了 Can't start query: 可以't 开始查询: Bad viewer command line for %1: [%2] Please check the mimeconf file 针对%1的查看命令[%2]配置出错 请检查mimeconf文件 Cannot extract document or create temporary file 无法提取文档或创建临时文件 (no stemming) (不进行词根扩展) (all languages) (对全部语言进行词根扩展) error retrieving stemming languages 提取词根语言时出错 Update &Index 更新索引(&I) Indexing interrupted 索引已中止 Stop &Indexing 停止索引(&I) All 全部 media 多媒体文件 message 邮件 other 其它 presentation 演示文档 spreadsheet 电子表格 text 文本文件 sorted 已排序 filtered 已过滤 External applications/commands needed and not found for indexing your file types: 需要用来辅助对你的文件进行索引,却又找不到的外部程序/命令: No helpers found missing 目前不缺少任何辅助程序 Missing helper programs 缺少的辅助程序 Save file dialog 保存文件对话框 Choose a file name to save under 选择要保存的文件名 Document category filter 文档分类过滤器 No external viewer configured for mime type [ 针对此种文件类型没有配置外部查看器[ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? 没有找到mimeview中为%1: %2配置的查看器。 是否要打开选项对话框? Can't access file: 无法访问文件: Can't uncompress file: 无法解压缩此文件: Save file 保存文件 Result count (est.) 结果数(估计值) Query details 查询语句细节 Could not open external index. Db not open. Check external index list. 无法打开外部索引。数据库未打开。请检查外部索引列表。 No results found 未找到结果 None Updating 正在更新 Done 已完成 Monitor 监视器 Indexing failed 索引失败 The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone 当前索引进程不是由此界面启动的。点击确定以杀死它,或者点击取消以让它自由运行 Erasing index 正在删除索引 Reset the index and start from scratch ? 从头重新开始索引吗? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program 查询正在进行中。<br>由于索引库的某些限制,<br>取消的话会导致程序退出 Error 错误 Index not open 索引未打开 Index query error 索引查询出错 Indexed Mime Types 索引Mime 类型 Content has been indexed for these MIME types: 已经为这些文件类型索引其内容: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. 此文件的索引已过时。程序拒绝显示错误的条目。请点击确定以更新此文件的索引,等待索引完成之后再查询。或者,取消。 Can't update index: indexer running 无法更新索引:索引程序已在运行 Indexed MIME Types 已索引的文件类型 Bad viewer command line for %1: [%2] Please check the mimeview file 针对%1的查看程序命令不对:%2 请检查mimeview文件 Viewer command line for %1 specifies both file and parent file value: unsupported 针对%1的查看程序命令中同时指定了文件及亲代文件值:这是不支持的 Cannot find parent document 无法找到亲代文档 Indexing did not run yet 还未开始索引 External applications/commands needed for your file types and not found, as stored by the last indexing pass in 在上次的索引过程中发现,针对你的文件类型,还缺少一些外部的程序/命令,它们储存在右侧文件中 Index not up to date for this file. Refusing to risk showing the wrong entry. 此文件的索引内容不是最新的。如果妳按拒绝,则需要自行承担显示错误条目的风险。 Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. 点击确定来更新此文件的索引,在索引完成之后重新执行此查询。否则,请按取消。 Indexer running so things should improve when it's done 索引器正在运行,所以,当它完毕之后世界将变得更美好 Sub-documents and attachments 子文档及附件 Document filter 文档过滤器 Index not up to date for this file. Refusing to risk showing the wrong entry. 此文件的索引不是最新的。拒绝显示错误条目的风险。 Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. 单击确定以更新此文件的索引,然后您将需要在索引完成时重新运行查询。 The indexer is running so things should improve when it's done. 索引器正在运行,所以,当它完毕之后事情会得到改善 The document belongs to an external indexwhich I can't update. 文档属于外部索引,我可以't 更新。 Click Cancel to return to the list. Click Ignore to show the preview anyway. 点击取消返回列表。点击忽略显示预览。 Duplicate documents 重复文档 These Urls ( | ipath) share the same content: 以下路径(|内部路径)之间共享着相同的内容: Bad desktop app spec for %1: [%2] Please check the desktop file Bad desktop app spec for %1: [%2] 请检查桌面文件 Bad paths 坏路径 Bad paths in configuration file: 配置文件中的路径错误: Selection patterns need topdir 选择模式需要顶级目录 Selection patterns can only be used with a start directory 选择模式只能与起始目录一起使用 No search 无搜索结果 No preserved previous search 没有保留的上一次搜索 Choose file to save 选择要保存的文件 Saved Queries (*.rclq) 已保存的查询 (*.rclq) Write failed 写入失败 Could not write to file 无法写入文件 Read failed 读取失败 Could not open file: 无法打开文件 Load error 加载出错 Could not load saved query 无法加载已保存的查询 Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. 打开一个临时副本,如果不保存它们到一个临时位置,编辑内容将会丢失 Do not show this warning next time (use GUI preferences to restore). 下次不要显示此警告(可通过GUI首选项还原该设置) Disabled because the real time indexer was not compiled in. 已禁用,因为未编译实时索引器。 This configuration tool only works for the main index. 该配置工具仅适用于主索引 The current indexing process was not started from this interface, can't kill it 当前索引过程不是从这个接口开始的,可以't 杀死它 The document belongs to an external index which I can't update. 该文档属于一个我可以't 更新的外部索引。 Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). 点击取消返回列表。 <br>点击忽略显示预览(并记住此会话)。 Index scheduling 定时索引任务 Sorry, not available under Windows for now, use the File menu entries to update the index 对不起,目前在 Windows 下不可用,使用文件菜单项来更新索引 Can't set synonyms file (parse error?) 无法设置同义词文件(解析错误?) Index locked 索引已锁定 Unknown indexer state. Can't access webcache file. 未知的索引器状态, 无法访问网络缓存文件。 Indexer is running. Can't access webcache file. 索引器正在运行,无法访问网络缓存文件。 with additional message: 带有附加消息: Non-fatal indexing message: 非致命的索引消息: Types list empty: maybe wait for indexing to progress? 类型列表为空:也许等待索引进行? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported 针对%1的查看程序命令中指定了父文件但是链接是http[s]:这是不支持的 Tools 工具 Results 结果 (%d documents/%d files/%d errors/%d total files) (%d 文档/%d 文件/%d 错误/%d 文件总数) (%d documents/%d files/%d errors) (%d 文档 /%d 文件/%d 错误) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): 配置文件中的路径为空或不存在。 单击“确定”仍然开始建立索引(缺少的数据将不会从索引中清除): Indexing done 索引已完成 Can't update index: internal error 无法更新索引:内部错误 Index not up to date for this file.<br> 此文件的索引内容不是最新的<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>此外,似乎文件的最后一次索引更新失败</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> 点击确定来更新此文件的索引,在索引完成之后你将需要重新执行此查询。<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> 单击“取消”返回到列表。<br>单击“忽略”以始终显示预览(并记住此会话),有显示错误条目的风险。<br/> documents 文档 document 文档 files 文件 file 文件 errors 错误 error 错误 total files) 文件总数) No information: initial indexing not yet performed. 没有信息:初始索引尚未执行 Batch scheduling 批量计划任务 The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. 该工具将让您决定何时运行索引,它使用Windows任务调度器。 Confirm 确认 Erasing simple and advanced search history lists, please click Ok to confirm 删除简单和高级的搜索历史列表。请单击确定确认 Could not open/create file 无法打开/创建文件 F&ilter Filter Could not start recollindex (temp file error) 无法启动 recollindex (temp 文件错误) Could not read: 无法读取: This will replace the current contents of the result list header string and GUI qss file name. Continue ? 这将替换结果列表头字符串和GUI qss文件名中当前的内容。继续吗? You will need to run a query to complete the display change. 您需要运行查询才能完成显示更改。 Simple search type 简单搜索类型 Any term 任一词语 All terms 全部词语 File name 文件名 Query language 查询语言 Stemming language 启用词根扩展的语言 Main Window 主窗口 Focus to Search 焦点搜索 Focus to Search, alt. 聚焦于搜索,备选案文。 Clear Search 清除搜索 Focus to Result Table 焦点到结果表 Clear search 清除搜索 Move keyboard focus to search entry 移动键盘焦点到搜索项 Move keyboard focus to search, alt. 将键盘焦点移动到搜索中,备选。 Toggle tabular display 切换表格显示 Move keyboard focus to table 移动键盘焦点到表 Flushing 正在写入 Show menu search dialog 存疑 显示菜单搜索对话框 Duplicates 存疑 重复的结果 Filter directories 过滤文件夹 Main index open error: 主索引文件打开失败: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. 索引文件可能损坏,请执行xapian-check命令,或者直接重建索引 This search is not active anymore 本次搜索已失效 Viewer command line for %1 specifies parent file but URL is not file:// : unsupported %1的查看器指定了父文件,但URL不是file://格式,因此不受支持 The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? 没有找到在mimeview中为%1: %2配置的查看器。 你想要打开首选项对话框吗? Show advanced search dialog 显示高级搜索对话框 with additional message: RclMainBase Previous page 上一页 Next page 下一页 &File 文件(&F) E&xit 退出(&x) &Tools 工具(&T) &Help 帮助(&H) &Preferences 首选项(&P) Search tools 搜索工具 Result list 结果列表 &About Recoll Recoll说明(&A) Document &History 文档历史(&H) Document History 文档历史 &Advanced Search 高级搜索(&A) Advanced/complex Search 高端/复杂搜索 &Sort parameters 排序参数(&S) Sort parameters 排序参数 Next page of results 下一页结果 Previous page of results 上一页结果 &Query configuration 查询配置(&Q) &User manual 用户手册(&U) Recoll Recoll Ctrl+Q Ctrl+Q Update &index 更新索引(&i) Term &explorer 搜索词浏览器(&e) Term explorer tool 搜索词浏览器 External index dialog 外部索引对话框 &Erase document history 删除文档历史(&E) First page 第一页 Go to first page of results 跳转到结果的第一页 &Indexing configuration 索引配置(&I) All 全部 &Show missing helpers 显示缺少的辅助程序列表(&S) PgDown 向下翻页 Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp 向上翻页 &Full Screen 全屏(&F) F11 F11 Full Screen 全屏 &Erase search history 删除搜索历史(&E) sortByDateAsc 按日期升序排列 Sort by dates from oldest to newest 按日期排列,最旧的在前面 sortByDateDesc 按日期降序排列 Sort by dates from newest to oldest 按日期排列,最新的在前面 Show Query Details 显示查询语句细节 Show results as table 以表格的形式显示结果 &Rebuild index 重新构造索引(&R) &Show indexed types 显示已索引的文件类型(&S) Shift+PgUp Shift+向上翻页 &Indexing schedule 定时索引(&I) E&xternal index dialog 外部索引对话框(&x) &Index configuration 索引设置(&I) &GUI configuration 界面设置(&G) &Results 结果(&R) Sort by date, oldest first 按日期排序,旧文档在前 Sort by date, newest first 按日期排序,新文档在前 Show as table 以表格形式显示 Show results in a spreadsheet-like table 以一个类似于电子表格的形式来显示结果 Save as CSV (spreadsheet) file 保存为CSV(电子表格)文件 Saves the result into a file which you can load in a spreadsheet 将结果保存到一个可用电子表格打开的文件中 Next Page 下一页 Previous Page 上一页 First Page 第一页 Query Fragments 预定义的查询条件 With failed files retrying 正在重试失败的文件 Next update will retry previously failed files 下次更新将重试先前失败的文件 Save last query 保存上一次查询 Load saved query 加载保存的查询 Special Indexing 特殊索引 Indexing with special options 带有特殊选项的索引 Indexing &schedule 定时索引(&s) Enable synonyms 启用同义词 &View 查看(&V) Missing &helpers 缺少的辅助程序 (&h) Indexed &MIME types 已索引的文件类型 (&M) Index &statistics 索引统计 (&s) Webcache Editor Web缓存编辑器 Trigger incremental pass 触发增量更新 E&xport simple search history 导出简单搜索记录(&x) Use default dark mode 使用默认暗色模式 Dark mode 暗色模式 &Query 查询(&Q) Increase results text font size 增大结果列表字体 Increase Font Size 字体增大 Decrease results text font size 减小结果列表字体 Decrease Font Size 减小字体 Start real time indexer 启动实时索引器 Query Language Filters 查询语句过滤器 Filter dates 过滤日期 Filter birth dates 过滤创建日期 Assisted complex search 待定 辅助复杂搜索 Switch Configuration... 切换配置... Choose another configuration to run on, replacing this process 切换到另一份配置,并替换此进程 &User manual (local, one HTML page) 用户手册(本地,一个HTML页面) &Online manual (Recoll Web site) 在线手册(Recoll网站) Path translations 路径翻译 With failed files retrying RclTrayIcon Restore 恢复 Quit 退出 RecollModel Abstract 摘要 Author 作者 Document size 文档尺寸 Document date 文档日期 File size 文件尺寸 File name 文件名 File date 文件日期 Ipath 内部路径 Keywords 关键词 Mime type Mime 类型 Original character set 原字符集 Relevancy rating 相关度 Title 标题 URL 路径 Mtime 修改时间 Date 日期 Date and time 日期及时间 MIME type 文件类型 Can't sort by inverse relevance 无法按逆相关性排序 ResList Result list 结果列表 Unavailable document 无法访问文档 Previous 上一个 Next 下一个 <p><b>No results found</b><br> <p><b>未找到结果</b><br> &Preview 预览(&P) Copy &URL 复制路径(&U) Find &similar documents 查找类似的文档(&s) Query details 查询语句细节 (show query) (显示查询语句细节) Copy &File Name 复制文件名(&F) filtered 已过滤 sorted 已排序 Document history 文档历史 Preview 预览 Open 打开 <p><i>Alternate spellings (accents suppressed): </i> <p><i>其它拼写形式(忽视口音):</i> &Write to File 写入文件(&W) Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) &Open 打开(&O) Documents out of at least 个文档,最少共有 for 个文档,查询条件: <p><i>Alternate spellings: </i> <p><i>其它拼写形式:</i> Open &Snippets window 打开片断窗口(&S) Duplicate documents 重复文档 These Urls ( | ipath) share the same content: 以下路径(|内部路径)之间共享着相同的内容: Result count (est.) 结果数(估计值) Snippets 片断 This spelling guess was added to the search: 待定 这个拼写猜测已添加到搜索中: These spelling guesses were added to the search: 待定 这些拼写猜测已添加到搜索中: ResTable &Reset sort 重置排序条件(&R) &Delete column 删除此列(&D) Add " 添加 " " column " 列 Save table to CSV file 将表格保存成CSV文件 Can't open/create file: 无法打开/创建文件: &Preview 预览(&P) &Open 打开(&O) Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) &Write to File 写入文件(&W) Find &similar documents 查找类似的文档(&s) Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) &Save as CSV 保存为CSV(&S) Add "%1" column 添加"%1"列 Result Table 结果表 Open 打开 Open and Quit 打开并退出 Preview 预览 Show Snippets 显示代码片段 Open current result document 打开当前结果文档 Open current result and quit 打开当前结果并退出 Show snippets 显示代码片段 Show header 显示标题 Show vertical header 显示垂直标题 Copy current result text to clipboard 复制当前结果文本到剪贴板 Use Shift+click to display the text instead. 用Shift + 鼠标单击显示文本 %1 bytes copied to clipboard 已经复制到剪贴板%1字节 Copy result text and quit 复制结果文本并退出 ResTableDetailArea &Preview 预览(&P) &Open 打开(&O) Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) &Write to File 写入文件(&W) Find &similar documents 查找类似的文档(&s) Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) ResultPopup &Preview 预览(&P) &Open 打开(&O) Copy &File Name 复制文件名(&F) Copy &URL 复制路径(&U) &Write to File 写入文件(&W) Save selection to files 将选中内容保存到文件中 Preview P&arent document/folder 预览上一级文档/目录(&a) &Open Parent document/folder 打开上一级文档/目录(&O) Find &similar documents 查找类似的文档(&s) Open &Snippets window 打开片断窗口(&S) Show subdocuments / attachments 显示子文档/附件 Open With 打开方式 Run Script 运行脚本 SSearch Any term 任一词语 All terms 全部词语 File name 文件名 Completions 补全选项 Select an item: 选择一个条目: Too many completions 有太多与之相关的补全选项啦 Query language 查询语句 Bad query string 查询语句格式错误 Out of memory 内存不足 Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="en-US">- no title specified</title><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.title" content="" ns_1:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2012-03-23T08:43:25" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2012-03-23T09:07:39" scheme="DCTERMS.W3CDTF"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.provenance" content="" ns_1:lang="en-US"/><meta xmlns:ns_1="http://www.w3.org/XML/1998/namespace" name="DCTERMS.subject" content="," ns_1:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:12pt;} h1, h2, h3, h4, h5, h6 { clear:both } ol, ul { margin:0; padding:0;} li { list-style: none; margin:0; padding:0;} <!-- "li span.odfLiEnd" - IE 7 issue--> li span. { clear: both; line-height:0; width:0; height:0; margin:0; padding:0; } span.footnodeNumber { padding-right:1em; } span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000; margin:0; border:0; padding:0; } * { margin:0;} .Standard { font-size:12pt; font-family:Nimbus Roman No9 L; writing-mode:page; } .T1 { font-style:italic; } .T2 { font-style:italic; } .T4 { font-weight:bold; } <!-- ODF styles with no properties representable as CSS --> { } </style></head><body dir="ltr" style="max-width:21.001cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><p class="Standard">输入查询语言表达式。简要说明:<br/><span class="T2">词语</span><span class="T1">1 </span><span class="T2">词语</span><span class="T1">2</span> : '词语1'和'词语2'同时出现在任意字段中。<br/><span class="T2">字段</span><span class="T1">:</span><span class="T2">词语</span><span class="T1">1</span> : '词语1'出现在字段'字段'中。<br/>标准字段名/同义名:<br/>title/subject/caption、author/from、recipient/to、filename、ext。<br/>伪字段名:dir、mime/format、type/rclcat、date。<br/>日期段的两个示例:2009-03-01/2009-05-20 2009-03-01/P2M。<br/><span class="T2">词语</span><span class="T1">1 </span><span class="T2">词语</span><span class="T1">2 OR </span><span class="T2">词语</span><span class="T1">3</span> : 词语1 <span class="T4">与</span> (词语2 <span class="T4">或</span> 词语3)。<br/>不允许用真正的括号来表示逻辑关系。<br/><span class="T1">"</span><span class="T2">词语</span><span class="T1">1 </span><span class="T2">词语</span><span class="T1">2"</span> : 词组(必须按原样出现)。可用的修饰词:<br/><span class="T1">"</span><span class="T2">词语</span><span class="T1">1 </span><span class="T2">词语</span><span class="T1">2"p</span> : 以默认距离进行的无序近似搜索。<br/>有疑问时可使用<span class="T4">显示查询语句细节</span>链接来查看查询语句的细节,另外请查看手册(&lt;F1&gt;)以了解更多内容。</p></body></html> Enter file name wildcard expression. 输入文件名通配符表达式。 Enter search terms here. Type ESC SPC for completions of current term. 在此输入要搜索的词语。按Esc 空格来查看针对当前词语的补全选项。 Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. 输入查询语言表达式。 作弊表单:<br> <i>term1 termin2</i> : 'term1' 和 'term2' 在任何字段中。<br> <i>field:term 1</i> : 'terms 1' in field 'field'<br> 标准字段名称/同义词:<br> title/subject/caption, author/from recordent/to filename, ext.<br> 伪片段: dir, mime/form, type/rclcat, date, size<br> 日期间隔: 2009-03-01/2009-05-20, 2009-03-01/P2M<br> <i>term 1 term2 or terms 3</i> : terms 1 AND (terms 2 or terms 3)。<br> 您可以使用括号使事情更加清楚。<br> <i>"术语1 术语2"</i> : 短语(必须准确发生)。 可能的修饰符:<br> <i>"term 1 terms 2"p</i> : 无顺序的距离近距离搜索。<br> 当对结果存有疑问时使用 <b>显示查询</b> 链接,看看手册(&lt; 1>获取更多细节。 Stemming languages for stored query: 已保存的查询语句的词根语言 differ from current preferences (kept) 与当前的偏好设置不同(已保留) Auto suffixes for stored query: 保存的查询的自动后缀: External indexes for stored query: 保存的查询的外部索引: Autophrase is set but it was unset for stored query 启用了自动生成短语功能,但保存的查询没有启用该功能 Autophrase is unset but it was set for stored query 当前程序为启用自动生成短语功能,但保存的查询启用了 Enter search terms here. 在此处输入搜索词 <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; 边界: 1px 固体黑色; border-collapse: collapse; border-collapse: collapse; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>查询语言作弊表。有疑问:点击 <b>显示查询</b>。&nbsp; You should really look at the manual (F1)</p> 查询语句的语法非常重要,务必读一遍完整手册(F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>搜索符(操作符)</th><th>示例</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>AND 且运算符</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>OR 或运算符</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>复杂查询。OR 运算符优先级高于 AND,需要加括号改变运算优先级&nbsp; where needed</td><td>(one AND two) OR three</td></tr> </td><td>(one AND two) OR three</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>NOT 非运算符</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>查询短语</td><td>"pride and prejudice"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>无干燥扩展:大写</td><td>地板</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>查询特定字段</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>在字段查询内使用AND操作符(没有顺序)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>在字段查询中使用OR运算符</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>字段名</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>过滤文件目录</td><td>dir:home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>过滤MIME类型</td><td>mime:text/plem mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>过滤日期</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> 日期:2018&nbsp;&nbsp;日期:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>过滤文件体积</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index 打开索引失败 Could not restore external indexes for stored query:<br> 无法恢复存储查询的外部索引:<br> ??? ??? Using current preferences. 使用当前首选项。 Simple search 简单搜索 History 待定 简单搜索历史记录 <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <p>查询语句的简单语法。如果对查询语句有疑问,请搜索之后点击搜索结果上面的: <b>显示查询语句细节</b>.&nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>将单词大写以避免搜索词扩展</td><td>Floor</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear 清空 Ctrl+S Ctrl+S Erase search entry 删除搜索条目 Search 搜索 Start query 开始查询 Enter search terms here. Type ESC SPC for completions of current term. 在此输入要搜索的词语。按Esc 空格来查看针对当前词语的补全选项。 Choose search type. 选择搜索类型。 Show query history 显示查询语句历史 Enter search terms here. 在此处输入搜索词 Main menu 主菜单 SearchClauseW SearchClauseW 搜索条款 Any of these 其中任意一个 All of these 所有这些内容 None of these 所有这些都没有 This phrase 这个短语 Terms in proximity 接近条款 File name matching 文件名匹配 Select the type of query that will be performed with the words 选择要对右边的词语进行的查询类型 Number of additional words that may be interspersed with the chosen ones 允许在选中的词语之间出现的额外词语的个数 In field 在字段 No field 不限字段 Any 任意 All 全部 None Phrase 词组 Proximity 近似 File name 文件名 Snippets Snippets 片断 X X Find: 查找: Next 下一个 Prev 上一个 SnippetsW Search 搜索 <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>很抱歉,在限制范围内未找到完全匹配的内容。 可能是文档很大,片段生成器迷失在迷宫了。</ p> Sort By Relevance 按相关性排序 Sort By Page 按页数排序 Snippets Window 代码片段窗口 Find 查找 Find (alt) 查找(Alt) Find Next 查找下一个 Find Previous 查找上一个 Hide 隐藏 Find next 查找下一个 Find previous 查找上一个 Close window 关闭窗口 Increase font size 增大字体 Decrease font size 减小字体 SortForm Date 日期 Mime type Mime 类型 SortFormBase Sort Criteria 排序条件 Sort the 排序 most relevant results by: 最相关的成果包括: Descending 降序 Close 关闭 Apply 应用 SpecIdxW Special Indexing 特殊索引 Do not retry previously failed files. 不要重试以前失败的文件。 Else only modified or failed files will be processed. 否则,仅处理已修改或失败的文件。 Erase selected files data before indexing. 索引前擦除所选文件的数据 Directory to recursively index 递归索引目录 Browse 浏览 Start directory (else use regular topdirs): 启动目录 (否则使用普通的顶部目录): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. 留空以选择所有文件。 您可以使用多个以空格分隔的shell类型的模式。<br>带有嵌入式空格的模式应该用双引号括起来。<br>仅在设置了起始目标时才能使用 Selection patterns: 选择模式: Top indexed entity 最上面的索引实体 Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). 要递归索引的目录。它必须位于配置文件(topdirs)中定义的常规索引区域中。 Retry previously failed files. 重试之前失败的文件 Start directory. Must be part of the indexed tree. We use topdirs if empty. 启动目录。必须是索引树的一部分。如果为空,我们使用顶级目录。 Start directory. Must be part of the indexed tree. Use full indexed area if empty. 启动目录。 必须是索引树的一部分。 如果为空,请使用完整的索引区域。 Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). 输出的诊断文件。(某些文件未被索引的原因) Diagnostics file 诊断文件 SpellBase Term Explorer 搜索词浏览器 &Expand 展开(&E) Alt+E Alt+E &Close 关闭(&C) Alt+C Alt+C Term 词语 No db info. 未找到数据库信息。 Doc. / Tot. 文档数/总数 Match 匹配 Case 大小写 Accents 口音 SpellW Wildcards 通配符 Regexp 正则表达式 Spelling/Phonetic 拼写/发音检查 Aspell init failed. Aspell not installed? Aspell初始化失败。是否未安装Aspell? Aspell expansion error. Aspell扩展出错。 Stem expansion 词根扩展 error retrieving stemming languages 提取词根语言时出错 No expansion found 未找到扩展 Term 词语 Doc. / Tot. 文档数/总数 Index: %1 documents, average length %2 terms 索引:%1个文档,平均长度为%2个词语 Index: %1 documents, average length %2 terms.%3 results 索引:%1个文档,平均长度为%2个单词。%3个结果 %1 results %1个结果 List was truncated alphabetically, some frequent 列表已按字母顺序截断,某个常见 terms may be missing. Try using a longer root. 的单词可能会缺失。请尝试使用一个更长的词根。 Show index statistics 显示索引统计信息 Number of documents 文档个数 Average terms per document 每个文档中的平均单词个数 Smallest document length 最小文档长度 Longest document length 最大文档长度 Database directory size 数据库目录尺寸 MIME types: 多媒体文档类型列表: Item 条目 Value Smallest document length (terms) 最小文档长度(词语) Longest document length (terms) 最大文档长度(词语) Results from last indexing: 上一次索引的结果: Documents created/updated 文档已创建/更新 Files tested 文件已测试 Unindexed files 未索引的文件 List files which could not be indexed (slow) 列出无法建立索引的文件(缓慢) Spell expansion error. 拼写扩展出错 Spell expansion error. 待定 拼写扩展错误。 Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index 选中的目录不是Xapian索引 This is the main/local index! 这是主要/本地索引! The selected directory is already in the index list 选中的目录已经在索引列表中 Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) 选择xapian索引目录(例如:/home/buddy/.recoll/xapiandb) error retrieving stemming languages 提取词根语言时出错 Choose 选择 Result list paragraph format (erase all to reset to default) 结果列表的段落格式(删除全部内容即可重置为默认状态) Result list header (default is empty) 结果列表表头(默认为空) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) 选择recoll配置目录或xapian索引目录(例如:/home/me/.recoll 或 /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read 所选中的目录看起来像是一个Recoll配置目录,但是其中的配置内容无法读取 At most one index should be selected 最多应当选中一个索引 Cant add index with different case/diacritics stripping option 无法添加带有不同的大小写/诊断信息裁剪方式的索引 Default QtWebkit font 默认QtWebkit字体 Any term 任一词语 All terms 全部词语 File name 文件名 Query language 查询语句 Value from previous program exit 上次启动时使用的选项 Context 上下文(功能位置) Description 描述 Shortcut 快捷方式 Default 默认设置 Choose QSS File 选择QSS文件 Can't add index with different case/diacritics stripping option. 大小写/分隔符清理选项不同,索引添加失败。 Light 轻量级 Dark System 系统 UIPrefsDialogBase User interface 用户界面 Number of entries in a result page 一个结果页面中显示的结果条数 Result list font 结果列表字体 Helvetica-10 文泉驿微米黑-12 Opens a dialog to select the result list font 打开一个对话框,以选择用于结果列表的字体 Reset 重置 Resets the result list font to the system default 将结果列表中的字体重设为系统默认值 Auto-start simple search on whitespace entry. 输入空格时自动开始进行简单搜索。 Start with advanced search dialog open. 启动时打开高端搜索对话框。 Start with sort dialog open. 开始时打开排序对话框。 Search parameters 搜索参数 Stemming language 词根语言 Dynamically build abstracts 动态构造摘要 Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. 是否要使用查询词语周围的上下文来构造结果列表条目中的摘要? 对于大的文档可能会很慢。 Replace abstracts from documents 取代文档中自带的摘要 Do we synthetize an abstract even if the document seemed to have one? 即使文档本身拥有一个摘要,我们仍然自行合成摘要信息? Synthetic abstract size (characters) 合成摘要长度(字符个数) Synthetic abstract context words 合成摘要上下文 External Indexes 外部索引 Add index 添加索引 Select the xapiandb directory for the index you want to add, then click Add Index 选择您想要添加的索引的 xapiandb 目录,然后单击添加索引 Browse 浏览 &OK 确定(&O) Apply changes 使改变生效 &Cancel 取消(&C) Discard changes 放弃这些改变 Result paragraph<br>format string 结果段落<br>格式字符串 Automatically add phrase to simple searches 自动将词组添加到简单搜索中 A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. 对[滚 石] (2个词语)的搜索会变成[滚 or 石 or (滚 2个词语 石)]。 对于那些搜索词语在其中按照原样出现的结果,其优先级会高一些。 User preferences 用户选项 Use desktop preferences to choose document editor. 使用桌面系统的设置来选择文档编辑器。 External indexes 外部索引 Toggle selected 切换选中项 Activate All 全部激活 Deactivate All 全部禁用 Remove selected 删除选中项 Remove from list. This has no effect on the disk index. 从列表中删除。这不会对硬盘上的索引造成损害。 Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> 定义每个结果列表段落的格式。 使用 qt html 格式和像打印一样的替换:<br>%A 摘要<br> %D 日期<br> %I 图标图像名称<br> %K 关键字(如果有的话)<br> %L 预览并编辑链接<br> %M Mime 类型<br> %N 结果编号<br> %R 相关性百分比<br> %S 大小信息<br> %T 标题<br> %U Url<br> Remember sort activation state. 记住排序状态。 Maximum text size highlighted for preview (megabytes) 在预览中对其进行高亮显示的最大文本尺寸(兆字节) Texts over this size will not be highlighted in preview (too slow). 超过这个长度的文本不会在预览窗口里高亮显示(太慢)。 Highlight color for query terms 查询词语的高亮颜色 Prefer Html to plain text for preview. 预览中优先使用Html。 If checked, results with the same content under different names will only be shown once. 如果选中这个,则拥有相同文件内容的不同文件名只会显示一个。 Hide duplicate results. 隐藏重复结果。 Choose editor applications 选择编辑器程序 Display category filter as toolbar instead of button panel (needs restart). 将文件类型过滤器显示成工具条,而不是按钮面板(需要重启程序)。 The words in the list will be automatically turned to ext:xxx clauses in the query language entry. 这个列表中的词语会在查询语言输入框里自动变成ext:xxx语句。 Query language magic file name suffixes. 查询语言神奇文件名后缀。 Enable 启用 ViewAction Changing actions with different current values 正在针对不同的当前值而改变动作 Mime type Mime 类型 Command 命令 MIME type 文件类型 Desktop Default 桌面默认值 Changing entries with different current values 正在使用不同的当前值来修改条目 ViewActionBase File type 文件类型 Action 行 动 Select one or several file types, then click Change Action to modify the program used to open them 选中一个或多个文件类型,然后点击“修改动作”来修改用来打开这些文件的程序 Change Action 修改动作 Close 关闭 Native Viewers 本地查看器 Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. 选中一个或多个文件类型祟点击“修改动作”<br>或者可以关闭这个对话框,而在主面板中选中“使用桌面默认设置”<br>那样就会无视这个列表而使用桌面的默认设置。 Select one or several mime types then use the controls in the bottom frame to change how they are processed. 选中一个或多个文件类型,然后使用下面框框中的控件来设置要如何处理它们。 Use Desktop preferences by default 默认使用桌面本身的设置 Select one or several file types, then use the controls in the frame below to change how they are processed 选中一个或多个文件类型,然后使用下面框框中的控件来设置要如何处理它们 Exception to Desktop preferences 针对桌面默认值的例外 Action (empty -> recoll default) 动作(空白则表示使用recoll的默认值) Apply to current selection 应用到当前选中项上 Recoll action: Recoll动作: current value 当前值 Select same 选中相同的项 <b>New Values:</b> <b>新的值:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. 该值是要执行的命令行。替换:%s:搜索字符串;%p:页码;<br>%f:文档文件名。按F1获取更多帮助。 Webcache Webcache editor Webcache编辑器 Search regexp 搜索正则表达式 TextLabel 文本标签 WebcacheEdit Copy URL 复制路径 Unknown indexer state. Can't edit webcache file. 未知的索引器状态,无法编辑webcache文件 Indexer is running. Can't edit webcache file. 索引器正在运行,无法编辑webcache文件 Delete selection 删除选中内容 Webcache was modified, you will need to run the indexer after closing this window. Webcache已修改,您将需要在关闭此窗口后运行索引器 Save to File 保存到文件 File creation failed: 文件创建失败: Maximum size %1 (Index config.). Current size %2. Write position %3. 最大体积 %1(索引配置);当前体积 %2;写入位置 %3。 WebcacheModel MIME 文件类型 Url 路径 Date 日期 Size 文件尺寸 URL 路径(URL) WinSchedToolW Error 错误 Configuration not initialized 配置未初始化 <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>重新索引批处理计划</h3><p>我们为此使用标准的 Windows 任务调度器。 当您点击下面的按钮时,程序将启动。</p><p>您可以使用完整界面 (<i>在右边的菜单中创建任务</i> ), 或简化的 <i>创建基本任务</i> 向导。 在这两种情况下,下面列出的批处理文件路径为 <i>操作</i> 需要执行。</p> Command already started 命令已经启动 Recoll Batch indexing 批量索引 Start Windows Task Scheduler tool 启动 Windows 任务计划工具 Could not create batch file 待定 不能创建批量索引所需的文件 confgui::ConfBeaglePanelW Steal Beagle indexing queue 窃取Beagle索引队列 Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) 不可运行Beagle。启用对beagle队列的处理,以索引火狐网页历史。<br>(你还需要安装火狐Beagle插件) Web cache directory name 网页缓存目录名称 The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. 用于存储访问网页缓存的目录名。<br>相对于配置目录使用非绝对路径。 Max. size for the web cache (MB) 网页缓存最大大小 (MB) Entries will be recycled once the size is reached 当尺寸达到设定值时,这些条目会被循环使用 Web page store directory name 网页储存目录名 The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. 用来储存复制过来的已访问网页的目录名。<br>如果使用相对路径,则会相对于配置目录的路径进行处理。 Max. size for the web store (MB) 网页存储的最大尺寸(MB) Process the WEB history queue 处理网页历史队列 Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) 启用对火狐的已访问页面进行索引。<br>(妳还需要安装火狐的Recoll插件) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). 一旦大小达到,条目将被回收。<br>仅增加大小确实有意义,因为减小该值不会截断现有文件(最后只是浪费空间而已) confgui::ConfIndexW Can't write configuration file 无法写入配置文件 Recoll - Index Settings: Recoll - 索引设置: confgui::ConfParamFNW Browse 浏览 Choose 选择 confgui::ConfParamSLW + + - - Add entry 添加条目 Delete selected entries 删除选中的条目 ~ ~ Edit selected entries 编辑选中的条目 confgui::ConfSearchPanelW Automatic diacritics sensitivity 自动判断大小写 <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>如果搜索语句中包含带有口音特征(不在unac_except_trans中)的话,则自动触发大小写的判断。否则,妳需要使用查询语言和<i>D</i>修饰符来指定对大小写的判断。 Automatic character case sensitivity 自动调整字符的大小写敏感性 <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>如果搜索语句中除首字母之外包含有大写字母的话,则自动触发大小写的判断。否则,妳需要使用查询语言和<i>C</i>修饰符来指定对大小写的判断。 Maximum term expansion count 最大词根扩展数目 <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>针对单个单词的最大词根扩展数目(例如:此选项在使用通配符时会生效)。默认的10000是一个狠合理的值,能够避免当引擎遍历词根列表时引起查询界面假死。 Maximum Xapian clauses count 最大的Xapian子句数目 <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>我们向单个Xapian查询语句中加入的最大的子句数目。某些情况下,词根扩展的结果会是倍增的,而我们想要避免使用过多内存。默认的100000应当既能满足日常的大部分要求,又能与当前的典型硬件配置相兼容。 confgui::ConfSubPanelW Global 全局 Max. compressed file size (KB) 压缩文件最大尺寸(KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. 尺寸大于这个值的压缩文件不会被处理。设置成-1以表示不加任何限制,设置成0以表示根本不处理压缩文件。 Max. text file size (MB) 文本文件最大尺寸(MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. 尺寸大于这个值的文本文件不会被处理。设置成-1以表示不加限制。 其作用是从索引中排除巨型的记录文件。 Text file page size (KB) 文本文件单页尺寸(KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). 如果设置咯这个值(不等于-1),则文本文件会被分割成这么大的块,并且进行索引。 这是用来搜索大型文本文件的(例如记录文件)。 Max. filter exec. time (S) 过滤器的最长执行时间(S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. 外部过滤器的执行时间如果超过这个值,则会被强行中断。在罕见的情况下,某些文档(例如postscript)会导致过滤器陷入死循环。设置成-1以表示不加限制。 External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. 工作时间长于这个值的外部过滤器会被中断。这是针对某种特殊情况的,该情况下,一个文档可能引起过滤器无限循环下去(例如:postscript)。设置为-1则表示不设限制。 Only mime types 仅MIME类型 An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive 已索引的MIME类型的排除列表。<br>其他将不被索引。 通常为空且不活动 Exclude mime types 排除MIME类型 Mime types not to be indexed MIME类型将不被索引 Max. filter exec. time (s) 最大筛选执行时间(秒) confgui::ConfTabsW Apply 应用 confgui::ConfTopPanelW Top directories 顶级目录 The list of directories where recursive indexing starts. Default: your home. 索引从这个列表中的目录开始,递归地进行。默认:你的家目录。 Skipped paths 略过的路径 These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') 索引进程不会进入具有这些名字的目录。<br>可以包含通配符。必须匹配索引进程自身所见到的路径(例如:如果topdirs包含'/home/me',而实际上'/home'是到'/usr/home'的链接,则正确的skippedPath条目应当是'/home/me/tmp*',而不是'/usr/home/me/tmp*') Stemming languages 词根语言 The languages for which stemming expansion<br>dictionaries will be built. 将会针对这些语言<br>构造词根扩展词典。 Log file name 记录文件名 The file where the messages will be written.<br>Use 'stderr' for terminal output 程序输出的消息会被保存到这个文件。<br>使用'stderr'以表示将消息输出到终端 Log verbosity level 记录的话痨级别 This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. 这个值调整的是输出的消息的数量,<br>其级别从仅输出报错信息到输出一大堆调试信息。 Index flush megabytes interval 刷新索引的间隔,兆字节 This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB 这个值调整的是,当积累咯多少索引数据时,才将数据刷新到硬盘上去。<br>用来控制索引进程的内存占用情况。默认为10MB Max disk occupation (%) 最大硬盘占用率(%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). 当硬盘的占用率达到这个数时,索引会失败并且停止(以避免塞满你的硬盘)。<br>设为0则表示不加限制(这是默认值)。 No aspell usage 不使用aspell Aspell language Aspell语言 The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. aspell词典的语言。表示方式是'en'或'fr'……<br>如果不设置这个值,则会使用系统环境中的自然语言设置信息,而那个通常是正确的。要想查看你的系统中安装咯哪些语言的话,就执行'aspell config',再在'data-dir'目录中找.dat文件。 Database directory name 数据库目录名 The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. 用来储存索引数据的目录的名字<br>如果使用相对路径,则路径会相对于配置目录进行计算。默认值是'xapiandb'。 Use system's 'file' command 使用系统里的'file'命令 Use the system's 'file' command if internal<br>mime type identification fails. 当内部的文件类型识别功能失效时<br>使用系统里的'file'命令。 Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. 禁止在词语探索器中使用aspell来生成拼写相近的词语。<br>在没有安装aspell或者它工作不正常时使用这个选项。 The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. aspell词典的语言。表示方式是'en'或'fr'……<br>如果不设置这个值,则会使用系统环境中的自然语言设置信息,而那个通常是正确的。要想查看你的系统中安装咯哪些语言的话,就执行'aspell config',再在'data-dir'目录中找.dat文件。 The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. 用来储存索引数据的目录的名字<br>如果使用相对路径,则路径会相对于配置目录进行计算。默认值是'xapiandb'。 Unac exceptions Unac例外 <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>这是针对unac机制的例外,默认情况下,该机制会删除所有的判断信息,并进行正规的分解。妳可以按照自己的语言的特点针对某个字符覆盖掉口音解除设置,以及指定额外的分解(例如,针对复数)。在每个由空格分隔的条目中,第一个字符是源字符,剩下的就是翻译。 These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') 索引输入的目录的路径名。<br>路径元素可能包含通配符。 条目必须与索引器看到的路径匹配(例如:如果顶级路径包含 '/home/me' ,并且 '/home' 实际上是 '/usr/home' 的链接,则正确的相对路径条目应为 '/home/me/tmp*' ,而不是 '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) 最大硬盘占用率(%, 0代表没有限制) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. 这是磁盘使用量(是总磁盘使用量而不是索引大小)的百分比,在该百分比下索引将失败并停止。<br>默认值0将消除所有限制。 uiPrefsDialogBase User preferences 用户选项 User interface 用户界面 Number of entries in a result page 一个结果页面中显示的结果条数 If checked, results with the same content under different names will only be shown once. 如果选中这个,则拥有相同文件内容的不同文件名只会显示一个。 Hide duplicate results. 隐藏重复结果。 Highlight color for query terms 查询词语的高亮颜色 Result list font 结果列表字体 Opens a dialog to select the result list font 打开一个对话框,以选择用于结果列表的字体 Helvetica-10 文泉驿微米黑-12 Resets the result list font to the system default 将结果列表中的字体重设为系统默认值 Reset 重置 Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> 定义每个结果列表段落的格式。 使用 qt html 格式和像打印一样的替换:<br>%A 摘要<br> %D 日期<br> %I 图标图像名称<br> %K 关键字(如果有的话)<br> %L 预览并编辑链接<br> %M Mime 类型<br> %N 结果编号<br> %R 相关性百分比<br> %S 大小信息<br> %T 标题<br> %U Url<br> Result paragraph<br>format string 结果段落<br>格式字符串 Texts over this size will not be highlighted in preview (too slow). 超过这个长度的文本不会在预览窗口里高亮显示(太慢)。 Maximum text size highlighted for preview (megabytes) 在预览中对其进行高亮显示的最大文本尺寸(兆字节) Use desktop preferences to choose document editor. 使用桌面系统的设置来选择文档编辑器。 Choose editor applications 选择编辑器程序 Display category filter as toolbar instead of button panel (needs restart). 将文件类型过滤器显示成工具条,而不是按钮面板(需要重启程序)。 Auto-start simple search on whitespace entry. 输入空格时自动开始进行简单搜索。 Start with advanced search dialog open. 启动时打开高级搜索对话框。 Start with sort dialog open. 开始时打开排序对话框。 Remember sort activation state. 记住排序状态。 Prefer Html to plain text for preview. 预览中优先使用Html。 Search parameters 搜索参数 Stemming language 启用词根扩展的语言 A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. 对[rolling stones] (2个搜索词)的搜索会变成[rolling or stones or (rolling phrase 2 stones)]。 符合初始搜索词的文档在结果列表中拥有更高的优先级。 Automatically add phrase to simple searches 为简单搜索自动添加搜索词 Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. 是否要使用查询词语周围的上下文来构造结果列表条目中的摘要? 对于大的文档可能会很慢。 Dynamically build abstracts 动态构造摘要 Do we synthetize an abstract even if the document seemed to have one? 即使文档本身拥有一个摘要,我们仍然自行合成摘要信息? Replace abstracts from documents 取代文档中自带的摘要 Synthetic abstract size (characters) 合成摘要长度(字符个数) Synthetic abstract context words 合成摘要上下文 The words in the list will be automatically turned to ext:xxx clauses in the query language entry. 这个列表中的词语会变成ext:xxx自动添加到查询语句的输入框里。 Query language magic file name suffixes. 在查询语句中自动筛选文件后缀 Enable 启用 External Indexes 外部索引 Toggle selected 切换选中项 Activate All 全部激活 Deactivate All 全部禁用 Remove from list. This has no effect on the disk index. 从列表中删除。这不会对硬盘上的索引造成损害。 Remove selected 删除选中项 Click to add another index directory to the list 点击这里,以将另一个索引目录添加到列表中 Add index 添加索引 Apply changes 使改变生效 &OK 确定(&O) Discard changes 放弃这些改变 &Cancel 取消(&C) Abstract snippet separator 摘要中的片段的分隔符 Use <PRE> tags instead of <BR>to display plain text as html. 使用 <PRE> 标签而不是 <BR>来显示纯文本为 html 。 Lines in PRE text are not folded. Using BR loses indentation. PRE 文本中的行未折叠。使用 BR 丢失缩进. Style sheet 样式单 Opens a dialog to select the style sheet file 打开一个对话框,以选择样式单文件 Choose 选择 Resets the style sheet to default 将样式单重置为默认值 Lines in PRE text are not folded. Using BR loses some indentation. PRE中的文字不会换行。使用BR的话会使一些缩进失效。 Use <PRE> tags instead of <BR>to display plain text as html in preview. 在将纯文本显示成html预览的时候,使用<PRE>标签,而不是<BR>标签。 Result List 结果列表 Edit result paragraph format string 编辑结果段落的格式字符串 Edit result page html header insert 编辑结果页面的html头部插入项 Date format (strftime(3)) 日期格式(strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). 待定 如果一个搜索词出现的频率超过了某个阈值,我们就不会在自动生成短语功能中使用它。 频率过高的搜索词会极大影响搜索性能。 跳过这些搜索词则会提高搜索短语的自由度,但同时也会降低自动升段短语功能的搜索能力。默认情况下,该阈值设定为2%。 Autophrase term frequency threshold percentage 生成短语功能的频率阈值百分比 Plain text to HTML line style 纯文本转换为HTML换行符的风格 Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. PRE文本中的那些行是不会被折叠的。使用BR会丢失一些缩进信息。PRE+换行风格可能才是你想要的。 <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE>+换行 Exceptions 例外 Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. 即使设置了 "使用桌面首选项" 时也不应传递到 xdg-open 的 Mime 类型。<br> 将页码和搜索字符串选项传递给例如evince。 Disable Qt autocompletion in search entry. 禁止在查询输入框中使用Qt的自动补全 Search as you type. 在输入的同时进行搜索。 Paths translations 路径变换 Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. 点击此处以向列表中加入另一个索引目录。你可以选择一个Recoll配置目录或一个Xapian索引。 Snippets window CSS file 片断窗口的CSS文件 Opens a dialog to select the Snippets window CSS style sheet file 打开一个对话框,以选择片断窗口的CSS样式单文件 Resets the Snippets window style 重置片断窗口的样式 Decide if document filters are shown as radio buttons, toolbar combobox, or menu. 确定文档过滤器是否显示为单选按钮,工具栏组合框或菜单。 Document filter choice style: 文档过滤器选择样式: Buttons Panel 按钮面板 Toolbar Combobox 工具栏组合框 Menu 菜单 Show system tray icon. 显示系统托盘图标 Close to tray instead of exiting. 关闭到托盘而不是退出 Start with simple search mode 从简单的搜索模式开始 Show warning when opening temporary file. 打开临时文件时显示警告 User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. 应用于代码片段窗口的用户样式。<br>注意:结果页面标题插入也包含在代码片段窗口标题中。 Synonyms file 同义词文件 Highlight CSS style for query terms 查询词语的高亮CSS样式 Recoll - User Preferences Recoll - 用户选项 Set path translations for the selected index or for the main one if no selection exists. 如果没有选择,则为所选索引或主索引设置路径转换。 Activate links in preview. 在预览窗口中激活链接 Make links inside the preview window clickable, and start an external browser when they are clicked. 使预览窗口中的链接可点击,并在点击时启动外部浏览器。 Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... 查询结果中突出显示的字词。 <br>也许可以尝试使用 "color:red;background:yellow" 之类的,而不是默认的蓝色。 Start search on completer popup activation. 完成程序弹出窗口激活时开始搜索 Maximum number of snippets displayed in the snippets window 代码片段窗口中显示的片段最大数 Sort snippets by page number (default: by weight). 按页数排序代码片段 (默认按大小排序) Suppress all beeps. 禁止所有蜂鸣声 Application Qt style sheet 应用程序 Qt 样式表 Limit the size of the search history. Use 0 to disable, -1 for unlimited. 限制搜索历史的数目。使用 0 禁用, -1 无限制 Maximum size of search history (0: disable, -1: unlimited): 搜索历史的最大值(0: 禁用, -1: 无限制): Generate desktop notifications. 使用桌面通知 Misc 杂项 Work around QTBUG-78923 by inserting space before anchor text 通过在锚文本前插入空格临时解决QTBUG-78923 Display a Snippets link even if the document has no pages (needs restart). 即使文档没有页面显示片断链接(需要重启)。 Maximum text size highlighted for preview (kilobytes) 预览的最大文本大小(KB) Start with simple search mode: 程序启动时的默认搜索方式: Hide toolbars. 隐藏工具栏。 Hide status bar. 隐藏状态栏。 Hide Clear and Search buttons. 隐藏清除和搜索按钮。 Hide menu bar (show button instead). 隐藏菜单栏 (显示按钮)。 Hide simple search type (show in menu only). 隐藏简单的搜索类型 (仅在菜单中显示)。 Shortcuts 快捷键 Hide result table header. 隐藏结果表标题 Show result table row headers. 显示结果表行标题 Reset shortcuts defaults 重置快捷方式默认值 Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. 禁用 Ctrl+[0-9]/[a-z] 快捷键以跳转到表格行。 Use F1 to access the manual 使用 F1 访问手册 Hide some user interface elements. 隐藏一些用户界面元素 Hide: 隐藏: Toolbars 工具栏 Status bar 状态栏 Show button instead. 待定 显示按钮 Menu bar 菜单栏 Show choice in menu only. 只在菜单中显示选项 Simple search type 简单搜索 Clear/Search buttons 清空/搜索 按钮 Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. 待定 禁用Ctrl+[0-9]和Shift+[a-z]这些选择搜索结果行数的快捷键 None (default) 无(默认值) Uses the default dark mode style sheet 使用默认的暗色模式式样 Dark mode 暗色模式 Choose QSS File 选择QSS文件 To display document text instead of metadata in result table detail area, use: 待定 为了在结果列表的详情中显示文档内容而不是文档元数据,请使用: left mouse click 鼠标左键点击 Shift+click Shift + 鼠标点击 Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. 打开窗口选择式样文件<br>比如选择/usr/share/recoll/examples/recoll[-dark].qss Result Table 结果表 Do not display metadata when hovering over rows. 待定 鼠标悬停在结果表时不显示元数据 Work around Tamil QTBUG-78923 by inserting space before anchor text 通过在锚文本前插入空格来绕过Qt的泰米尔语bug(QTBUG-78923) The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. 该错误会导致突出显示的泰米尔语单词内显示一个奇怪的圆圈字符。解决方法是插入一个额外的空格字符,似乎可以解决这个问题。 Depth of side filter directory tree 目录树过滤器的深度 Zoom factor for the user interface. Useful if the default is not right for your screen resolution. 用户界面的缩放因数。如果默认值不适合你的屏幕,请修改这个值。 Display scale (default 1.0): 显示缩放比例(默认为1.0) Automatic spelling approximation. 待定 自动拼写近似 Max spelling distance 待定 最大拼写距离 Add common spelling approximations for rare terms. 为罕见搜索词添加常用拼写近似值。 Maximum number of history entries in completer list 待定 当前电脑允许保存的最大历史搜索/文档数量 Number of history entries in completer: 待定 当前电脑内保存的历史搜索/历史文档的数量: Displays the total number of occurences of the term in the index 显示搜索内容在索引中出现的总次数 Show hit counts in completer popup. 待定 在弹出窗口中显示点击数 Prefer HTML to plain text for preview. 预览时优先选择HTML格式 See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. 待定 请在Qt QDateTimeEdit的文档中查看时间格式,比如说yyyy-MM-dd。留空会使用系统默认时间格式 Side filter dates format (change needs restart) 待定 过滤器的日期格式(修改后需要重启程序) If set, starting a new instance on the same index will raise an existing one. 如果设置了,在相同索引上启动一个新实例将会引发现有的实例。 Single application 单个应用程序 Set to 0 to disable and speed up startup by avoiding tree computation. 设置为0以禁用并通过避免树计算加快启动速度。 The completion only changes the entry when activated. 只有在激活时完成才会更改条目。 Completion: no automatic line editing. 完成:无自动行编辑。 Interface language (needs restart): 界面语言(需要重新启动) Note: most translations are incomplete. Leave empty to use the system environment. 注意:大多数翻译是不完整的。留空以使用系统环境。 Preview 预览 Set to 0 to disable details/summary feature 设置为0以禁用详细/摘要功能。 Fields display: max field length before using summary: 字段显示:在使用摘要之前的最大字段长度: Number of lines to be shown over a search term found by preview search. 在预览搜索中找到的搜索词上方要显示的行数。 Search term line offset: 搜索词行偏移量: Wild card characters *?[] will processed as punctuation instead of being expanded 通配符字符*?[]将被处理为标点符号,而不是被展开。 Ignore wild card characters in ALL terms and ANY terms modes 在“所有词项”和“任意词项”模式下忽略通配符字符。 Color scheme 颜色方案 When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. 在显示暗模式下的HTML时,请尽量使用暗色背景(和浅色文字)。这与许多文档冲突,它们会用自己的CSS(暗色)前景色覆盖我们的浅色设置,导致文档无法阅读,因此默认情况下关闭。 Use dark background when displaying HTML in dark mode. 在暗模式下显示HTML时,请使用深色背景。 recoll-1.43.12/qtgui/i18n/recoll_tr.ts0000644000175000017500000073556015124431112016723 0ustar dockesdockes ActSearchDLG Menu search Menü arama AdvSearch All clauses Tüm ifadeler Any clause İfadelerin herhangi biri texts metinler spreadsheets hesap tabloları presentations sunumlar media ortamlar messages iletiler other diğer Bad multiplier suffix in size filter Bad multiplier suffix in size filter text text spreadsheet spreadsheet presentation presentation message message Advanced Search Gelişmiş arama History Next History Next History Prev History Prev Load next stored search Load next stored search Load previous stored search Load previous stored search AdvSearchBase Advanced search Gelişmiş arama Restrict file types Dosya tiplerini sınırlandır Save as default öntanımlı olarak kaydet Searched file types Aranan dosya tipleri All ----> Tümü ----> Sel -----> Seç -----> <----- Sel <----- Seç <----- All <----- Tümü Ignored file types Yoksayılan dosya tipleri Enter top directory for search Arama için en üst dizini girin Browse Gözat Restrict results to files in subtree: Arama sonuçlarını bu dizin ve aşağısı ile sınırlandır: Start Search Aramayı Başlat Search for <br>documents<br>satisfying: Uyan <br>belgeleri<br>ara: Delete clause İfadeyi sil Add clause İfade ekle Check this to enable filtering on file types Dosya tipleri üzerinde filtreleme kullanmak için bunu işaretleyin By categories Kategorilere göre Check this to use file categories instead of raw mime types Dosya tipleri yerine ham mime tipleri üzerinde filtreleme kullanmak için bunu işaretleyin Close Kapat All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Invert Invert Minimum size. You can use k/K,m/M,g/G as multipliers Minimum size. You can use k/K,m/M,g/G as multipliers Min. Size Min. Size Maximum size. You can use k/K,m/M,g/G as multipliers Maximum size. You can use k/K,m/M,g/G as multipliers Max. Size Max. Size Select Select Filter Filter From From To To Check this to enable filtering on dates Check this to enable filtering on dates Filter dates Filter dates Find Find Check this to enable filtering on sizes Check this to enable filtering on sizes Filter sizes Filter sizes Filter birth dates Doğum tarihlerini filtrele ConfIndexW Can't write configuration file Yapılandırma dosyası yazılamadı Global parameters Genel parametreler Local parameters Yerel parametreler Search parameters Arama parametreleri Top directories Üst dizinler The list of directories where recursive indexing starts. Default: your home. Özyinelemeli indesklemenin başlayacağı dizinlerin listesi. Öntanımlı: ev dizininiz. Skipped paths Atlanan yollar These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Stemming languages Sözcük kökleri ayrıştırılabilir diller The languages for which stemming expansion<br>dictionaries will be built. Kök ayrıştırma genişlemesi için sözlükleri<br>inşa edilecek olan diller. Log file name Günlük dosyasının adı The file where the messages will be written.<br>Use 'stderr' for terminal output İletilerin yazılacağı dosya.<br>Uçbirim çıktısı için 'stderr' kullanın Log verbosity level Günlük dosyası ayrıntı düzeyi This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Bu değer ileti boyutunu ayarlar,<br>sadece hatalardan hata ayıklama verilerine kadar. Index flush megabytes interval İndex düzeltme MB aralığı This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Bu değer diske gönderilecek indekslenmiş veri miktarını ayarlar.<br>Bu indeksleyicinin bellek kullanımını kontrol etmeye yarar. Öntanımlı 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. No aspell usage Aspell kullanımı yok Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Aspell language Aspell dili The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Database directory name Veritabanı dizininin adı The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Unac exceptions Unac exceptions <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Process the WEB history queue Process the WEB history queue Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Web page store directory name Web page store directory name The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Max. size for the web store (MB) Max. size for the web store (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Automatic diacritics sensitivity Automatic diacritics sensitivity <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. Automatic character case sensitivity Automatic character case sensitivity <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. Maximum term expansion count Maximum term expansion count <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. Maximum Xapian clauses count Maximum Xapian clauses count <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Indexer log file name Indexer log file name If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Web history Web history Process the Web history queue Web geçmiş kuyruğunu işle (by default, aspell suggests mispellings when a query has no results). Varsayılan olarak, aspell sorguda sonuç bulunamadığında yanlış yazılmış kelimeler önerir. Page recycle interval Sayfa yenileme aralığı <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Varsayılan olarak, önbellekte bir URL örneği tutulur. Bu, birden fazla örneği ne sıklıkta tuttuğumuzu belirleyen bir değere ayarlayarak değiştirilebilir ('gün', 'hafta', 'ay', 'yıl'). Aralığı artırmak mevcut girişleri silmeyeceğini unutmayın. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Not: Maksimum boyuta ulaşıldığında yeni sayfalar için yer açmak için eski sayfalar silinecektir. Mevcut boyut: %1 Start folders Klasörleri Başlat The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. İndekslenmesi gereken klasör/dizin listesi. Alt klasörler tekrarlayarak işlenecektir. Varsayılan: eviniz. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Arama arayüzünde aşağıdaki metin parçasını İngilizce'den Türkçe'ye çevirin: Disk doluluk eşiği yüzdesi, dizinlemeyi durdurduğumuz yüzde<br>(Örneğin, %90 dolu olduğunda durdurmak için 90, 0 veya 100 sınırsız demektir) Browser add-on download folder Tarayıcı eklentisi indirme klasörü Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Sadece bu ayarı yapın, eğer Web tarayıcı eklentisi ayarlarında "İndirme alt dizini" parametresini ayarladıysanız. Bu durumda, dizine tam yol olmalıdır (örneğin /home/[ben]/İndirmelerim/alt-dizin). Store some GUI parameters locally to the index Arayüz parametrelerini dizine yerel olarak kaydedin. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index <p>GUI ayarları genellikle tüm dizinler için geçerli olan bir global dosyada saklanır. Bu parametreyi ayarlamak, sonuç tablosu kurulumu gibi bazı ayarların dizine özgü hale gelmesini sağlar. Suspend the real time indexer when running on battery Pil ile çalışırken gerçek zamanlı dizinleyiciyi askıya alın. The indexer will wait for a return on AC and reexec itself when it happens İndeksleyici, AC üzerinde bir dönüş bekleyecek ve gerçekleştiğinde kendini yeniden yürütecektir. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. İndekslenmesi gereken klasör/dizin listesi, alt klasörleriyle birlikte özyinelemeli olarak.<br>'~' karakteri, varsayılan başlangıç değeri olan ev dizinine genişler. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Only mime types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Exclude mime types Exclude mime types Mime types not to be indexed Mime types not to be indexed Max. compressed file size (KB) Max. compressed file size (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Max. text file size (MB) Max. text file size (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Text file page size (KB) Text file page size (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Max. filter exec. time (s) Max. filter exec. time (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Global Genel ConfigSwitchDLG Switch to other configuration Diğer yapılandırmaya geçiş yap ConfigSwitchW Choose other Diğerini seçin. Choose configuration directory Yapılandırma dizinini seçiniz. CronToolW Cron Dialog Cron Dialog <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Days of week (* or 0-7, 0 or 7 is Sunday) Hours (* or 0-23) Hours (* or 0-23) Minutes (0-59) Minutes (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> Enable Enable Disable Disable It seems that manually edited entries exist for recollindex, cannot edit crontab It seems that manually edited entries exist for recollindex, cannot edit crontab Error installing cron entry. Bad syntax in fields ? Error installing cron entry. Bad syntax in fields ? EditDialog Dialog Dialog EditTrans Source path Source path Local path Local path Config error Config error Original path Original path Path in index İndeksteki yol Translated path Çevrilen yol EditTransBase Path Translations Path Translations Setting path translations for Setting path translations for Select one or several file types, then use the controls in the frame below to change how they are processed Select one or several file types, then use the controls in the frame below to change how they are processed Add Add Delete Delete Cancel İptal Save Save FirstIdxDialog First indexing setup First indexing setup <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> Indexing configuration Indexing configuration This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Indexing schedule Indexing schedule This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Start indexing now Start indexing now FragButs %1 not found. %1 not found. %1: %2 %1: %2 Fragment Buttons Fragment Buttons Query Fragments Query Fragments IdxSchedW Index scheduling setup Index scheduling setup <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> Cron scheduling Cron scheduling The tool will let you decide at what time indexing should run and will install a crontab entry. The tool will let you decide at what time indexing should run and will install a crontab entry. Real time indexing start up Real time indexing start up Decide if real time indexing will be started when you log in (only for the default index). Decide if real time indexing will be started when you log in (only for the default index). ListDialog Dialog Dialog GroupBox GroupBox Main No db directory in configuration Yapılandırma içerisinde veritabanı dizini yok Could not open database in Veritabanı açılamadı . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . İndekseleme başlamadan yapılandırmayı düzenlemek için İptal düğmesine basın ya da Tamam düğmesine basarak işleme izin verin. Configuration problem (dynconf Yapılandırma sorunu "history" file is damaged or un(read)writeable, please check or remove it: "history" file is damaged or un(read)writeable, please check or remove it: "history" file is damaged, please check or remove it: "history" file is damaged, please check or remove it: Needs "Show system tray icon" to be set in preferences! Tercihlerde "Sistem tepsisi simgesini göster" seçeneğinin ayarlanması gerekiyor! PTransEdit Path in index İndeksteki yol Translated path Çevrilen yol Config error Config error Original path Original path Local path Local path PTransEditBase Path Translations Path Translations Select one or several file types, then use the controls in the frame below to change how they are processed Select one or several file types, then use the controls in the frame below to change how they are processed Add Add Delete Delete Cancel İptal Save Save Preview &Search for: A&ra: &Next &Sonraki &Previous &Önceki Match &Case Eşleşme Şa&rtı Clear Temizle Creating preview text Önizleme metni oluşturuluyor Loading preview text into editor Önizleme metni düzenleyiciye yükleniyor Cannot create temporary directory Geçici dizin oluşturulamadı Cancel İptal Close Tab Sekmeyi Kapat Missing helper program: Yardımcı program kayıp: Can't turn doc into internal representation for Şunun için iç gösterim yapılamıyor Cannot create temporary directory: Cannot create temporary directory: Error while loading file Error while loading file Form Form Tab 1 Tab 1 Open Open Canceled Canceled Error loading the document: file missing. Error loading the document: file missing. Error loading the document: no permission. Error loading the document: no permission. Error loading: backend not configured. Error loading: backend not configured. Error loading the document: other handler error<br>Maybe the application is locking the file ? Error loading the document: other handler error<br>Maybe the application is locking the file ? Error loading the document: other handler error. Error loading the document: other handler error. <br>Attempting to display from stored text. <br>Attempting to display from stored text. Could not fetch stored text Could not fetch stored text Previous result document Previous result document Next result document Next result document Preview Window Preview Window Close Window Close Window Next doc in tab Next doc in tab Previous doc in tab Previous doc in tab Close tab Close tab Print tab Print tab Close preview window Close preview window Show next result Show next result Show previous result Show previous result Print Print PreviewTextEdit Show fields Show fields Show main text Show main text Print Print Print Current Preview Print Current Preview Show image Show image Select All Select All Copy Copy Save document to file Save document to file Fold lines Fold lines Preserve indentation Preserve indentation Open document Open document Reload as Plain Text Metni Düz Metin Olarak Yeniden Yükle Reload as HTML HTML olarak yeniden yükle QObject Global parameters Genel parametreler Local parameters Yerel parametreler <b>Customised subtrees <b>Özelleştirilmiş alt ağaçlar The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. İndekslenmiş sıralama içerisindeki alt dizinlerin listesi <br>ki burada bazı parametrelerin yeniden tanımlanması gerekir. Öntanımlı: boş. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Aşağıdaki parametreler, ya seçili alt dizin için uygulanır ya da üst düzeyde veya üstteki metin kutusunda hiçbir şey seçilmediğinde yada boş bir satır seçildiğinde uygulanır.<br>+/- düğmelerine tıklayarak dizinleri ekleyip çıkarabilirsiniz. Skipped names Atlanan isimler These are patterns for file or directory names which should not be indexed. Bu nitelikler insekslenmemesi gereken dosya ve dizinler içindir. Default character set Öntanımlı karakter seti This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Bu karakter seti, karakter kodlaması uygulama tarafından belirlenemeyen dosyalar için kulanılır, Örneğin salt metin dosyaları.<br>Öntanımlı değer boştur ve NLS çevresel değişkeni kullanılır. Follow symbolic links Sembolik bağlantıları izle Follow symbolic links while indexing. The default is no, to avoid duplicate indexing İndekslerken sembolik bağlantıları izle. Aynı ögelerin yeniden indekslenmesinden kaçınmak için öntanımlı değer hayır Index all file names Tüm dosya isimlerini indeksle Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true İçeriği tanınmayan ya da işlenemeyen (ya da desteklenmeyen mime tipi) dosyaları indeksle. Öntanımlı evet Beagle web history Beagle web history Search parameters Arama parametreleri Web history Web history Default<br>character set Default<br>character set Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Ignored endings Ignored endings These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. These are patterns for file or directory names which should not be indexed. Bu, dizin veya dosya adları için dizinlenmemesi gereken desenlerdir. QWidget Create or choose save directory Create or choose save directory Choose exactly one directory Choose exactly one directory Could not read directory: Could not read directory: Unexpected file name collision, cancelling. Unexpected file name collision, cancelling. Cannot extract document: Cannot extract document: &Preview &Önizle &Open &Open Open With Open With Run Script Run Script Copy &File Name &Dosya Adını Kopyala Copy &URL &Adresi Kopyala &Write to File &Write to File Save selection to files Save selection to files Preview P&arent document/folder Preview P&arent document/folder &Open Parent document/folder &Open Parent document/folder Find &similar documents Benzer belgeleri &bul Open &Snippets window Open &Snippets window Show subdocuments / attachments Show subdocuments / attachments &Open Parent document &Open Parent document &Open Parent Folder &Open Parent Folder Copy Text Metni Kopyala Copy &File Path Kopyala &Dosya Yolu Copy File Name Dosya Adını Kopyala QxtConfirmationMessage Do not show again. Do not show again. RTIToolW Real time indexing automatic start Real time indexing automatic start <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Start indexing daemon with my desktop session. Also start indexing daemon right now. Also start indexing daemon right now. Replacing: Replacing: Replacing file Replacing file Can't create: Can't create: Warning Uyarı Could not execute recollindex Could not execute recollindex Deleting: Deleting: Deleting file Deleting file Removing autostart Removing autostart Autostart file deleted. Kill current process too ? Autostart file deleted. Kill current process too ? Configuration name Yapılandırma adı Short alphanumeric nickname for this config Bu yapılandırma için kısa alfasayısal takma ad. Could not find Belirtilen metin parçası: Bulunamadı. RclCompleterModel Hits Arama arayüzünde "Hits" ifadesi için Türkçe çeviri: "Sonuçlar" Hits RclMain About Recoll Recoll Hakkında Executing: [ Çalıştırılıyor: [ Cannot retrieve document info from database Veritabanından belge bilgileri alınamadı Warning Uyarı Can't create preview window Önizleme penceresi oluşturulamıyor Query results Arama Sonuçları Document history Belge geçmişi History data Geçmiş verileri Indexing in progress: İndeksleme devam ediyor: Files Dosyalar Purge Temizle Stemdb KökAyrıştırmaVeritabanı Closing Kapatılıyor Unknown Bilinmeyen This search is not active any more Bu arama atrık etkin değil Can't start query: Sorgu başlatılamadı: Bad viewer command line for %1: [%2] Please check the mimeconf file %1 için uygun olmayan komut: [%2] Lütfen mimeconf dosyasını kontrol edin Cannot extract document or create temporary file Belge açılamadı ya da geçici dosya oluşturulamadı (no stemming) (kök ayrıştırma kullanma) (all languages) (tüm diller) error retrieving stemming languages sözcük kökleri ayrıştırılabilir diller alınırken hata oluştu Update &Index Update &Index Indexing interrupted Indexing interrupted Stop &Indexing Stop &Indexing All All media ortamlar message message other diğer presentation presentation spreadsheet spreadsheet text text sorted sorted filtered filtered External applications/commands needed and not found for indexing your file types: External applications/commands needed and not found for indexing your file types: No helpers found missing No helpers found missing Missing helper programs Missing helper programs Save file dialog Save file dialog Choose a file name to save under Choose a file name to save under Document category filter Document category filter No external viewer configured for mime type [ No external viewer configured for mime type [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Can't access file: Can't access file: Can't uncompress file: Can't uncompress file: Save file Save file Result count (est.) Result count (est.) Query details Sorgu detayları Could not open external index. Db not open. Check external index list. Could not open external index. Db not open. Check external index list. No results found No results found None None Updating Updating Done Done Monitor Monitor Indexing failed Indexing failed The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Erasing index Erasing index Reset the index and start from scratch ? Reset the index and start from scratch ? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Error Error Index not open Index not open Index query error Index query error Indexed Mime Types Indexed Mime Types Content has been indexed for these MIME types: Content has been indexed for these MIME types: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Can't update index: indexer running Can't update index: indexer running Indexed MIME Types Indexed MIME Types Bad viewer command line for %1: [%2] Please check the mimeview file Bad viewer command line for %1: [%2] Please check the mimeview file Viewer command line for %1 specifies both file and parent file value: unsupported Viewer command line for %1 specifies both file and parent file value: unsupported Cannot find parent document Cannot find parent document Indexing did not run yet Indexing did not run yet External applications/commands needed for your file types and not found, as stored by the last indexing pass in External applications/commands needed for your file types and not found, as stored by the last indexing pass in Index not up to date for this file. Refusing to risk showing the wrong entry. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Indexer running so things should improve when it's done Indexer running so things should improve when it's done Sub-documents and attachments Sub-documents and attachments Document filter Document filter Index not up to date for this file. Refusing to risk showing the wrong entry. Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. The indexer is running so things should improve when it's done. The indexer is running so things should improve when it's done. The document belongs to an external indexwhich I can't update. The document belongs to an external indexwhich I can't update. Click Cancel to return to the list. Click Ignore to show the preview anyway. Click Cancel to return to the list. Click Ignore to show the preview anyway. Duplicate documents Duplicate documents These Urls ( | ipath) share the same content: These Urls ( | ipath) share the same content: Bad desktop app spec for %1: [%2] Please check the desktop file Bad desktop app spec for %1: [%2] Please check the desktop file Bad paths Bad paths Bad paths in configuration file: Bad paths in configuration file: Selection patterns need topdir Selection patterns need topdir Selection patterns can only be used with a start directory Selection patterns can only be used with a start directory No search No search No preserved previous search No preserved previous search Choose file to save Choose file to save Saved Queries (*.rclq) Saved Queries (*.rclq) Write failed Write failed Could not write to file Could not write to file Read failed Read failed Could not open file: Could not open file: Load error Load error Could not load saved query Could not load saved query Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Do not show this warning next time (use GUI preferences to restore). Do not show this warning next time (use GUI preferences to restore). Disabled because the real time indexer was not compiled in. Disabled because the real time indexer was not compiled in. This configuration tool only works for the main index. This configuration tool only works for the main index. The current indexing process was not started from this interface, can't kill it The current indexing process was not started from this interface, can't kill it The document belongs to an external index which I can't update. The document belongs to an external index which I can't update. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Index scheduling Index scheduling Sorry, not available under Windows for now, use the File menu entries to update the index Sorry, not available under Windows for now, use the File menu entries to update the index Can't set synonyms file (parse error?) Can't set synonyms file (parse error?) Index locked Index locked Unknown indexer state. Can't access webcache file. Unknown indexer state. Can't access webcache file. Indexer is running. Can't access webcache file. Indexer is running. Can't access webcache file. with additional message: with additional message: Non-fatal indexing message: Non-fatal indexing message: Types list empty: maybe wait for indexing to progress? Types list empty: maybe wait for indexing to progress? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Tools Araçlar Results Results (%d documents/%d files/%d errors/%d total files) (%d documents/%d files/%d errors/%d total files) (%d documents/%d files/%d errors) (%d documents/%d files/%d errors) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Indexing done Indexing done Can't update index: internal error Can't update index: internal error Index not up to date for this file.<br> Index not up to date for this file.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Also, it seems that the last index update for the file failed.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> documents documents document document files dosyalar file dosya errors errors error error total files) total files) No information: initial indexing not yet performed. No information: initial indexing not yet performed. Batch scheduling Batch scheduling The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Confirm Confirm Erasing simple and advanced search history lists, please click Ok to confirm Erasing simple and advanced search history lists, please click Ok to confirm Could not open/create file Could not open/create file F&ilter F&ilter Could not start recollindex (temp file error) Could not start recollindex (temp file error) Could not read: Could not read: This will replace the current contents of the result list header string and GUI qss file name. Continue ? This will replace the current contents of the result list header string and GUI qss file name. Continue ? You will need to run a query to complete the display change. You will need to run a query to complete the display change. Simple search type Simple search type Any term Sözcüklerin herhangi biri All terms Tüm sözcükler File name Dosya adı Query language Arama dili Stemming language Kök ayrıştırma dili Main Window Main Window Focus to Search Focus to Search Focus to Search, alt. Focus to Search, alt. Clear Search Clear Search Focus to Result Table Focus to Result Table Clear search Clear search Move keyboard focus to search entry Move keyboard focus to search entry Move keyboard focus to search, alt. Move keyboard focus to search, alt. Toggle tabular display Toggle tabular display Move keyboard focus to table Move keyboard focus to table Flushing Arama arayüzünde "Flushing" ifadesi için Türkçe çeviri: Temizleme Show menu search dialog Menü arama iletişim kutusunu göster Duplicates Çiftler Filter directories Dizinleri filtrele Main index open error: Ana dizin açma hatası: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Dizin bozulmuş olabilir. Belki xapian-check çalıştırmayı deneyin veya dizini yeniden oluşturun? This search is not active anymore Bu arama artık aktif değil. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported %1 için görüntüleyici komut satırı üst dosyayı belirtir ancak URL dosya:// değil: desteklenmeyen The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Mimeview için belirtilen görüntüleyici %1: %2 bulunamadı. Tercihler iletişim kutusunu başlatmak ister misiniz? Show advanced search dialog Gelişmiş arama iletişim kutusunu göster with additional message: RclMainBase Previous page Önceki sayfa Next page Sonraki sayfa &File &Dosya E&xit &Çık &Tools &Araçlar &Help &Yardım &Preferences &Tercihler Search tools Arama araçları Result list Sonuç listesi &About Recoll &Recoll Hakkında Document &History Belge &Geçmişi Document History Belge Geçmişi &Advanced Search &Gelişmiş arama Advanced/complex Search Gelişmiş/karmaşık Arama &Sort parameters &Sıralama Ölçütleri Sort parameters Sıralama ölçütleri Next page of results Sonuçların sonraki sayfası Previous page of results Sonuçların önceki sayfası &Query configuration &Sorgu yapılandırması &User manual &Kullanıcı El Kitabı Recoll Recoll Ctrl+Q Ctrl+Q Update &index İndeksi g&üncelle Term &explorer İfade g&österici Term explorer tool İfade gösterme aracı External index dialog Dış indeksler penceresi &Erase document history &Belge geçmişini temizle First page İlk sayfa Go to first page of results Sonuçların ilk sayfasına git &Indexing configuration İ&ndeksleme yapılandırması All All &Show missing helpers &Show missing helpers PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen &Full Screen F11 F11 Full Screen Full Screen &Erase search history &Erase search history sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Sort by dates from oldest to newest sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Sort by dates from newest to oldest Show Query Details Show Query Details Show results as table Show results as table &Rebuild index &Rebuild index &Show indexed types &Show indexed types Shift+PgUp Shift+PgUp &Indexing schedule &Indexing schedule E&xternal index dialog E&xternal index dialog &Index configuration &Index configuration &GUI configuration &GUI configuration &Results &Results Sort by date, oldest first Sort by date, oldest first Sort by date, newest first Sort by date, newest first Show as table Show as table Show results in a spreadsheet-like table Show results in a spreadsheet-like table Save as CSV (spreadsheet) file Save as CSV (spreadsheet) file Saves the result into a file which you can load in a spreadsheet Saves the result into a file which you can load in a spreadsheet Next Page Next Page Previous Page Previous Page First Page First Page Query Fragments Query Fragments With failed files retrying With failed files retrying Next update will retry previously failed files Next update will retry previously failed files Save last query Save last query Load saved query Load saved query Special Indexing Special Indexing Indexing with special options Indexing with special options Indexing &schedule Indexing &schedule Enable synonyms Enable synonyms &View &View Missing &helpers Missing &helpers Indexed &MIME types Indexed &MIME types Index &statistics Index &statistics Webcache Editor Webcache Editor Trigger incremental pass Trigger incremental pass E&xport simple search history E&xport simple search history Use default dark mode Use default dark mode Dark mode Dark mode &Query &Query Increase results text font size Sonuçlar metin font boyutunu artırın. Increase Font Size Yazı Tipi Boyutunu Artır Decrease results text font size Sonuçlar metin font boyutunu küçült Decrease Font Size Yazı Tipi Boyutunu Küçült Start real time indexer Gerçek zamanlı dizin oluşturucuyu başlatın. Query Language Filters Sorgu Dil Filtreleri Filter dates Filter dates Assisted complex search Karmaşık arama yardımı Filter birth dates Doğum tarihlerini filtrele Switch Configuration... Anahtar Yapılandırma... Choose another configuration to run on, replacing this process Bu işlemi değiştirerek çalıştırmak için başka bir yapılandırma seçin. &User manual (local, one HTML page) Kullanıcı kılavuzu (yerel, bir HTML sayfası) &Online manual (Recoll Web site) &Çevrimiçi kılavuz (Recoll Web sitesi) Path translations Yol çevirileri With failed files retrying RclTrayIcon Restore Restore Quit Quit RecollModel Abstract Abstract Author Author Document size Document size Document date Document date File size File size File name Dosya adı File date File date Ipath Ipath Keywords Keywords Mime type Mime Tipi Original character set Original character set Relevancy rating Relevancy rating Title Title URL URL Mtime Mtime Date Tarih Date and time Date and time MIME type MIME type Can't sort by inverse relevance Can't sort by inverse relevance ResList Result list Sonuç listesi Unavailable document Erişilemez belge Previous Önceki Next Sonraki <p><b>No results found</b><br> <p><b>Sonuç bulunamadı</b><br> &Preview &Önizle Copy &URL &Adresi Kopyala Find &similar documents Benzer belgeleri &bul Query details Sorgu detayları (show query) (sorguyu göster) Copy &File Name &Dosya Adını Kopyala filtered filtered sorted sorted Document history Belge geçmişi Preview Önizle Open Open <p><i>Alternate spellings (accents suppressed): </i> <p><i>Alternate spellings (accents suppressed): </i> &Write to File &Write to File Preview P&arent document/folder Preview P&arent document/folder &Open Parent document/folder &Open Parent document/folder &Open &Open Documents Documents out of at least out of at least for for <p><i>Alternate spellings: </i> <p><i>Alternate spellings: </i> Open &Snippets window Open &Snippets window Duplicate documents Duplicate documents These Urls ( | ipath) share the same content: These Urls ( | ipath) share the same content: Result count (est.) Result count (est.) Snippets Snippets This spelling guess was added to the search: Bu yazım tahmini aramaya eklendi: These spelling guesses were added to the search: Bu yazım tahminleri aramaya eklendi: ResTable &Reset sort &Reset sort &Delete column &Delete column Add " Add " " column " column Save table to CSV file Save table to CSV file Can't open/create file: Can't open/create file: &Preview &Önizle &Open &Open Copy &File Name &Dosya Adını Kopyala Copy &URL &Adresi Kopyala &Write to File &Write to File Find &similar documents Benzer belgeleri &bul Preview P&arent document/folder Preview P&arent document/folder &Open Parent document/folder &Open Parent document/folder &Save as CSV &Save as CSV Add "%1" column Add "%1" column Result Table Result Table Open Open Open and Quit Open and Quit Preview Önizle Show Snippets Show Snippets Open current result document Open current result document Open current result and quit Open current result and quit Show snippets Show snippets Show header Show header Show vertical header Show vertical header Copy current result text to clipboard Copy current result text to clipboard Use Shift+click to display the text instead. Metni görüntülemek için Shift+tıklayın. %1 bytes copied to clipboard %1 bayt panoya kopyalandı. Copy result text and quit Sonuç metnini kopyala ve çıkış yap ResTableDetailArea &Preview &Önizle &Open &Open Copy &File Name &Dosya Adını Kopyala Copy &URL &Adresi Kopyala &Write to File &Write to File Find &similar documents Benzer belgeleri &bul Preview P&arent document/folder Preview P&arent document/folder &Open Parent document/folder &Open Parent document/folder ResultPopup &Preview &Önizle &Open &Open Copy &File Name &Dosya Adını Kopyala Copy &URL &Adresi Kopyala &Write to File &Write to File Save selection to files Save selection to files Preview P&arent document/folder Preview P&arent document/folder &Open Parent document/folder &Open Parent document/folder Find &similar documents Benzer belgeleri &bul Open &Snippets window Open &Snippets window Show subdocuments / attachments Show subdocuments / attachments Open With Open With Run Script Run Script SSearch Any term Sözcüklerin herhangi biri All terms Tüm sözcükler File name Dosya adı Completions Tamamlamalar Select an item: Bir öge seçin: Too many completions Çok fazla tamamlama Query language Arama dili Bad query string Uygunsuz arama ifadesi Out of memory Yetersiz bellek Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter file name wildcard expression. Enter file name wildcard expression. Enter search terms here. Type ESC SPC for completions of current term. Aranacak ifadeleri buraya girin. Geçerli sözcüğün tamamlanması için ESC SPACE kullanın. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Stemming languages for stored query: Stemming languages for stored query: differ from current preferences (kept) differ from current preferences (kept) Auto suffixes for stored query: Auto suffixes for stored query: External indexes for stored query: External indexes for stored query: Autophrase is set but it was unset for stored query Autophrase is set but it was unset for stored query Autophrase is unset but it was set for stored query Autophrase is unset but it was set for stored query Enter search terms here. Enter search terms here. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid black; border-collapse: collapse; border-collapse: collapse; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; You should really look at the manual (F1)</p> You should really look at the manual (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>What</th><th>Examples</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; where needed</td><td>(one AND two) OR three</td></tr> where needed</td><td>(one AND two) OR three</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Can't open index Could not restore external indexes for stored query:<br> Could not restore external indexes for stored query:<br> ??? ??? Using current preferences. Using current preferences. Simple search Basit arama History Tarih <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Arama dilini hızlıca öğrenmek için hile sayfası. Şüphe mi var: <b>Arama Detaylarını Göster</b> tıklayın. <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Kök genişlemesini bastırmak için büyük harf yapın</td><td>Zemin</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Temizle Ctrl+S Ctrl+S Erase search entry Arama girdisini temizle Search Ara Start query Sorguyu başlat Enter search terms here. Type ESC SPC for completions of current term. Aranacak ifadeleri buraya girin. Geçerli sözcüğün tamamlanması için ESC SPACE kullanın. Choose search type. Choose search type. Show query history Show query history Enter search terms here. Enter search terms here. Main menu Main menu SearchClauseW SearchClauseW SearchClauseW Any of these Bunların herhangi biri All of these Bunların tümü None of these Bunların hiçbiri This phrase Tam olarak bu ifade Terms in proximity Yakın ifadeler File name matching Dosya adı eşleşen Select the type of query that will be performed with the words Sözcükler ile kullanılacak sorgu biçimini seç Number of additional words that may be interspersed with the chosen ones Seçilen sözcüklerin arasında yer alabilecek ek sözcüklerin sayısı In field In field No field No field Any Any All All None None Phrase Phrase Proximity Proximity File name Dosya adı Snippets Snippets Snippets X X Find: Find: Next Sonraki Prev Prev SnippetsW Search Ara <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> Sort By Relevance Sort By Relevance Sort By Page Sort By Page Snippets Window Snippets Window Find Find Find (alt) Find (alt) Find Next Find Next Find Previous Find Previous Hide Hide Find next Find next Find previous Find previous Close window Close window Increase font size Yazı tipi boyutunu artır Decrease font size Yazı tipi boyutunu küçült SortForm Date Tarih Mime type Mime Tipi SortFormBase Sort Criteria Sıralama Ölçütü Sort the Sırala most relevant results by: en uygun sonuç veren: Descending Azalan Close Kapat Apply Uygula SpecIdxW Special Indexing Special Indexing Do not retry previously failed files. Do not retry previously failed files. Else only modified or failed files will be processed. Else only modified or failed files will be processed. Erase selected files data before indexing. Erase selected files data before indexing. Directory to recursively index Directory to recursively index Browse Gözat Start directory (else use regular topdirs): Start directory (else use regular topdirs): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Selection patterns: Selection patterns: Top indexed entity Top indexed entity Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Retry previously failed files. Retry previously failed files. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Tanılama çıktı dosyası. Kısaltılacak ve dizinleme tanıları alacak (dosyaların dizine eklenmemesinin nedenleri). Diagnostics file Teşhis dosyası SpellBase Term Explorer İfade Gösterici &Expand &Genişlet Alt+E Alt+G &Close &Kapat Alt+C Alt+K Term İfade No db info. No db info. Doc. / Tot. Doc. / Tot. Match Match Case Case Accents Accents SpellW Wildcards Özel karakterler Regexp Düzenli ifade Spelling/Phonetic Heceleme/Fonetik Aspell init failed. Aspell not installed? Aspell başlatılamadı. Yüklenmemiş olabilir mi? Aspell expansion error. Aspell heceleme genişlemesi hatası. Stem expansion Kök ayrıştırma genişlemesi error retrieving stemming languages sözcük kökleri ayrıştırılabilir diller alınırken hata oluştu No expansion found Hiç genişleme bulunamadı Term İfade Doc. / Tot. Doc. / Tot. Index: %1 documents, average length %2 terms Index: %1 documents, average length %2 terms Index: %1 documents, average length %2 terms.%3 results Index: %1 documents, average length %2 terms.%3 results %1 results %1 results List was truncated alphabetically, some frequent List was truncated alphabetically, some frequent terms may be missing. Try using a longer root. terms may be missing. Try using a longer root. Show index statistics Show index statistics Number of documents Number of documents Average terms per document Average terms per document Smallest document length Smallest document length Longest document length Longest document length Database directory size Database directory size MIME types: MIME types: Item Item Value Value Smallest document length (terms) Smallest document length (terms) Longest document length (terms) Longest document length (terms) Results from last indexing: Results from last indexing: Documents created/updated Documents created/updated Files tested Files tested Unindexed files Unindexed files List files which could not be indexed (slow) List files which could not be indexed (slow) Spell expansion error. Spell expansion error. Spell expansion error. Yazım genişletme hatası. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index Seçilen dizin bir Xapian indeks dizini gibi görünmüyor This is the main/local index! Bu ana/yerel veritabanı! The selected directory is already in the index list Seçilen dizin zaten indeks listesinde var Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Xapian indeks dizinini seç (/home/kullanıcı_adınız/.recoll/xapiandb gibi.) error retrieving stemming languages sözcük kökleri ayrıştırılabilir diller alınırken hata oluştu Choose Gözat Result list paragraph format (erase all to reset to default) Result list paragraph format (erase all to reset to default) Result list header (default is empty) Result list header (default is empty) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read The selected directory looks like a Recoll configuration directory but the configuration could not be read At most one index should be selected At most one index should be selected Cant add index with different case/diacritics stripping option Cant add index with different case/diacritics stripping option Default QtWebkit font Default QtWebkit font Any term Sözcüklerin herhangi biri All terms Tüm sözcükler File name Dosya adı Query language Arama dili Value from previous program exit Value from previous program exit Context Context Description Description Shortcut Shortcut Default Default Choose QSS File QSS Dosyasını Seç Can't add index with different case/diacritics stripping option. Farklı büyük/küçük harf/diyakritik işareti kaldırma seçeneği olan dizini ekleyemem. Light Işık Dark Karanlık System Sistem UIPrefsDialogBase User interface Kullanıcı arayüzü Number of entries in a result page Bir sonuç sayfasındaki sonuç sayısı Result list font Sonuç listesi yazıtipi Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Sonuç listesi yazıtipini seçmek için bir pencere açar Reset Sıfırla Resets the result list font to the system default Sonuç listesi yazıtipini sistem ayarlarına döndür Auto-start simple search on whitespace entry. Beyaz alan girdisi olduğunda basit aramayı otomatik olarak başlat. Start with advanced search dialog open. Gelişmiş arama penceresi ile başla. Start with sort dialog open. Sıralama penceresi ile başla. Search parameters Arama parametreleri Stemming language Kök ayrıştırma dili Dynamically build abstracts Özetleri dinamik olarak oluştur Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Sorgu sözcükleri kullanılarak sonuç listesi girdileri için özet oluşturulsun mu ? Büyük boyutlu belgelerde yavaş olabilir. Replace abstracts from documents Belgelerden özetleri kaldır Do we synthetize an abstract even if the document seemed to have one? Belgenin bir özeti varsa bile bir yapay özet oluşturulsun mu? Synthetic abstract size (characters) Yapay özet boyutu (karakter sayısı) Synthetic abstract context words Yapay özet sözcükleri External Indexes Dış indeksler Add index İndeks ekle Select the xapiandb directory for the index you want to add, then click Add Index İstediğiniz indeksi eklemek için xapiandb (veritabanı) dizinini seçin ve İndeks Ekle düğmesine tıklayın Browse Gözat &OK &TAMAM Apply changes Değişiklikleri uygula &Cancel &İptal Discard changes Değişiklikleri sil Result paragraph<br>format string Sonuç paragrafı<br>biçimlendirme ifadesi Automatically add phrase to simple searches Basit aramalara ifadeyi otomatik olarak ekle A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. [linux kernel] (2 sözcük) araması [linux veya kernel veya (linux ifadesi 2 tane kernel)] olarak değiştirilecektir. Bu, aranacak sözcüklerin tam olarak girildiği gibi görüntülendiği sonuçlara yüksek öncelik verilmesini sağlayacaktır. User preferences Kullanıcı tercihleri Use desktop preferences to choose document editor. Belge düzenleyiciyi seçmek için masaüstü tercihlerini kullan. External indexes Dış indeksler Toggle selected Seç /Bırak Activate All Tümünü Etkinleştir Deactivate All Tümünü Pasifleştir Remove selected Seçileni sil Remove from list. This has no effect on the disk index. Listeden sil. Bu diskteki indeksi etkilemez. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Tüm sonuç listesi paragraflarını tanımlar. Qt html biçimini ve printf benzeri yer değiştiricileri kullanın:<br>%A Özet<br> %D Tarih<br> %I Simge resminin adı<br> %K Anahtar sözcükler (eğer varsa)<br> %L Önizle ve Düzenle bağlantıları<br> %M Mime tipi<br> %N Sonuç sayısı<br> %R Uyum yüzdesi<br> %S Boyut bilgileri<br> %T Başlık<br> %U Url<br> Remember sort activation state. Sıralama kurallarını hatırla. Maximum text size highlighted for preview (megabytes) Önizlemede vurgulanacak en fazla metin boyutu (MB) Texts over this size will not be highlighted in preview (too slow). Bu boyuttan büyük metinler önizlemede vurgulanmayacak (çok yavaş). Highlight color for query terms Highlight color for query terms Prefer Html to plain text for preview. Prefer Html to plain text for preview. If checked, results with the same content under different names will only be shown once. If checked, results with the same content under different names will only be shown once. Hide duplicate results. Hide duplicate results. Choose editor applications Choose editor applications Display category filter as toolbar instead of button panel (needs restart). Display category filter as toolbar instead of button panel (needs restart). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Query language magic file name suffixes. Query language magic file name suffixes. Enable Enable ViewAction Changing actions with different current values Farklı değerlerle eylemler değiştiriliyor Mime type Mime Tipi Command Command MIME type MIME type Desktop Default Desktop Default Changing entries with different current values Changing entries with different current values ViewActionBase File type Dosya tipi Action Davranış Select one or several file types, then click Change Action to modify the program used to open them Bir ya da birkaç dosya tipi seçin ve Eylemi Değiştir düğmesine tıklayarak hangi uygulama ile açılacağını değiştirin Change Action Davranışı Değiştir Close Kapat Native Viewers Doğal Göstericiler Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Use Desktop preferences by default Use Desktop preferences by default Select one or several file types, then use the controls in the frame below to change how they are processed Select one or several file types, then use the controls in the frame below to change how they are processed Exception to Desktop preferences Exception to Desktop preferences Action (empty -> recoll default) Action (empty -> recoll default) Apply to current selection Apply to current selection Recoll action: Recoll action: current value current value Select same Select same <b>New Values:</b> <b>New Values:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Değer, yürütülecek bir komut satırıdır. Yerine koymalar: %s: arama dizesi; %p: sayfa numarası; <br>%f: belge dosya adı. Daha fazla yardım için F1 tuşuna basın. Webcache Webcache editor Webcache editor Search regexp Search regexp TextLabel MetinEtiketi WebcacheEdit Copy URL Copy URL Unknown indexer state. Can't edit webcache file. Unknown indexer state. Can't edit webcache file. Indexer is running. Can't edit webcache file. Indexer is running. Can't edit webcache file. Delete selection Delete selection Webcache was modified, you will need to run the indexer after closing this window. Webcache was modified, you will need to run the indexer after closing this window. Save to File Dosyaya Kaydet File creation failed: Dosya oluşturma başarısız oldu: Maximum size %1 (Index config.). Current size %2. Write position %3. Metin parçasını Türkçe'ye çevirirken, metin arama arayüzü bağlamında çevirmeniz gerekmektedir. Metin parçası: Maksimum boyut %1 (İndeks yapılandırması). Mevcut boyut %2. Yazma konumu %3. WebcacheModel MIME MIME Url Url Date Tarih Size Boyutunuza URL URL WinSchedToolW Error Error Configuration not initialized Configuration not initialized <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> Command already started Command already started Recoll Batch indexing Recoll Batch indexing Start Windows Task Scheduler tool Start Windows Task Scheduler tool Could not create batch file Toplu dosya oluşturulamadı. confgui::ConfBeaglePanelW Steal Beagle indexing queue Steal Beagle indexing queue Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Web cache directory name Web cache directory name The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Max. size for the web cache (MB) Max. size for the web cache (MB) Entries will be recycled once the size is reached Entries will be recycled once the size is reached Web page store directory name Web page store directory name The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Max. size for the web store (MB) Max. size for the web store (MB) Process the WEB history queue Process the WEB history queue Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). confgui::ConfIndexW Can't write configuration file Yapılandırma dosyası yazılamadı Recoll - Index Settings: Recoll - Index Settings: confgui::ConfParamFNW Browse Gözat Choose Gözat confgui::ConfParamSLW + + - - Add entry Add entry Delete selected entries Delete selected entries ~ ~ Edit selected entries Edit selected entries confgui::ConfSearchPanelW Automatic diacritics sensitivity Automatic diacritics sensitivity <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. Automatic character case sensitivity Automatic character case sensitivity <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. Maximum term expansion count Maximum term expansion count <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. Maximum Xapian clauses count Maximum Xapian clauses count <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. confgui::ConfSubPanelW Global Genel Max. compressed file size (KB) Max. compressed file size (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Max. text file size (MB) Max. text file size (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Text file page size (KB) Text file page size (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Max. filter exec. time (S) Max. filter exec. time (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Only mime types Only mime types An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Exclude mime types Exclude mime types Mime types not to be indexed Mime types not to be indexed Max. filter exec. time (s) Max. filter exec. time (s) confgui::ConfTabsW Apply Uygula confgui::ConfTopPanelW Top directories Üst dizinler The list of directories where recursive indexing starts. Default: your home. Özyinelemeli indesklemenin başlayacağı dizinlerin listesi. Öntanımlı: ev dizininiz. Skipped paths Atlanan yollar These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Bunlar indekslemenin girmeyeceği dizinlerin adlarıdır.<br> * gibi özel karakterler içerebilir. İndeksleyici tarafından görülen yollar ile eşleşmelidir (örneğin: eğer en üst dizinler '/home/ben' ve '/home' içeriyorsa ve home '/usr/home' dizinine bağlantılı ise atlanacak dizin yolu '/home/me/tmp*' olmalıdır, '/usr/home/me/tmp*' değil) Stemming languages Sözcük kökleri ayrıştırılabilir diller The languages for which stemming expansion<br>dictionaries will be built. Kök ayrıştırma genişlemesi için sözlükleri<br>inşa edilecek olan diller. Log file name Günlük dosyasının adı The file where the messages will be written.<br>Use 'stderr' for terminal output İletilerin yazılacağı dosya.<br>Uçbirim çıktısı için 'stderr' kullanın Log verbosity level Günlük dosyası ayrıntı düzeyi This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Bu değer ileti boyutunu ayarlar,<br>sadece hatalardan hata ayıklama verilerine kadar. Index flush megabytes interval İndex düzeltme MB aralığı This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Bu değer diske gönderilecek indekslenmiş veri miktarını ayarlar.<br>Bu indeksleyicinin bellek kullanımını kontrol etmeye yarar. Öntanımlı 10MB Max disk occupation (%) En yüksek disk kullanımı (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Bu disk kullanımının yüzdesidir ki bu orana erişildiğinde indeksleme durdurulur (diskin doldurulmasını engellemek için).<br>0 kısıtlama yok demektir (Öntanımlı). No aspell usage Aspell kullanımı yok Aspell language Aspell dili The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Aspell sözlükleri için dil. Bu 'en' ya da 'fr' gibi olmalıdır ...<br>Eğer bu değer ayarlanmazsa şimdi kullandığnız NLS çevresel değişkeni kullanılacaktır. Sisteminizde neyin yüklü olduğu hakkında bilgi almak için 'aspell config' yazıp 'data-dir' içerisindeki .dat dosyalarına bakın. Database directory name Veritabanı dizininin adı The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. İndeksin duracağı dizinin adı<br>Eğer tam yol verilmezse yol yapılandırma dizinine göre belirlenecek. Öntanımlı dizin adı 'xapiandb'. Use system's 'file' command Sistemdeki 'file' komutunu kullan Use the system's 'file' command if internal<br>mime type identification fails. İç mime tipi belirleme işlemi başarısız olursa<br> sistemdeki 'file' komutunu kullan. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Unac exceptions Unac exceptions <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Max disk occupation (%, 0 means no limit) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. uiPrefsDialogBase User preferences Kullanıcı tercihleri User interface Kullanıcı arayüzü Number of entries in a result page Bir sonuç sayfasındaki sonuç sayısı If checked, results with the same content under different names will only be shown once. If checked, results with the same content under different names will only be shown once. Hide duplicate results. Hide duplicate results. Highlight color for query terms Highlight color for query terms Result list font Sonuç listesi yazıtipi Opens a dialog to select the result list font Sonuç listesi yazıtipini seçmek için bir pencere açar Helvetica-10 Helvetica-10 Resets the result list font to the system default Sonuç listesi yazıtipini sistem ayarlarına döndür Reset Sıfırla Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Tüm sonuç listesi paragraflarını tanımlar. Qt html biçimini ve printf benzeri yer değiştiricileri kullanın:<br>%A Özet<br> %D Tarih<br> %I Simge resminin adı<br> %K Anahtar sözcükler (eğer varsa)<br> %L Önizle ve Düzenle bağlantıları<br> %M Mime tipi<br> %N Sonuç sayısı<br> %R Uyum yüzdesi<br> %S Boyut bilgileri<br> %T Başlık<br> %U Url<br> Result paragraph<br>format string Sonuç paragrafı<br>biçimlendirme ifadesi Texts over this size will not be highlighted in preview (too slow). Bu boyuttan büyük metinler önizlemede vurgulanmayacak (çok yavaş). Maximum text size highlighted for preview (megabytes) Önizlemede vurgulanacak en fazla metin boyutu (MB) Use desktop preferences to choose document editor. Belge düzenleyiciyi seçmek için masaüstü tercihlerini kullan. Choose editor applications Choose editor applications Display category filter as toolbar instead of button panel (needs restart). Display category filter as toolbar instead of button panel (needs restart). Auto-start simple search on whitespace entry. Beyaz alan girdisi olduğunda basit aramayı otomatik olarak başlat. Start with advanced search dialog open. Gelişmiş arama penceresi ile başla. Start with sort dialog open. Sıralama penceresi ile başla. Remember sort activation state. Sıralama kurallarını hatırla. Prefer Html to plain text for preview. Prefer Html to plain text for preview. Search parameters Arama parametreleri Stemming language Kök ayrıştırma dili A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. [linux kernel] (2 sözcük) araması [linux veya kernel veya (linux ifadesi 2 tane kernel)] olarak değiştirilecektir. Bu, aranacak sözcüklerin tam olarak girildiği gibi görüntülendiği sonuçlara yüksek öncelik verilmesini sağlayacaktır. Automatically add phrase to simple searches Basit aramalara ifadeyi otomatik olarak ekle Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Sorgu sözcükleri kullanılarak sonuç listesi girdileri için özet oluşturulsun mu ? Büyük boyutlu belgelerde yavaş olabilir. Dynamically build abstracts Özetleri dinamik olarak oluştur Do we synthetize an abstract even if the document seemed to have one? Belgenin bir özeti varsa bile bir yapay özet oluşturulsun mu? Replace abstracts from documents Belgelerden özetleri kaldır Synthetic abstract size (characters) Yapay özet boyutu (karakter sayısı) Synthetic abstract context words Yapay özet sözcükleri The words in the list will be automatically turned to ext:xxx clauses in the query language entry. The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Query language magic file name suffixes. Query language magic file name suffixes. Enable Enable External Indexes Dış indeksler Toggle selected Seç /Bırak Activate All Tümünü Etkinleştir Deactivate All Tümünü Pasifleştir Remove from list. This has no effect on the disk index. Listeden sil. Bu diskteki indeksi etkilemez. Remove selected Seçileni sil Click to add another index directory to the list Click to add another index directory to the list Add index İndeks ekle Apply changes Değişiklikleri uygula &OK &TAMAM Discard changes Değişiklikleri sil &Cancel &İptal Abstract snippet separator Abstract snippet separator Use <PRE> tags instead of <BR>to display plain text as html. Use <PRE> tags instead of <BR>to display plain text as html. Lines in PRE text are not folded. Using BR loses indentation. Lines in PRE text are not folded. Using BR loses indentation. Style sheet Style sheet Opens a dialog to select the style sheet file Opens a dialog to select the style sheet file Choose Gözat Resets the style sheet to default Resets the style sheet to default Lines in PRE text are not folded. Using BR loses some indentation. Lines in PRE text are not folded. Using BR loses some indentation. Use <PRE> tags instead of <BR>to display plain text as html in preview. Use <PRE> tags instead of <BR>to display plain text as html in preview. Result List Result List Edit result paragraph format string Edit result paragraph format string Edit result page html header insert Edit result page html header insert Date format (strftime(3)) Date format (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Autophrase term frequency threshold percentage Autophrase term frequency threshold percentage Plain text to HTML line style Plain text to HTML line style Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + wrap Exceptions Exceptions Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Disable Qt autocompletion in search entry. Disable Qt autocompletion in search entry. Search as you type. Search as you type. Paths translations Paths translations Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Snippets window CSS file Snippets window CSS file Opens a dialog to select the Snippets window CSS style sheet file Opens a dialog to select the Snippets window CSS style sheet file Resets the Snippets window style Resets the Snippets window style Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Document filter choice style: Document filter choice style: Buttons Panel Buttons Panel Toolbar Combobox Toolbar Combobox Menu Menu Show system tray icon. Show system tray icon. Close to tray instead of exiting. Close to tray instead of exiting. Start with simple search mode Start with simple search mode Show warning when opening temporary file. Show warning when opening temporary file. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Synonyms file Synonyms file Highlight CSS style for query terms Highlight CSS style for query terms Recoll - User Preferences Recoll - User Preferences Set path translations for the selected index or for the main one if no selection exists. Set path translations for the selected index or for the main one if no selection exists. Activate links in preview. Activate links in preview. Make links inside the preview window clickable, and start an external browser when they are clicked. Make links inside the preview window clickable, and start an external browser when they are clicked. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Start search on completer popup activation. Start search on completer popup activation. Maximum number of snippets displayed in the snippets window Maximum number of snippets displayed in the snippets window Sort snippets by page number (default: by weight). Sort snippets by page number (default: by weight). Suppress all beeps. Suppress all beeps. Application Qt style sheet Application Qt style sheet Limit the size of the search history. Use 0 to disable, -1 for unlimited. Limit the size of the search history. Use 0 to disable, -1 for unlimited. Maximum size of search history (0: disable, -1: unlimited): Maximum size of search history (0: disable, -1: unlimited): Generate desktop notifications. Generate desktop notifications. Misc Misc Work around QTBUG-78923 by inserting space before anchor text Work around QTBUG-78923 by inserting space before anchor text Display a Snippets link even if the document has no pages (needs restart). Display a Snippets link even if the document has no pages (needs restart). Maximum text size highlighted for preview (kilobytes) Maximum text size highlighted for preview (kilobytes) Start with simple search mode: Start with simple search mode: Hide toolbars. Hide toolbars. Hide status bar. Hide status bar. Hide Clear and Search buttons. Hide Clear and Search buttons. Hide menu bar (show button instead). Hide menu bar (show button instead). Hide simple search type (show in menu only). Hide simple search type (show in menu only). Shortcuts Shortcuts Hide result table header. Hide result table header. Show result table row headers. Show result table row headers. Reset shortcuts defaults Reset shortcuts defaults Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Use F1 to access the manual Use F1 to access the manual Hide some user interface elements. Kullanıcı arayüzü öğelerini gizle. Hide: Gizle: Toolbars Araç çubukları Status bar Durum çubuğu Show button instead. Düğme yerine göster. Menu bar Menü çubuğu Show choice in menu only. Sadece menüde seçeneği göster. Simple search type Simple search type Clear/Search buttons Arama düğmeleri Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Tablo satırlarına atlamak için Ctrl+[0-9]/Shift+[a-z] kısayollarını devre dışı bırakın. None (default) Hiçbiri (varsayılan) Uses the default dark mode style sheet Varsayılan koyu mod stillerini kullanır. Dark mode Dark mode Choose QSS File QSS Dosyasını Seç To display document text instead of metadata in result table detail area, use: Sonuç tablosu detay alanında metaveri yerine belge metnini göstermek için şunu kullanın: left mouse click sol fare tıklaması Shift+click Shift+click - Kaydırma+tıklama Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Stil sayfası dosyasını seçmek için bir iletişim kutusu açar. Örnek için /usr/share/recoll/examples/recoll[-dark].qss dosyasına bakın. Result Table Result Table Do not display metadata when hovering over rows. Satırların üzerine gelindiğinde meta verileri görüntülemeyin. Work around Tamil QTBUG-78923 by inserting space before anchor text Tamil QTBUG-78923'i çözmek için bağlantı metninden önce boşluk ekleyerek çalışın. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Hata, vurgulanan Tamil kelimelerin içinde garip daire karakterlerin görüntülenmesine neden olur. Geçici çözüm, sorunu düzelttiği görünen ek bir boşluk karakteri ekler. Depth of side filter directory tree Yan filtre dizin ağacının derinliği Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Kullanıcı arayüzü için yakınlaştırma faktörü. Varsayılan ekran çözünürlüğünüz için uygun değilse faydalıdır. Display scale (default 1.0): Görüntü ölçeği (varsayılan 1.0): Automatic spelling approximation. Otomatik yazım yaklaşımı. Max spelling distance Maksimum yazım mesafesi Add common spelling approximations for rare terms. Nadir terimler için yaygın yazım yaklaşımlarını ekleyin. Maximum number of history entries in completer list Tamamlama listesindeki maksimum geçmiş giriş sayısı Number of history entries in completer: Tamamlamada geçmiş giriş sayısı: Displays the total number of occurences of the term in the index İndeksteki terimin toplam sayısını gösterir. Show hit counts in completer popup. Tamamlama penceresinde vuruş sayılarını göster. Prefer HTML to plain text for preview. Önizleme için düz metin yerine HTML'yi tercih edin. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Aşağıdaki metin parçasını Türkçe'ye çevirin: Qt QDateTimeEdit belgelerine bakın. Ör. yyyy-MM-dd. Varsayılan Qt/Sistem formatını kullanmak için boş bırakın. Side filter dates format (change needs restart) Yan filtre tarih formatı (değişiklik yeniden başlatmayı gerektirir) If set, starting a new instance on the same index will raise an existing one. Eğer ayarlanırsa, aynı dizinde yeni bir örnek başlatmak mevcut olan bir örneği yükseltecektir. Single application Tek uygulama Set to 0 to disable and speed up startup by avoiding tree computation. Ağaç hesaplamasını önleyerek başlangıcı hızlandırmak için devre dışı bırakmak için 0 olarak ayarlayın. The completion only changes the entry when activated. Tamamlama yalnızca etkinleştirildiğinde girişi değiştirir. Completion: no automatic line editing. Tamamlama: otomatik satır düzenleme yok. Interface language (needs restart): Arayüz dili (yeniden başlatma gerektirir): Note: most translations are incomplete. Leave empty to use the system environment. Not: çoğu çeviri eksiktir. Sistem ortamını kullanmak için boş bırakın. Preview Önizle Set to 0 to disable details/summary feature Ayrıntı/özet özelliğini devre dışı bırakmak için 0 olarak ayarlayın. Fields display: max field length before using summary: Alanlar görüntüle: özet kullanmadan önce maksimum alan uzunluğu: Number of lines to be shown over a search term found by preview search. Önizleme aramasında bulunan bir arama terimi üzerinde gösterilecek satır sayısı. Search term line offset: Arama terimi satır ofseti: Wild card characters *?[] will processed as punctuation instead of being expanded Metin arama arayüzünde, Joker karakterler *?[] genişletilmesi yerine noktalama işareti olarak işlenecektir. Ignore wild card characters in ALL terms and ANY terms modes Tüm terimler ve Herhangi bir terim modlarında joker karakterleri yok sayın. Color scheme Renk şeması When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Karanlık modda HTML görüntülerken, koyu bir arka plan (ve açık renk) kullanmaya çalışın. Bu, birçok belgeyle çakışır; çünkü belgeler kendi CSS (koyu) ön plan rengini kullanarak bizim açık ayarımızı geçersiz kılabilir ve okunamayan bir belgeye neden olabilir, bu yüzden varsayılan olarak kapalıdır. Use dark background when displaying HTML in dark mode. Karanlık modda HTML görüntülerken koyu arka plan kullanın. recoll-1.43.12/qtgui/i18n/recoll_ru.ts0000644000175000017500000076651415124431112016727 0ustar dockesdockes ActSearchDLG Menu search Меню поиска AdvSearch All clauses всем условиям Any clause любому условию text текст texts тексты spreadsheet таблица spreadsheets таблицы presentation презентация media медиа message сообщение other прочее Advanced Search Сложный поиск Load next stored search Загрузить следующий сохранённый запрос Load previous stored search Загрузить предыдущий сохранённый запрос Bad multiplier suffix in size filter Неверный множитель в фильтре размера AdvSearchBase Advanced search Сложный поиск Find Найти All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Все заполненные поля справа будут объединены логическим И («Все условия») или ИЛИ («Любое условие»). <br>В полях типа «Любые», «Все» или «Без» допустимы сочетания простых слов и фразы, заключённые в двойные кавычки.<br>Пустые поля игнорируются. Search for <br>documents<br>satisfying: Искать <br>документы,<br>удовлетворяющие: Delete clause Удалить условие Add clause Добавить условие Filter Фильтр Check this to enable filtering on dates Включить фильтрование по дате Filter dates Фильтровать по дате From Из To В Filter birth dates Фильтровать по дате рождения Check this to enable filtering on sizes Включить фильтрование по размеру Filter sizes Фильтровать по размеру Minimum size. You can use k/K,m/M,g/G as multipliers Минимальный размер. Допускается использование множителей к/К, м/М, г/Г Min. Size Минимум Maximum size. You can use k/K,m/M,g/G as multipliers Максимальный размер. Допускается использование множителей к/К, м/М, г/Г Max. Size Максимум Check this to enable filtering on file types Фильтровать по типам файлов Restrict file types Ограничить типы файлов Check this to use file categories instead of raw mime types Использовать категории, а не типы MIME By categories По категориям Save as default Сделать параметром по умолчанию Searched file types Искать среди All ----> Все ----> Sel -----> Выделенные ----> <----- Sel <----- Выделенные <----- All <----- Все Ignored file types Игнорируемые типы файлов Enter top directory for search Указать имя каталога верхнего уровня для поиска Browse Обзор Restrict results to files in subtree: Ограничить результаты поиска файлами в подкаталоге: Invert Обратить Start Search Начать поиск Close Закрыть ConfIndexW Can't write configuration file Невозможно записать файл конфигурации Global parameters Общие параметры Local parameters Локальные параметры Web history История в веб Search parameters Параметры поиска Top directories Каталоги верхнего уровня The list of directories where recursive indexing starts. Default: your home. Список каталогов, где начинается рекурсивное индексирование. По умолчанию: домашний каталог. Skipped paths Пропущенные пути These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Полный путь к директории, которая не будет затрагиваться при индексировании. <br>Может содержать маски. Записи должны совпадать с путями, которые видит индексатор (например, если topdirs включает «/home/me», а «/home» на самом деле ведёт к «/usr/home», правильной записью skippedPath будет «/home/me/tmp*», а не «/usr/home/me/tmp*») Stemming languages Языки со словоформами The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... Языки, для которых будут составлены словари словоформ.<br>Доступные значения описаны в документации к Xapian (например, english, french, russian...) Log file name Имя файла журнала The file where the messages will be written.<br>Use 'stderr' for terminal output Файл, куда будут записываться сообщения.<br>Используйте 'stderr' для вывода в терминал Log verbosity level Уровень подробности журнала This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Это значение определяет подробность сообщений,<br>от ошибок до отладочных данных. Indexer log file name Имя файла журнала индексатора If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Если поле пустое, будет использовано имя файла выще. Отдельный файл с журналом для отладки может быть полезен, т.к. общий журнал<br>при старте интерфейса будет затёрт. Index flush megabytes interval Интервал сброса данных индекса (МБ) This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Это значение определяет количество данных, индексируеммых между сбросами на диск.<br>Помогает контролировать использование памяти индексатором. Значение по умолчанию: 10МБ Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Степень заполнения диска в процентах, при которой прекратится индексирование<br>Например, 90% для останова на 90% заполнения; 0 или 100 снимает ограничение Disk full threshold percentage at which we stop indexing<br>(E.g. 90% to stop at 90% full, 0 or 100 means no limit) Степень заполнения диска в процентах, при которой прекратится индексирование<br>Например, 90% для останова на 90% заполнения; 0 или 100 снимает ограничение Start folders Начальные папки The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Список папок/каталогов для индексации. Подпапки будут обрабатываться рекурсивно. По умолчанию: ваш домашний каталог. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Процент заполнения диска, при достижении которого мы прекращаем индексацию (например, 90 для остановки на 90% заполнения, 0 или 100 означает отсутствие ограничения) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Процент занятого пространства на диске (в целом, не только индексом), при котором индексирование завершится ошибкой и прекратится.<br>По умолчанию значение 0 снимает ограничение. Suspend the real time indexer when running on battery При работе от аккумулятора приостановите индексацию в реальном времени. The indexer will wait for a return on AC and reexec itself when it happens Индексатор будет ожидать возврата по AC и повторно выполнит себя, когда это произойдет. No aspell usage Не использовать aspell (by default, aspell suggests mispellings when a query has no results). (по умолчанию aspell подсказывает об опечатках, когда запрос не даёт результатов) The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Список папок/каталогов для индексации рекурсивно со всеми их подпапками.<br>Символ '~' расширяется до вашей домашней директории, которая является значением по умолчанию. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Отключает использование aspell для создания вариантов написания в обозревателе терминов.<br> Полезно, если aspell отсутствует или не работает. Aspell language Язык aspell The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Язык словаря aspell в виде двухбуквенного кода, например, 'en', 'fr', 'ru'...<br>Если значение не установлено, будет предпринята попытка вывести его из локали, что обычно срабатывает. Чтобы посмотреть, что установлено на вашей системе, наберите 'aspell config' и поищите .dat-файлы в каталоге, указанном как 'data-dir'. Database directory name Каталог базы данных The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Имя каталога, в котором хранится индекс<br>Путь указывается относительно каталога конфигурации и не является абсолютным. По умолчанию: «xapiandb». Unac exceptions Исключения unac <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. Это исключения для механизма unac, который по умолчанию отбрасывает все диакритические знаки и проводит каноническую декомпозицию. Можно переопределить механизм удаления надстрочных знаков для отдельных символов или добавить правила декомпозиции (например, для лигатур). В каждой отделённой запятой записи первый символ является исходным, а остальные — его интерпретации. Process the Web history queue Обработка очереди истории веб-поиска Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Включает индексацию посещённых страниц в Firefox.<br>(требуется установка плагина Recoll) Web page store directory name Имя каталога с сохранёнными веб-страницами The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Имя каталога хранения просмотренных веб-страниц.<br>Путь указывается относительно каталога конфигурации и не является абсолютным. Max. size for the web store (MB) Предельный размер веб-хранилища (МБ) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Записи будут удалены при достижении максимального размера хранилища.<br>Целесообразно только увеличивать размер, так как уменьшение значения не повлечёт усечение существующего файла (лишь перестанет использовать его хвост). Page recycle interval Интервал обновления страницы <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. <p>По умолчанию в кэше хранится только один экземпляр ссылки. Это можно изменить в настройках, где указывается значение длительности хранения нескольких экземпляров ('день', 'неделя', 'месяц', 'год'). Учтите, что увеличение интервала не сотрёт уже существующие записи. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 На заметку: старые страницы будут стёрты, чтобы освободилось место для новых, когда будет достигнут предельный объём. Текущий размер: %1 Browser add-on download folder Папка загрузки дополнений для браузера Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Установите это только в том случае, если вы установили параметр «Подкаталог загрузок» в настройках дополнения для веб-браузера. <br>В этом случае это должен быть полный путь к каталогу (например, /home/[me]/Downloads/my-subdir) Automatic diacritics sensitivity Автоматический учёт диакритических знаков <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Автоматически включает учёт диакритических знаков, если строка поиска содержит диакритические знаки (кроме unac_except_trans). В противном случае используйте язык запросов и модификатор <i>D</i> для учёта диакритических знаков. Automatic character case sensitivity Автоматический учёт регистра <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Автоматически включает учёт регистра, если строка поиска содержит заглавные буквы (кроме первой буквы). В противном случае используйте язык запросов и модификатор <i>C</i> учёта регистра. Maximum term expansion count Предельное число однокоренных слов <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Предельное число однокоренных слов для одного слова (например, при использовании масок). Значение по умолчанию в 10 000 является разумным и поможет избежать ситуаций, когда запрос кажется зависшим при переборе списка слов. Maximum Xapian clauses count Предельное число Xapian-предложений <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Предельное число элементарных условий, добавляемых к запросу Xapian. В некоторых случаях результат поиска однокоренных слов может быть избыточным и занять слишком большой объём памяти. Значение по умолчанию в 100 000 достаточно для большинства случаев и подходит для современных аппаратных конфигураций. Store some GUI parameters locally to the index Сохраните некоторые параметры GUI локально в индекс. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index Настройки GUI обычно хранятся в общем файле, действительном для всех индексов. Установка этого параметра сделает некоторые настройки, такие как настройка таблицы результатов, специфичными для индекса. ConfSubPanelW Only mime types Только MIME-типы An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Исчерпывающий перечень индексируемых типов MIME.<br>Другие типы индексироваться не будут. Обычно пуст и неактивен Exclude mime types Исключить MIME-типы Mime types not to be indexed Типы MIME, индексирование которых проводиться не будет Max. compressed file size (KB) Предельный размер сжатого файла (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Это значение устанавливает предельный размер сжатых файлов, которые будут обрабатываться. Значение -1 снимает ограничение, 0 отключает распаковку. Max. text file size (MB) Предельный размер текстового файла (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Это значение устанавливает предельный размер текстовых файлов, которые будут обрабатываться. Значение -1 снимает ограничение. Рекомендуется использовать для исключения файлов журнала большого размера из процесса индексирования. Text file page size (KB) Pазмер страницы текстового файла (КБ) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Если это значение установлено (т.е. не равно -1), то при индексировании текстовые файлы разбиваются на блоки соответствующего размера. Данный параметр полезен при выполнении поиска в очень больших текстовых файлах (например, файлах журналов). Max. filter exec. time (s) Пред. время работы фильтра (с) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Работа внешних фильтров, длящаяся дольше указанного времени, будет прервана. Применяется для редких случаев (например, с фильтром postscript), когда возникает зацикливание фильтра при обработке какого-то документа. Установите значение -1, чтобы снять ограничение. Global Общее ConfigSwitchDLG Switch to other configuration Переключиться на другую конфигурацию ConfigSwitchW Choose other Выберите другой Choose configuration directory Выберите каталог конфигурации CronToolW Cron Dialog Настройка заданий Cron <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Индексирование <span style=" font-weight:600;">Recoll</span> по расписанию (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Каждое поле может содержать маску (*), единичное числовое значение, разделённый запятыми список (1,3,5) или диапазон чисел (1-7). Эти поля будут использованы <span style=" font-style:italic;">как есть</span> в файле crontab, также можно указать необходимые параметры в самом файле, см. crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Например, если ввести знак <span style=" font-family:'Courier New,courier';">*</span> в поле <span style=" font-style:italic;">«Дни недели»</span>, <span style=" font-family:'Courier New,courier';">12,19</span> — в поле <span style=" font-style:italic;">«Часы»</span> и <span style=" font-family:'Courier New,courier';">15</span> — в поле <span style=" font-style:italic;">«Минуты»</span>, индексирование будет производиться ежедневно в 12:15 и 19:15.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Расписание с очень частыми запусками может оказаться менее эффективным, чем индексирование в реальном времени.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Дни недели (* или 0-7, 0 или 7 — воскресенье) Hours (* or 0-23) Часы (* или 0-23) Minutes (0-59) Minutes (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Для остановки автоматического идексирования по расписанию нажмите <span style=" font-style:italic;">«Выключить»</span>, для запуска — <span style=" font-style:italic;">«Включить»</span>, для отмены внесённых изменений — <span style=" font-style:italic;">«Отмена»</span>.</p></body></html> Enable Включить Disable Выключить It seems that manually edited entries exist for recollindex, cannot edit crontab Похоже, что для recollindex есть вручную исправленные записи, редактирование crontab невозможно Error installing cron entry. Bad syntax in fields ? Ошибка установки записи cron. Неверный синтаксис полей? EditDialog Dialog Диалог EditTrans Source path Исходный путь Local path Локальный путь Config error Ошибки конфигурации Path in index Путь в индексе Translated path Переведенный путь Original path Изначальный путь EditTransBase Path Translations Корректировка путей Setting path translations for Задать корректировку для Select one or several file types, then use the controls in the frame below to change how they are processed Выберите типы файлов и используйте кнопки управления ниже, чтобы изменить порядок обработки файлов Add Добавить Delete Удалить Cancel Отмена Save Сохранить FirstIdxDialog First indexing setup Настройка первого индексирования <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Похоже, что индекс для этой конфигурации не существует.</span><br /><br />Для индексирования только домашнего каталога с набором умолчаний нажмите кнопку <span style=" font-style:italic;">«Запустить индексирование»</span>. Детальную настройку можно будет провести позже. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Если нужно больше контроля, воспользуйтесь приведёнными ниже ссылками для настройки параметров и расписания индексирования.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Перейти к этим инструментам позднее можно через меню <span style=" font-style:italic;">«Настройка»</span>.</p></body></html> Indexing configuration Настройка индексирования This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Здесь можно указать, какие каталоги требуется индексировать, а также настроить такие параметры как исключение путей или имён файлов, используемые по умолчанию кодировки и т.д. Indexing schedule Расписание индексирования This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Здесь можно выбрать режим индексирования: по расписанию или в реальном времени, а также настроить расписание автоиндексирования (с использованием cron). Start indexing now Запустить индексирование FragButs %1 not found. %1 не найден. %1: %2 %1: %2 Query Fragments Фрагменты запроса IdxSchedW Index scheduling setup Настройка расписания индексирования <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Индексирование <span style=" font-weight:600;">Recoll</span> может работать постоянно, индексируя изменяющиеся файлы, или запускаться через определённые промежутки времени. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Рекомендуется ознакомиться с руководством пользователя программы, чтобы выбрать наиболее подходящий режим работы (нажмите F1 для вызова справки). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Этот инструмент позволяет выбрать, будет ли индексирование производиться по расписанию или в реальном времени при входе в систему (или оба варианта сразу, что вряд ли имеет смысл). </p></body></html> Cron scheduling Расписание запуска The tool will let you decide at what time indexing should run and will install a crontab entry. Этот инструмент позволяет выбрать, в какое время запускать индексирование, а также сделать запись в crontab. Real time indexing start up Запуск индексирования в реальном времени Decide if real time indexing will be started when you log in (only for the default index). Здесь можно выбрать, нужно ли начинать индексирование в реальном времени при входе в систему (только для индекса по умолчанию). ListDialog Dialog Диалог GroupBox GroupBox Main "history" file is damaged, please check or remove it: Файл истории повреждён, проверьте или удалите его: No db directory in configuration Каталог базы не задан в конфигурации Needs "Show system tray icon" to be set in preferences! Необходимо включить параметр настройки «Отображать значок в трее»! PTransEdit Path in index Путь в индексе Translated path Переведенный путь Config error Ошибки конфигурации Original path Изначальный путь Local path Локальный путь PTransEditBase Path Translations Корректировка путей Select one or several file types, then use the controls in the frame below to change how they are processed Выберите один или несколько типов файлов, затем используйте элементы управления в рамке ниже, чтобы изменить способ их обработки. Add Добавить Delete Удалить Cancel Отмена Save Сохранить Preview Form Форма Tab 1 1-я вкладка &Search for: &Искать: &Next &Следующий &Previous &Предыдущий Clear Очистить Match &Case &С учётом регистра Previous result document Предыдущий документ с результатами Next result document Следующий документ с результатами Open Открыть Preview Window Окно предпросмотра Close preview window Закрыть окно предпросмотра Show next result Показать следующий результат Show previous result Показать предыдущий результат Close tab Закрыть вкладку Print Печать Error loading the document: file missing. Ошибка загрузки документа: файл отсутствует. Error loading the document: no permission. Ошибка загрузки документа: нет разрешения. Error loading: backend not configured. Ошибка загрузки: бэкенд не настроен. Error loading the document: other handler error<br>Maybe the application is locking the file ? загрузки документа: ошибка другого обработчика<br>Может, приложение заблокировало файл? Error loading the document: other handler error. Ошибка загрузки документа: ошибка другого обработчика. <br>Attempting to display from stored text. <br>Попытка отобразить из сохранённого текста. Missing helper program: Отсутствует обработчики: Can't turn doc into internal representation for Невозможно сконвертировать документ во внутреннее представление для Canceled Отменено Cancel Отмена Could not fetch stored text Не удалось получить сохранённый текст Creating preview text Создание текста для просмотра Loading preview text into editor Загрузка текста в редактор PreviewTextEdit Show fields Показать поля Show image Показать изображение Show main text Показать основной текст Reload as Plain Text Перезагрузить как простой текст Reload as HTML Перезагрузить как HTML Select All Выделить всё Copy Копировать Print Печать Fold lines Линия сгиба Preserve indentation Сохранить отступы Save document to file Сохранить документ в файл Open document Открыть документ Print Current Preview Печать текущего вида QObject <b>Customised subtrees <b>Пользовательские подкаталоги The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Список подкаталогов индексируемого дерева,<br>к которым должны применяться особые параметры. По умолчанию: пусто. <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>Следующие параметры устанавливаются либо на верхнем уровне, если в списке выше ничего не выбрано или выбрана пустая строка, либо для выбранного подкаталога. Вы можете добавить или удалить каталоги, нажав кнопки +/-. Skipped names Пропускать These are patterns for file or directory names which should not be indexed. Шаблоны имён файлов или каталогов, имена которых не следует индексировать. These are patterns for file or directory names which should not be indexed. Это шаблоны для имен файлов или каталогов, которые не должны быть проиндексированы. Ignored endings Игнорируемые окончания These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Окончания имён файлов, индексируемых только по имени (без попытки определить типы MIME, разжатия либо индексации содержимого). Default<br>character set Кодировка по умолчанию Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Кодировка, которая будет использована при чтении файлов, в которых кодировка не указана явно; например, простых текстовых файлов.<br>Значение по умолчанию не установлено и берётся из параметров системы (локали). Follow symbolic links Открывать символические ссылки Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Открывать символические ссылки при индексировании. По умолчанию действие не выполняется во избежание дублированного индексирования Index all file names Индексировать все имена файлов Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Индексировать имена файлов, содержимое которых невозможно определить или обработать (неизвестный или неподдерживаемый тип MIME). По умолчанию включено QWidget Create or choose save directory Создать или выбрать каталог сохранения Choose exactly one directory Выберите только один каталог Could not read directory: Невозможно прочитать каталог: Unexpected file name collision, cancelling. Неожиданный конфликт имён файлов, отмена действия. Cannot extract document: Невозможно извлечь документ: &Preview &Просмотр &Open О&ткрыть Open With Открыть с помощью Run Script Запустить выполнение сценария Copy &File Path Копировать &путь файла Copy &URL Копировать &URL Copy File Name Копировать &имя файла Copy Text Копировать текст &Write to File &Записать в файл Save selection to files Сохранить выделение в файлы Preview P&arent document/folder &Просмотр родительского документа/каталога &Open Parent document &Открыть родительский документ &Open Parent Folder &Открыть родительский каталог Find &similar documents Найти &похожие документы Open &Snippets window Открыть окно &выдержек Show subdocuments / attachments Показать вложенные документы QxtConfirmationMessage Do not show again. Больше не показывать. RTIToolW Real time indexing automatic start Автозапуск индексирования в реальном времени <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Индексирование при помощи <span style=" font-weight:600;">Recoll</span> может быть настроено как сервис, обновляющий индекс одновременно с изменением файлов, то есть в реальном времени. При этом постоянное обновление индекса будет происходить за счёт непрерывного использования системных ресурсов.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Запускать службу индексирования одновременно с сеансом рабочего стола. Also start indexing daemon right now. Также запустить прямо сейчас службу индексирования. Configuration name Имя конфигурации Short alphanumeric nickname for this config Краткое алфавитно-цифровое имя для этой конфигурации Replacing: Замена: Replacing file Замена файла Could not find Не удалось найти Can't create: Невозможно создать: Warning Предупреждение Could not execute recollindex Не удалось запустить recollindex Deleting: Удаление: Deleting file Удаление файла Removing autostart Отмена автозапуска Autostart file deleted. Kill current process too ? Файл автозапуска удалён. Прервать текущий процесс? RclCompleterModel Hits (количество нажатий) RclMain Indexing in progress: Идёт индексирование: None Нет Updating Обновление Flushing Заполнение Purge Очистка Stemdb Корнебаза Closing Закрытие Done Готово Monitor Монитор Unknown неизвестно documents документы document документ files файлы file файл errors ошибки error ошибка total files) всего файлов) Indexing interrupted Индексирование прервано Indexing failed Не удалось выполнить индексирование with additional message: с дополнительным сообщением: Non-fatal indexing message: Сообщение о некритичной ошибке индексирования: Stop &Indexing О&становить индексирование Index locked Индекс заблокирован Update &Index Обновить &индекс Indexing done Индексация завершена Bad paths Неверные пути Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Пустые или несуществующие пути в файле конфигурации. Нажмите Ok, если всё равно хотите запустить процесс индексирования (отсутствующие данные не будут убраны из файла индекса): Erasing index Стирание индекса Reset the index and start from scratch ? Сбросить индекс и начать заново? Selection patterns need topdir Для шаблонов отбора требуется topdir Selection patterns can only be used with a start directory Шаблоны отбора могут быть использованы только с начальным каталогом Warning Предупреждение Can't update index: indexer running Невозможно обновить индекс: индексатор уже запущен Can't update index: internal error Невозможно обновить индекс: внутренняя ошибка Simple search type Тип простого поиска Any term Любое слово All terms Все слова File name Имя файла Query language Язык запроса Stemming language Язык словоформ (no stemming) (без словоформ) (all languages) (все языки) error retrieving stemming languages ошибка получения списка языков словоформ Can't access file: Невозможно получить доступ к файлу: Index not up to date for this file.<br> Индекс для этого файла не обновлён.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Кстати, похоже, последняя попытка обновления для этого файла также не удалась.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Щёлкните по кнопке Ok, чтобы попытаться обновить индекс для этого файла. По окончании индексирования нужно будет повторить запрос.<br> The indexer is running so things should improve when it's done. Индексация выполняется, по завершении должно стать лучше. The document belongs to an external index which I can't update. Документ относится к внешнему индексу, который невозможно обновить. Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> >Нажмите «Отмена» для возврата к списку. <br>Нажмите «Игнорировать», чтобы открыть просмотр (и запомнить выбор для данного сеанса). Can't create preview window Невозможно создать окно просмотра This search is not active anymore Этот поиск больше не активен This search is not active any more Этот поиск больше не активен Cannot retrieve document info from database Невозможно извлечь сведения о документе из базы No search Результаты поиска отсутствуют No preserved previous search Отсутствуют сохранённые результаты предыдущего поиска Choose file to save Выбор файла для сохранения Saved Queries (*.rclq) Сохраненные запросы (*.rclq) Write failed Не удалось записать Could not write to file Не удалось выполнить запись в файл Read failed Ошибка записи Could not open file: Не удалось открыть файл: Load error Ошибка загрузки Could not load saved query Не удалось загрузить сохранённый запрос Filter directories Фильтровать каталоги Bad desktop app spec for %1: [%2] Please check the desktop file Неверная спецификация для %1: [%2] Проверьте файл .desktop No external viewer configured for mime type [ Не настроена внешняя программа для просмотра MIME-типа [ Bad viewer command line for %1: [%2] Please check the mimeview file Ошибка командной строки программы просмотра %1: [%2] Проверьте файл mimeview The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Программа просмотра, указанная в mimeview для %1: %2, не найдена. Открыть диалог настройки? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported В командной строке программы просмотра %1 указан родительский файл, а в URL — сетевой протокол http[s]: не поддерживается The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Просмотрщик, указанный в mimeview для %1: %2, не найден. Хотите открыть диалоговое окно настроек? Viewer command line for %1 specifies parent file but URL is not file:// : unsupported В командной строке программы просмотра %1 указан родительский файл, а в URL — не file:// : не поддерживается Viewer command line for %1 specifies both file and parent file value: unsupported В командной строке программы просмотра %1 указан как сам файл, так и родительский файл: не поддерживается Cannot find parent document Невозможно найти родительский документ Cannot extract document or create temporary file Невозможно извлечь документ или создать временный файл Can't uncompress file: Невозможно распаковать файл: Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Открывается временная копия. Изменения будут утеряны, если их не сохранить<br/>особо. Do not show this warning next time (use GUI preferences to restore). Больше не показывать (для восстановления используйте настройки интерфейса). Executing: [ Выполняется: [ Unknown indexer state. Can't access webcache file. Неизвестный статус индексатора. Невозможно получить доступ к файлу веб-кэша. Indexer is running. Can't access webcache file. Идёт индексирование. Невозможно получить доступ к файлу веб-кэша. Batch scheduling Планирование The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Инструмент для настройки времени запуска индексации. Использует планировщик задач Windows. Disabled because the real time indexer was not compiled in. Отключено, так как не был вкомпилирован индексатор данных в реальном времени. This configuration tool only works for the main index. Данный инструмент настройки применим только к основному индексу. About Recoll О программе No information: initial indexing not yet performed. Нет данных: первичная индексация ещё не проведена. External applications/commands needed for your file types and not found, as stored by the last indexing pass in Внешние приложения/команды, требуемые для индексирования файлов, не найдены, как указано в результатах последнего индексирования в No helpers found missing Все обработчики доступны Missing helper programs Отсутствующие обработчики Error Ошибка Index query error Ошибка запроса индекса Indexed MIME Types Проиндексированные MIME-типы Content has been indexed for these MIME types: Было проиндексировано содержимое для следующих типов MIME: Types list empty: maybe wait for indexing to progress? Список типов пуст: может, обождать доиндексирования? Duplicates Дубликаты Main Window Главное окно Clear search Очистить поиск Move keyboard focus to search entry Перенести фокус ввода на строку поиска Move keyboard focus to search, alt. Перенести фокус ввода на строку поиска, также Toggle tabular display Переключить табличное отображение Show menu search dialog Показать диалоговое окно поиска Move keyboard focus to table Перенести фокус клавиатуры на таблицу Show advanced search dialog Показать диалог расширенного поиска Tools Инструменты Results Результаты All Всё media медиа message сообщение other прочее presentation презентация spreadsheet таблица text текст sorted сортированное filtered отфильтрованное Document filter Фильтр документов F&ilter Ф&ильтр Main index open error: Ошибка открытия основного индекса: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Индекс может быть повреждён. Попробуйте запустить xapian-check или пересоздать индекс? Could not open external index. Db not open. Check external index list. Не удалось открыть внешний индекс. База не открыта. Проверьте список внешних индексов. Can't set synonyms file (parse error?) Невозможно установить файл синонимов (ошибка разбора?) Query results Результаты запроса Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Идёт обработка запроса.<br>Из-за ограничений библиотеки<br>отмена действия приведёт к закрытию приложения Result count (est.) Кол-во результатов (прим.) No results found Поиск не дал результатов Save file Сохранить файл Sub-documents and attachments Вложенные документы History data Данные истории Document history История документов Confirm Подтвердить Erasing simple and advanced search history lists, please click Ok to confirm Стираю историю простого и сложного поиска, нажмите Ok для подтверждения Could not open/create file Не удалось открыть/создать файл RclMainBase Recoll Recoll Query Language Filters Фильтры языка запросов Filter dates Фильтровать по дате Filter birth dates Фильтровать по дате рождения E&xit В&ыход Ctrl+Q Ctrl+Q Update &index Обновить &индекс Trigger incremental pass Запустить пошаговый проход Start real time indexer Запустить индексацию в фоне &Rebuild index &Пересоздать индекс &Erase document history &Стереть историю документов &Erase search history &Стереть историю поиска E&xport simple search history Э&кспортировать историю простого поиска Missing &helpers Недостающие &обработчики Indexed &MIME types Индексированные &MIME типы &About Recoll &О программе &User manual &Руководство пользователя &User manual (local, one HTML page) &Руководство пользователя (локальное, одна HTML-страница) &Online manual (Recoll Web site) &Онлайн-руководство (веб-сайт Recoll) Document &History История &документов Document History История документов &Advanced Search &Сложный поиск Assisted complex search Сложный поиск с поддержкой &Sort parameters &Параметры сортировки Sort parameters Параметры сортировки Term &explorer Обозреватель &терминов Term explorer tool Инструмент обзора терминов Next page Следующая страница Next page of results Следующая страница результатов PgDown PgDown First page Первая страница Go to first page of results Перейти к первой странице результатов Shift+PgUp Shift+PgUp Previous page Предыдущая страница Previous page of results Предыдущая страница результатов PgUp PgUp &Index configuration Настройка &индекса Path translations Корректировка путей Indexing &schedule &Расписание индексирования &GUI configuration Настройка и&нтерфейса E&xternal index dialog Настройка &внешнего индекса External index dialog Настройка внешнего индекса Enable synonyms Учитывать синонимы &Full Screen Во весь &экран Full Screen Во весь экран F11 F11 Increase results text font size Увеличить размер шрифта результатов Increase Font Size Увеличить размер шрифта Decrease results text font size Уменьшить размер шрифта результатов Decrease Font Size Уменьшить размер шрифта Sort by date, oldest first Сортировать по дате, старые вначале Sort by dates from oldest to newest Сортировать по дате от старым к новым Sort by date, newest first Сортировать по дате, новые вначале Sort by dates from newest to oldest Сортировать по дате от новых к старым Show Query Details Показать сведения о запросе Show as table Показать в виде таблицы Show results in a spreadsheet-like table Показать результаты в виде таблицы Save as CSV (spreadsheet) file Сохранить как CSV-файл Saves the result into a file which you can load in a spreadsheet Сохранить результат в файл, который можно загрузить в электронную таблицу Next Page Следующая страницы Previous Page Предыдущая страница First Page Первая страница Query Fragments Фрагменты запроса With failed files retrying Повторная попытка с неудачными файлами Next update will retry previously failed files При следующем обновлении будут повторно обработаны файлы с ошибками Save last query Сохранить последний запрос Load saved query Загрузить последний запрос Special Indexing Специальное индексирование Indexing with special options Индексирование с особыми параметрами Switch Configuration... Переключить конфигурацию... Choose another configuration to run on, replacing this process Выберите другую конфигурацию для запуска, заменяя этот процесс. Index &statistics &Статистика индекса Webcache Editor Редактор веб-кэша &File &Файл &View &Вид &Tools &Инструменты &Preferences &Настройки &Help &Справка &Results &Результаты &Query &Запрос RclTrayIcon Restore Восстановить Quit Выйти RecollModel Abstract Содержимое Author Автор Document size Размер документа Document date Дата документа File size Размер файла File name Имя файла File date Дата файла Ipath I-путь Keywords Ключевые слова MIME type MIME-типы Original character set Исходная кодировка Relevancy rating Соответствие Title Заголовок URL URL Date Дата Date and time Дата и время Can't sort by inverse relevance Нельзя отсортировать в обратном соответствии ResList <p><b>No results found</b><br> <p><b>Поиск не дал результатов</b><br> Documents Документы out of at least из по меньшей мере for для Previous Предыдущий Next Следующий Unavailable document Документ недоступен Preview Просмотр Open Открыть Snippets Выдержки (show query) (показать запрос) <p><i>Alternate spellings (accents suppressed): </i> <p><i>Варианты написания (без диакритических знаков): </i> <p><i>Alternate spellings: </i> <p><i>Варианты написания: </i> This spelling guess was added to the search: Это совпадение произношения было добавлено в поиск: These spelling guesses were added to the search: Эти совпадения произношений были добавлены в поиск: Document history История Result list Список результатов Result count (est.) Кол-во результатов (прим.) Query details Подробности запроса ResTable Use Shift+click to display the text instead. Использовать Shift+щелчок мыши, чтобы показать текст. Result Table Таблица результатов Open current result document Открыть документ с текущими результатами Open current result and quit Открыть текущие результаты и выйти Preview Просмотр Show snippets Показать выдержки Show header Показать заголовок Show vertical header Показать вертикальный заголовок Copy current result text to clipboard Сохранить текст текущих результатов в буфер обмена Copy result text and quit Скопировать текст результатов и выйти Save table to CSV file Сохранить таблицу в CSV-файл Can't open/create file: Невозможно открыть/создать файл: %1 bytes copied to clipboard %1 байт скопировано в буфер обмена &Reset sort &Сбросить сортировку &Save as CSV &Сохранить как CSV &Delete column &Удалить столбец Add "%1" column Добавить столбец "%1" SSearch Any term Любое слово All terms Все слова File name Имя файла Query language Язык запроса Simple search Простой поиск History История <html><head><style> table, th, td { border: 1px solid black; border-collapse: collapse; } th,td { text-align: center; </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Шпаргалка по языку запросов. Неясно - щёлкните <b>Показать запрос</b>.&nbsp; You should really look at the manual (F1)</p> И впрямь стоит заглянуть в справку (F1)</p> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>What</th><th>Примеры</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>И</td><td>раз два&nbsp;&nbsp;&nbsp;раз AND два&nbsp;&nbsp;&nbsp;раз && два</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Или</td><td>раз OR два&nbsp;&nbsp;&nbsp;раз || два</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Сложное булево. OR в приоритете, используйте скобки&nbsp; where needed</td><td>(one AND two) OR three</td></tr> при надобности</td><td>(раз AND два) OR три</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Не</td><td>-слово</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Фраза</td><td>"гордыня и предубеждение"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Упорядоченная близость (допуск=1)</td><td>"гордыня предубеждение"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Неупорядоченная близость (допуск=1)</td><td>"предубеждение гордыня"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Неупор. близ. (штат.допуск=10)</td><td>"предубеждение&nbsp;гордыня"p</td></tr> <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; <p>Шпаргалка по языку запросов. Неясно — щёлкните <b>Показать сведения о запросе</b>.&nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Заглавные буквы для подавления словоформ</td><td>Слово</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>По полям</td><td>author:остен&nbsp;&nbsp;title:предубеждение</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND внутри поля (как угодно)</td><td>author:джейн,остен</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>OR внутри поля</td><td>author:остен/бронте</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Имена полей</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Фильтр путей</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Фильтр MIME-типов</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Промежуток времени</td><td>date:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Размер</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> Enter file name wildcard expression. Укажите маску имени файла. Enter search terms here. Укажите искомые слова. Bad query string Неверное значение запроса. Out of memory Память исчерпана Can't open index Не могу открыть индекс Stemming languages for stored query: Языки словоформ для сохранённого запроса: differ from current preferences (kept) отличаются от текущих параметров (сохранено) Auto suffixes for stored query: Автоматически подставляемые суффиксы для сохранённого запроса: Could not restore external indexes for stored query:<br> Не удалось восстановить внешние индексы для значений отбора:<br> ??? ??? Using current preferences. Используются текущие настройки. Autophrase is set but it was unset for stored query Автофраза задана, но для сохранённого запроса сброшена Autophrase is unset but it was set for stored query Автофраза не задана, но для сохранённого запроса задана SSearchBase SSearchBase SSearchBase Erase search entry Стереть содержимое поиска Clear Очистить Start query Начать запрос Search Поиск Choose search type. Выбрать тип поиска. Show query history Показать историю запросов Main menu Главное меню SearchClauseW Any Любые All Все None Нет Phrase Фраза Proximity Близость File name Имя файла No field Поле отсутствует Select the type of query that will be performed with the words Выберите, какой тип запроса по словам будет произведён Number of additional words that may be interspersed with the chosen ones Количество возможных других слов между выбранными Snippets Snippets Выдержки Find: Найти: Next След. Prev Пред. SnippetsW Search Поиск Snippets Window Выдержки Find Найти Find (alt) Найти (также) Find next Найти след. Find previous Найти пред. Close window Закрыть окно поиска Increase font size Увеличить размер шрифта Decrease font size Уменьшить размер шрифта Sort By Relevance Сортировать по соответствию Sort By Page Сортировать по странице <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>К сожалению, точные совпадения с заданными параметрами не найдены. Возможно, документ слишком большой и выдерживалка не выдержала...</p> SpecIdxW Special Indexing Специальное индексирование Retry previously failed files. Обработать файлы с ошибками повторно. Else only modified or failed files will be processed. Или будут обрабатываться только изменённые файлы или файлы с ошибками. Erase selected files data before indexing. Стирать сведения по выбранным файлам перед индексированием. Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Каталог для рекурсивного индексирования. Должен находиться внутри обычной индексируемой области,<br> как указано в файле настройки (topdirs). Browse Обзор Start directory. Must be part of the indexed tree. Use full indexed area if empty. Начальный каталог. Должен быть частью индексируемого дерева каталогов. Использовать весь индекс, если каталог пуст. Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Оставьте поле пустым для выбора всех файлов. Можно использовать несколько шаблонов через пробел.<br>Шаблоны, включающие в себя пробел, должны быть взяты в двойные кавычки.<br>Можно использовать только если задан начальный каталог. Selection patterns: Шаблоны отбора: Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Файл с выводом диагностических сообщений. Будет пересоздан с дальнейшей записью диагностики индексирования (причин пропуска файлов). Top indexed entity Верхняя индексируемая сущность Diagnostics file Файл журнала SpellBase Term Explorer Обозреватель терминов Match Учитывать Case регистр Accents диакритические знаки &Expand &Однокоренные слова Alt+E Alt+E &Close &Закрыть Alt+C Alt+C No db info. Нет информации о базе. SpellW Wildcards маски Regexp Регулярные выражения Stem expansion Однокоренные слова Spelling/Phonetic Написание/произношение Show index statistics Показать статистику индекса List files which could not be indexed (slow) Показать непроиндексировавшиеся файлы (небыстро) error retrieving stemming languages ошибка получения списка языков словоформ Index: %1 documents, average length %2 terms.%3 results Индекс: %1 документ(ов), средняя длина %2 слов(о). %3 результат(ов) Spell expansion error. Ошибка поиска однокоренных слов. Spell expansion error. Ошибка поиска однокоренных слов. %1 results %1 результат(ов) No expansion found Однокоренных слов не найдено List was truncated alphabetically, some frequent Список сокращён по алфавиту, некоторые часто повторяющиеся terms may be missing. Try using a longer root. слова могут отсутствовать. Попробуйте более длинный корень. Number of documents Число документов Average terms per document Слов на документ (в среднем) Smallest document length (terms) Наименьшая длина документа (слов) Longest document length (terms) Наибольшая длина документа (слов) Results from last indexing: Результаты последнего индексирования: Documents created/updated Создано/обновлено документов Files tested Проверено файлов Unindexed files Непроиндексированных файлов Database directory size Размер каталога базы данных MIME types: Типы MIME: Item Элемент Value Значение Term Термин Doc. / Tot. Док. / Всего UIPrefsDialog Any term Любой All terms Все File name Имя файла Query language Язык запросов Value from previous program exit Значение из предыдущего запуска программы Light Светлая Dark Тёмная System Системная Choose Выбрать error retrieving stemming languages ошибка получения списка языков словоформ Context Контекст Description Описание Shortcut Сочетание клавиш Default По умолчанию Default QtWebkit font Шрифт QtWebkit по умолчанию Result list paragraph format (erase all to reset to default) Формат абзаца в списке результатов (очистите для сброса к умолчанию) Result list header (default is empty) Заголовок списка результатов (по умолчанию пуст) Choose QSS File Выбрать файл QSS At most one index should be selected Следует выбрать не больше одного индекса Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Выберите каталог настроек recoll или каталог индекса xapian (например: /home/me/.recoll или /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Выбранный каталог выглядит как каталог с настройками Recoll, но настройки не выходит прочитать The selected directory does not appear to be a Xapian index Выбранный каталог непохож на индекс Xapian Can't add index with different case/diacritics stripping option. Невозможно добавить индекс с другими настройками учёта регистра и диакритических знаков. Cant add index with different case/diacritics stripping option Невозможно добавить индекс с другими настройками учёта регистра и диакритических знаков This is the main/local index! Этот индекс является главным/локальным! The selected directory is already in the index list Этот каталог уже указан в списке индексов ViewAction Desktop Default Взять из окружения MIME type Тип MIME Command Команда Changing entries with different current values Изменение записей с различными текущими значениями ViewActionBase Native Viewers Встроенные просмотрщики Select one or several mime types then use the controls in the bottom frame to change how they are processed. Выберите MIME-типы и используйте кнопки в рамке ниже, чтобы изменить характер их обработки. Use Desktop preferences by default Использовать настройки окружения по умолчанию Select one or several file types, then use the controls in the frame below to change how they are processed Выберите типы файлов и используйте кнопки, расположенные в рамке ниже, чтобы изменить характер их обработки Recoll action: Действие Recoll: current value текущее значение Select same Выделить такие же <b>New Values:</b> <b>Новые значение:</b> Exception to Desktop preferences Исключения из настроек окружения Action (empty -> recoll default) Действие (пусто -> по умолчанию) The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Значение представляет собой командную строку для выполнения. Замены: %s: строка поиска; %p: номер страницы; <br>%f: имя файла документа. F1 для получения дополнительной помощи. Apply to current selection Применить к выделению Close Закрыть Webcache Webcache editor Редактор веб-кэша TextLabel Текстовая подпись Search regexp Поиск по регулярному выражению WebcacheEdit Maximum size %1 (Index config.). Current size %2. Write position %3. Предельный размер %1 (конф. индекса). Текущий размер %2. Позиция записи %3. Copy URL Копировать URL Save to File Сохранить в файл Unknown indexer state. Can't edit webcache file. Неизвестный статус индексатора. Невозможно редактировать файл веб-кэша. Indexer is running. Can't edit webcache file. Индексатор запущен. Нельзя редактировать файл веб-кэша. Delete selection Удалить выделенные File creation failed: Создание файла не удалось: Webcache was modified, you will need to run the indexer after closing this window. Содержимое веб-кэша былыо изменено, после закрытия этого окна необходимо запустить индексирование. WebcacheModel MIME MIME Date Дата Size Размер URL URL Url Ссылка WinSchedToolW Recoll Batch indexing Пакетное индексирование Recoll Start Windows Task Scheduler tool Запустить планировщик задач Windows Error Ошибка Configuration not initialized Конфигурация не инициализирована Could not create batch file Не удалось создать пакетный файл <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Планирование пакетного индексирования Recoll</h3><p>Для этого используется стандартный планировщик задач Windows. Программа будет запущена после нажатия расположенной ниже кнопки.</p><p>Можно использовать либо полный интерфейс (<i>Создать задачу</i> в меню справа), либо упрощённый мастер <i>Создать простую задачу</i>. В обоих случаях следует Копировать/Вставить приведённый ниже путь к пакетному файлу как <i>Действие</i> для выполнения.</p> Command already started Команда уже запущена confgui::ConfParamFNW Choose Выбрать confgui::ConfParamSLW + + Add entry Добавить запись - - Delete selected entries Удалить выделенные записи ~ ~ Edit selected entries Изменить выделенные записи confgui::ConfTabsW Apply Применить uiPrefsDialogBase Recoll - User Preferences Recoll — настройки пользователя User interface Интерфейс пользователя Choose editor applications Выбор приложений-редакторов Start with simple search mode: Начать с режима простого поиска: Limit the size of the search history. Use 0 to disable, -1 for unlimited. Ограничения размера истории поиска. 0: отключить, -1: без ограничений. Maximum size of search history (0: disable, -1: unlimited): Предельный размер истории поиска (0: отключить, -1: без ограничений): Start with advanced search dialog open. Открывать диалог сложного поиска при запуске. Remember sort activation state. Запомнить порядок сортировки результатов. Depth of side filter directory tree Глубина бокового дерева каталогов See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. См. документацию Qt QDateTimeEdit. Например, yyyy-MM-dd. Оставьте пустым, чтобы использовать формат по умолчанию Qt/System. Side filter dates format (change needs restart) Формат даты для бокового фильтра (изменение требует перезапуска) Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Стиль отображения фильтров: в виде селекторов, поля со списком на панели инструментов или меню. Document filter choice style: Стиль отображения фильтров: Buttons Panel Панель кнопок Toolbar Combobox Поле со списком Menu Меню Hide some user interface elements. Скрыть некоторые элементы интерфейса Hide: Скрыть: Toolbars Поля со списками Status bar Панель состояния Show button instead. Показывать кнопки. Menu bar Панель меню Show choice in menu only. Отображать выбор только в меню. Simple search type Тип простого поиска Clear/Search buttons Кнопки Очистить/Поиск Show system tray icon. Отображать значок в трее Close to tray instead of exiting. Сворачивать окно вместо закрытия. Generate desktop notifications. Отображать уведомления. Suppress all beeps. Отключить звук. Show warning when opening temporary file. Отображать предупреждение при открытии временного файла. Disable Qt autocompletion in search entry. Отключить автодополнение Qt в строке поиска. Start search on completer popup activation. Начинать поиск при активации всплывающего окна автодополнения. Maximum number of history entries in completer list Предельное число записей журнала в списке автодополнения Number of history entries in completer: Число записей журнала в автодополнении: Displays the total number of occurences of the term in the index Показывает общее количество вхождений термина в индексе Show hit counts in completer popup. Показывать счётчик нажатий во всплывающем окне автодополнения. Texts over this size will not be highlighted in preview (too slow). Текст большего размера не будет подсвечен при просмотре (слишком медленно). Maximum text size highlighted for preview (kilobytes) Предельный размер текста, выбранного для просмотра (в килобайтах) Prefer Html to plain text for preview. Предпочитать для просмотра HTML простому тексту. Prefer HTML to plain text for preview. Предпочитать для просмотра HTML простому тексту. Make links inside the preview window clickable, and start an external browser when they are clicked. Сделать ссылки внутри окна просмотра активными и запускать браузер при щелчке по ссылке. Activate links in preview. Активировать ссылки в режиме просмотра. Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Строки в тексте PRE нескладные. При использовании BR теряются некоторые отступы. Возможно, PRE + Wrap подойдёт больше. Plain text to HTML line style Стиль отображения строк HTML в простом тексте <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + wrap Highlight CSS style for query terms CSS-стиль подсветки слов запроса Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Подсветка терминов в результатах запроса. <br>Можно попробовать что-то более выделяющееся вроде "color:red;background:yellow" вместо цвета по умолчанию... Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Коэффициент масштабирования интерфейса. Полезно, если не устраивает значение по умолчанию. Display scale (default 1.0): Размер отображения (по умолчанию 1.0): Application Qt style sheet Внешний вид приложения Resets the style sheet to default Сбросить на вид по умолчению None (default) Нет (по умолчанию) Uses the default dark mode style sheet Использовать тёмную тему по умолчанию Dark mode Тёмная тема Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Откроется диалоговое окно для выбора файла стиля оформления.<br> Для примера откройте /usr/share/recoll/examples/recoll[-dark].qss Choose QSS File Выбрать файл QSS Shortcuts Сочетания клавиш Use F1 to access the manual Для вызова справки нажмите F1 Reset shortcuts defaults Сбросить настройки сочетаний клавиш Result List Список результатов If set, starting a new instance on the same index will raise an existing one. Если установлено, запуск нового экземпляра на том же индексе вызовет существующий. Single application Одно приложение Set to 0 to disable and speed up startup by avoiding tree computation. Установите значение 0, чтобы отключить и ускорить запуск, избегая вычисления дерева. The completion only changes the entry when activated. Завершение изменяет запись только при активации. Completion: no automatic line editing. Завершение: нет автоматического редактирования строки. Color scheme Цветовая схема Interface language (needs restart): Язык интерфейса (требуется перезагрузка): Note: most translations are incomplete. Leave empty to use the system environment. Примечание: большинство переводов неполные. Оставьте пустым, чтобы использовать системную среду. Number of entries in a result page Число записей в списке результатов Result list font Шрифт списка результатов Opens a dialog to select the result list font Открыть диалоговое окно выбора шрифта списка результатов Helvetica-10 Helvetica-10 Resets the result list font to the system default Сбросить шрифт списка результатов на системный Reset Сброс Edit result paragraph format string Редактировать строку форматирования параграфа результатов Edit result page html header insert Редактировать вставку html-заголовка страницы результатов Date format (strftime(3)) Формат даты (strftime(3)) Abstract snippet separator Условный разделитель выдержек User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Пользовательский стиль оформления для окна просмотра выдержек.<br> На заметку: вставка заголовка страницы результатов также включена в заголовок окна выдержек. Snippets window CSS file Файл оформления CSS окна просмотра выдержек Opens a dialog to select the Snippets window CSS style sheet file Откроется окно выбора файла оформления CSS окна просмотра выдержек Choose Выбрать Resets the Snippets window style Сбросить стиль оформления окна просмотра выдержек Maximum number of snippets displayed in the snippets window Предельное число выдержек, показываемых в окне просмотра Sort snippets by page number (default: by weight). Сортировать по номеру страницы (по умолчанию: по объёму) Display a Snippets link even if the document has no pages (needs restart). Показать ссылку на выдержки, даже если в документе нет страниц (нужен перезапуск). Result Table Таблица результатов Hide result table header. Скрывать шапку таблицы результатов Show result table row headers. Показывать шапки рядов таблицы результатов Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Отключить сочетания клавиш Ctrl+[0-9]/Shift+[a-z] для перехода по рядам таблицы. To display document text instead of metadata in result table detail area, use: Для отображения в таблице результатов текста документа вместо метаданных используйте: left mouse click Щелчок левой кнопкой мыши Shift+click Shift+щелчок Do not display metadata when hovering over rows. Не показывать метаданные при наведении курсора на строки. Preview Просмотр When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. При отображении HTML в тёмном режиме старайтесь использовать тёмный фон (и светлый цвет текста).<br>Это противоречит многим документам, которые переопределят нашу светлую настройку своим собственным CSS (тёмным) цветом текста, что сделает документ нечитаемым, поэтому по умолчанию эта функция отключена. Use dark background when displaying HTML in dark mode. Используйте тёмный фон при отображении HTML в тёмном режиме. Set to 0 to disable details/summary feature Установите значение 0, чтобы отключить функцию деталей/сводки. Fields display: max field length before using summary: Отображение полей: максимальная длина поля перед использованием резюме: Number of lines to be shown over a search term found by preview search. Количество строк, которые будут показаны над найденным поисковым запросом в предварительном просмотре. Search term line offset: Смещение строки поискового запроса: Search parameters Параметры поиска If checked, results with the same content under different names will only be shown once. Показывать результаты с тем же содержанием под разными именами не более одного раза Hide duplicate results. Скрывать дубликаты. Stemming language Язык словоформ A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Поиск [rolling stones] (два слова) будет изменён на [rolling OR stones OR (rolling phrase 2 stones)]. Automatically add phrase to simple searches Автоматически добавлять фразу при простом поиске Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Порог частоты в процентах, выше которого слова в автофразе не используются. Часто появляющиеся слова представляют основную проблему обработки фраз. Пропуск слов ослабляет фразу и уменьшает эффективность функции автофразы. Значение по умолчанию: 2 (процента). Autophrase term frequency threshold percentage Процент порогового значения частоты автофраз Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Создавать описания для результатов поиска с использованием контекста слов запроса? Процесс может оказаться медленным для больших документов. Dynamically build abstracts Составлять описания на лету Do we synthetize an abstract even if the document seemed to have one? Создавать описание, даже когда оно вроде есть для данного документа? Replace abstracts from documents Заменять описания из документов Synthetic abstract size (characters) Размер создаваемого описания (символов) Synthetic abstract context words Число слов контекста в описании The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Список слов, которые будут автоматически преобразованы в расширение файла вида ext:xxx в запросе. Query language magic file name suffixes. Распознавание типа файлов при помощи файла сигнатур (magic file). Enable Включить Add common spelling approximations for rare terms. Добавлять наиболее подходящие варианты написания для редко встречающихся терминов. Automatic spelling approximation. Автоподбор написания. Max spelling distance Предельное расстояние между написаниями Synonyms file Файл с синонимами Wild card characters *?[] will processed as punctuation instead of being expanded Символы подстановки *?[] будут обработаны как знаки препинания, а не как расширенные символы. Ignore wild card characters in ALL terms and ANY terms modes Игнорировать символы подстановки в режимах ВСЕ термины и ЛЮБЫЕ термины. External Indexes Индексы однокоренных слов Toggle selected Переключить выделенные Activate All Включить всё Deactivate All Выключить всё Set path translations for the selected index or for the main one if no selection exists. Задать корректировку путей для выбранного или главного индекса, если ничего не выбрано. Paths translations Корректировка путей Remove from list. This has no effect on the disk index. Удалить из списка. Индекс на диске без изменений. Remove selected Удалить выделенное Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Щёлкните, чтобы добавить другой каталог индекса в список. Можно выбрать каталог конфигурации Recoll или индекс Xapian. Add index Добавить индекс Misc Разное The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Ошибка, приводящая к отображению странных символов в подсвеченных словах на тамильском. Обход заключается в том, чтобы вставить дополнительный символ пробела. Work around Tamil QTBUG-78923 by inserting space before anchor text Обходить ошибку QTBUG-78923 в записях на тамильском, вставляя пробел перед якорным текстом. Apply changes Принять изменения &OK &ОК Discard changes Отменить изменения &Cancel Отменить recoll-1.43.12/qtgui/i18n/recoll_da.ts0000644000175000017500000074132515124431112016656 0ustar dockesdockes ActSearchDLG Menu search Menu søgning AdvSearch All clauses Alle sætninger Any clause Vilkårlig sætning texts tekster spreadsheets regneark presentations præsentationer media medier messages beskeder other andet Bad multiplier suffix in size filter Forkert multiplikator suffiks i størrelsefilter text tekst spreadsheet regneark presentation præsentation message besked Advanced Search Avanceret søgning History Next Næste Historik History Prev Historik Forrige Load next stored search Indlæs næste gemte søgning Load previous stored search Indlæs tidligere gemt søgning AdvSearchBase Advanced search Avanceret søgning Restrict file types Begræns filtyper Save as default Gem som standard Searched file types Søgte filtyper All ----> Alle ----> Sel -----> Valg -----> <----- Sel <----- Valg <----- All <----- Alle Ignored file types Ignorerede filtyper Enter top directory for search Indtast øverste mappe for søgning Browse Gennemse Restrict results to files in subtree: Begræns resultater til filer i undermapper: Start Search Start søgning Search for <br>documents<br>satisfying: Søg efter <br>dokumenter<br>der opfylder: Delete clause Slet sætning Add clause Tilføj sætning Check this to enable filtering on file types Afkryds dette for at aktivere filtrering på filtyper By categories Efter kategorier Check this to use file categories instead of raw mime types Afkryds dette for at bruge filkategorier i stedet for rå mime-typer Close Luk All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Alle felter med indhold til højre vil blive kombineret med AND ("Alle sætninger" valgt) eller OR ("Vilkårlig sætning" valgt) bindeord. <br>"Enhver" "Alle" og "Ingen" felttyper kan acceptere en blanding af simple ord, og fraser i dobbelte anførselstegn.<br>Felter uden data ignoreres. Invert Inverter Minimum size. You can use k/K,m/M,g/G as multipliers Mindste størrelse. Du kan bruge k/K,m/M,g/G som multiplikatorer Min. Size Min. størrelse Maximum size. You can use k/K,m/M,g/G as multipliers Maksimal størrelse. Du kan bruge k/K,m/M g/G som multiplikatorer Max. Size Maks. størrelse Select Vælg Filter Filtrer From Fra To Til Check this to enable filtering on dates Afkryds dette for at aktivere filtrering på datoer Filter dates Filtrer datoer Find Find Check this to enable filtering on sizes Afkryds dette for at aktivere filtrering på størrelser Filter sizes Filtrer størrelser Filter birth dates Filtrer fødselsdatoer ConfIndexW Can't write configuration file Kan ikke skrive konfigurationsfil Global parameters Globale parametre Local parameters Lokale parametre Search parameters Søgeparametre Top directories Øverste mapper The list of directories where recursive indexing starts. Default: your home. Listen over mapper hvor rekursiv indeksering starter. Standard: din hjemme-mappe (home). Skipped paths Udeladte stier These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Disse er stinavne på mapper som indeksering ikke vil komme ind.<br>Sti elementer kan indeholde jokerkort. Indgangene skal matche stierne set af indekseringen (f.eks. hvis topdirs omfatter '/home/me' og '/home' er faktisk et link til '/usr/home', en korrekt sprunget ind i stien ville være '/home/me/tmp*', ikke '/usr/home/me/tmp*') Stemming languages Ordstammer for sprogene The languages for which stemming expansion<br>dictionaries will be built. De sprog, hvor ordstamme-udvidelses<br>ordbøger vil blive bygget. Log file name Navn på logfil The file where the messages will be written.<br>Use 'stderr' for terminal output Filen hvor meddelelser vil blive skrevet.<br>Brug 'stderr' for terminal output Log verbosity level Log informationsniveau This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Denne værdi justerer mængden af meddelelser,<br>fra kun fejl til en masse fejlretningsdata. Index flush megabytes interval Megabyte interval for skrivning af Index This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Denne værdi justere mængden af data, der er indekseret mellem skrivning til disken.<br>Dette hjælper med at kontrollere indekseringsprogrammets brug af hukommelse. Standard 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Dette er procentdelen af diskforbrug - samlet diskforbrug, ikke indeksstørrelse - hvor indeksering vil mislykkes og stoppe.<br>Standardværdien på 0 fjerner enhver grænse. No aspell usage Brug ikke aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Deaktiver brug af aspell til at generere stavnings-tilnærmelse i værktøj for søgning efter ord. <br> Nyttigt hvis aspell er fraværende eller ikke virker. Aspell language Aspell sprog The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Sproget for aspell ordbog. Det skal se ud som "en" eller "fr" ...<br>Hvis denne værdi ikke er angivet, så vil NLS omgivelser blive brugt til at finde det, det fungerer normalt. For at få en idé om, hvad der er installeret på dit system, kan du skrive 'aspell konfig "og se efter .dat filer inde i 'data-dir' mappen. Database directory name Databasens mappenavn The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Navnet på en mappe hvor du vil gemme indekset<br>En relativ sti er taget i forhold til konfigurationsmappen. Standard er "xapiandb. Unac exceptions Unac-undtagelser <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Disse er undtagelser fra unac mekanismen, der, som standard, fjerner alle diakritiske tegn, og udfører kanonisk nedbrydning. Du kan tilsidesætte fjernelse af accent for nogle tegn, afhængigt af dit sprog, og angive yderligere nedbrydninger, f.eks. for ligaturer. I hver indgang adskilt af mellemrum, er det første tegn kildedelen, og resten er oversættelsen. Process the WEB history queue Behandl køen for WEB-historik Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Aktiverer indeksering af sider besøgt af Firefox.<br>(Du skal også installere Firefox Recoll plugin) Web page store directory name Mappenavn for lageret til Websider The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Navnet på en mappe hvor du vil gemme kopier af besøgte websider.<br>En relativ sti er taget i forhold til konfigurationsmappen. Max. size for the web store (MB) Max. størrelse til web-lager (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Indgangene vil blive genbrugt, når størrelsen er nået.<br>Kun en øgning af størrelsen giver god mening, da en reducering af værdien ikke vil afkorte en eksisterende fil (kun spildplads i slutningen). Automatic diacritics sensitivity Automatisk følsomhed over for diakritiske tegn <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Udløser automatisk følsomhed over for diakritiske tegn, hvis søgeordet har accent tegn (ikke i unac_except_trans). Ellers er du nød til bruge forespørgselssproget og <i>D</i> modifikatoren, for at angive følsomhed over for diakritiske tegn. Automatic character case sensitivity Automatisk følsomhed over for store/små bogstaver <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Udløser automatisk følsomhed over for store/små bogstaver, hvis indgangen har store bogstaver i andet end den første position. Ellers er du nød til bruge forespørgselssproget og <i>C</i> modifikatoren, for at angive følsomhed over for store/små bogstaver. Maximum term expansion count Maksimale antal ordudvidelser <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maksimal antal udvidelser-for et enkelt ord (fx: når der bruges jokertegn). Standarden på 10 000 er rimeligt og vil undgå forespørgsler, der synes at fryse mens motoren arbejder sig igennem ordlisten. Maximum Xapian clauses count Maksimale antal Xapiansætninger <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maksimalt antal grundlæggende sætninger vi føjer til en enkel Xapian forespørgsel. I nogle tilfælde kan resultatet af ordudvidelse være multiplikativ, og vi ønsker at undgå at bruge overdreven hukommelse. Standarden på 100 000 bør være både høj nok i de fleste tilfælde og kompatibel med de nuværende typiske hardware konfigurationer. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... De sprog, for hvilke der vil blive bygget ekspansionsordbøger.<br>Se dokumentationen for Xapian stemmer for mulige værdier. F.eks. engelsk, fransk, tysk... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Sproget for aspell ordbog. Værdierne er 2-bogstavs sprogkoder, fx 'da', 'fr' . .<br>Hvis denne værdi ikke er angivet, vil NLS- miljøet blive brugt til at beregne den, som normalt virker. For at få en idé om, hvad der er installeret på dit system, skriv 'aspell config' og kig efter . på filer inde i 'data-dir' mappe. Indexer log file name Indekserings logfilnavn If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Hvis tom, vil ovenstående log filnavn værdi blive brugt. Det kan være nyttigt at have en separat log til diagnostiske formål, fordi den fælles log vil blive slettet, når<br>GUI starter. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Disk fuld tærskel procentdel, hvor vi stopper indeksering<br>F.eks. 90% at stoppe ved 90% fuld, 0 eller 100 betyder ingen grænse) Web history Webhistorik Process the Web history queue Behandle webhistorik-køen (by default, aspell suggests mispellings when a query has no results). Som standard foreslår aspell stavefejl, når en søgning ikke giver resultater. Page recycle interval Side genbrugsinterval <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Som standard gemmes kun én instans af en URL i cachen. Dette kan ændres ved at indstille dette til en værdi, der bestemmer, hvor ofte vi beholder flere instanser ('dag', 'uge', 'måned', 'år'). Bemærk, at øge intervallet ikke vil slette eksisterende poster. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Bemærk: Gamle sider vil blive slettet for at give plads til nye, når den maksimale størrelse er nået. Aktuel størrelse: %1 Start folders Start mapper The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Listen over mapper/kataloger, der skal indekseres. Undermapper vil blive behandlet rekursivt. Standard: dit hjem. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Disk fuld tærskelprocent, hvor vi stopper med at indeksere<br>(F.eks. 90 for at stoppe ved 90% fuld, 0 eller 100 betyder ingen begrænsning) Browser add-on download folder Browser-tilføjelsesprogram download-mappe Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Sæt kun dette, hvis du har sat parameteren "Downloads undermappe" i webbrowser-tilføjelsesindstillingerne. <br>I dette tilfælde skal det være den fulde sti til mappen (f.eks. /home/[mig]/Downloads/min-undermappe) Store some GUI parameters locally to the index Gem nogle GUI-parametre lokalt til indekset. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index <p>GUI-indstillinger gemmes normalt i en global fil, der er gyldig for alle indekser. Indstilling af denne parameter vil gøre nogle indstillinger, såsom resultat tabelopsætning, specifikke for indekset. Suspend the real time indexer when running on battery Suspender den realtidsindekser, når du kører på batteri. The indexer will wait for a return on AC and reexec itself when it happens Indekseren vil vente på en tilbagevenden på AC og genudføre sig selv, når det sker. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Listen over mapper/kataloger, der skal indekseres, rekursivt med deres undermapper.<br>Tegnet '~' udvides til din hjemmemappe, som er standardværdien. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Kun mime-typer An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive En eksklusiv liste over indekserede MIME-typer.<br>Intet andet vil blive indekseret. Normalt tom og inaktiv Exclude mime types Udeluk mime-typer Mime types not to be indexed Mime-typer der ikke skal indekseres Max. compressed file size (KB) Maks. komprimeret filstørrelse (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Denne værdi angiver en grænse for, hvornår komprimerede filer ikke vil blive behandlet. Indstil til -1 for ingen grænse, til 0 for ingen dekomprimering nogensinde. Max. text file size (MB) Maks. størrelse på tekstfil (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Denne værdi angiver en grænse for, hvornår tekstfiler ikke vil blive behandlet. Indstil til -1 for ingen grænse. Dette er for at udelukke monster logfiler fra indekset. Text file page size (KB) Sidestørrelse på tekstfil (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Hvis denne værdi er angivet (ikke lig med -1), vil tekstfiler opdeles i bidder af denne størrelse for indeksering. Dette vil hjælpe søgning i meget store tekstfiler (dvs.: log-filer). Max. filter exec. time (s) Maks. filter eksekveringstid (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Eksterne filtre der arbejder længere end dette vil blive afbrudt. Dette er for det sjældne tilfælde (dvs.: postscript) hvor et dokument kan forårsage, at et filter laver et loop. Indstil til -1 for ingen grænse. Global Globalt ConfigSwitchDLG Switch to other configuration Skift til en anden konfiguration ConfigSwitchW Choose other Vælg en anden Choose configuration directory Vælg konfigurationsmappe CronToolW Cron Dialog Cron vindue <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indekseringstidsplan (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hvert felt kan indeholde et jokertegn (*), en enkelt numerisk værdi, kommaseparerede lister (1,3,5) og intervaller (1-7). Mere generelt vil felterne blive brugt <span style=" font-style:italic;"> som de er</span> inde i crontabfilen, og den fulde crontab syntaks kan bruges, se crontab (5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For eksempel, indtastning af <span style=" font-family:'Courier New,courier';">*</span> i <span style=" font-style:italic;">Dage, </span><span style=" font-family:'Courier New,courier';">12,19</span> i <span style=" font-style:italic;">Timer</span> og <span style=" font-family:'Courier New,courier';">15</span> i <span style=" font-style:italic;">Minutter</span> ville starte recollindex hver dag kl. 00:15 og 19:15 </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">En tidsplan med meget hyppige aktiveringer er formentlig mindre effektiv end realtid indeksering.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Ugens dage (* eller 0-7, 0 eller 7 er Søndag) Hours (* or 0-23) Timer (* eller 0-23) Minutes (0-59) Minutter (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Deaktiver</span> for at stoppe automatisk batch indeksering, <span style=" font-style:italic;">Aktiver</span> for at aktivere den, <span style=" font-style:italic;">Annuller</span> for ikke at ændre noget.</p></body></html> Enable Aktiver Disable Deaktiver It seems that manually edited entries exist for recollindex, cannot edit crontab Det ser ud til, at manuelt redigerede indgange findes for recollindeks, kan ikke redigere crontab Error installing cron entry. Bad syntax in fields ? Fejl ved installation af cron-indgange. Forkert syntaks i felter? EditDialog Dialog Vindue EditTrans Source path Kildesti Local path Lokal sti Config error Konfigureringsfejl Original path Original sti Path in index Sti i indekset Translated path Oversat sti EditTransBase Path Translations Oversættelse af stier Setting path translations for Indstilling af oversættelser af stier for Select one or several file types, then use the controls in the frame below to change how they are processed Vælg en eller flere filtyper, brug derefter knapperne i rammen nedenfor for at ændre, hvordan de skal behandles Add Tilføj Delete Slet Cancel Annuller Save Gem FirstIdxDialog First indexing setup Opsætning af første indeksering <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Det fremgår, at indekset for denne konfiguration ikke eksisterer.</span><br /><br />Hvis du blot ønsker at indeksere din hjemmemappe med et sæt fornuftige standardindstillinger, skal du trykke på <span style=" font-style:italic;">Start indeksering nu</span> knappen. Du vil være i stand til at justere detaljerne senere. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hvis du ønsker mere kontrol, kan du bruge følgende link til at justere indekseringskonfiguration og tidsplan.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Disse værktøjer kan tilgås senere fra <span style=" font-style:italic;">Præference</span> menuen.</p></body></html> Indexing configuration Konfiguration af indeksering This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Dette vil lade dig justere de mapper, du vil indeksere, og andre parametre som udelukkede filstier eller navne, standard tegnsæt etc. Indexing schedule Tidsplan for indeksering This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Dette vil lade dig vælge mellem batch og realtime indeksering, og oprette en automatisk tidsplan for batch indeksering (ved hjælp af cron). Start indexing now Start indeksering nu FragButs %1 not found. %1 ikke fundet. %1: %2 %1: %2 Fragment Buttons Fragment Knapper Query Fragments Forespørgsel efter fragmenter IdxSchedW Index scheduling setup Opsætning af indeks skedulering <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indeksering kan køre permanent, indeksere filer når de ændrer sig, eller køre med adskilte intervaller. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Læsning af manualen kan hjælpe dig med at vælge mellem disse tilgange (tryk F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dette værktøj kan hjælpe dig med at oprette en tidsplan for at automatisere kørsler af batch indeksering, eller starte realtid indeksering når du logger ind (eller begge dele, hvilket sjældent giver mening). </p></body></html> Cron scheduling Cron skedulering The tool will let you decide at what time indexing should run and will install a crontab entry. Værktøjet vil lade dig afgøre, på hvilket tidspunkt indeksering skal køre og det vil installere en crontab indgang. Real time indexing start up Opstart af realtid indeksering Decide if real time indexing will be started when you log in (only for the default index). Beslut, om realtid indeksering skal startes når du logger ind (kun for standard-indekset). ListDialog Dialog Vindue GroupBox Gruppeboks Main No db directory in configuration Ingen dbmappe i konfigurationen Could not open database in Kunne ikke åbne database i . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Klik på Annullér, hvis du ønsker at redigere konfigurationsfilen før indeksering starter, eller Ok for at lade den fortsætte. Configuration problem (dynconf Konfigurationsproblem (dynconf "history" file is damaged or un(read)writeable, please check or remove it: Filen med "historik" er beskadiget eller den kan ikke læses eller skrives til, undersøg det venligst, eller fjern den: "history" file is damaged, please check or remove it: "historie" fil er beskadiget, tjek eller fjern den: Needs "Show system tray icon" to be set in preferences! Skal "Vis systembakkeikon" være indstillet i præferencerne! PTransEdit Path in index Sti i indekset Translated path Oversat sti Config error Konfigureringsfejl Original path Original sti Local path Lokal sti PTransEditBase Path Translations Oversættelse af stier Select one or several file types, then use the controls in the frame below to change how they are processed Vælg en eller flere filtyper, og brug derefter kontrollerne i rammen nedenfor til at ændre, hvordan de behandles. Add Tilføj Delete Slet Cancel Annuller Save Gem Preview &Search for: &Søger efter: &Next &Næste &Previous &Forrige Match &Case Store/små &Bogstaver Clear Ryd Creating preview text Laver forhåndsvisningstekst Loading preview text into editor Henter forhåndsvisningstekst for redigering Cannot create temporary directory Kan ikke oprette midlertidig mappe Cancel Annuller Close Tab Luk faneblad Missing helper program: Manglende hjælpeprogram: Can't turn doc into internal representation for Kan ikke lave dok til intern repræsentation for Cannot create temporary directory: Kan ikke oprette midlertidig mappe: Error while loading file Fejl ved indlæsning af filen Form Formular Tab 1 Tab 1 Open Åbn Canceled Annulleret Error loading the document: file missing. Fejl ved indlæsning af dokumentet: fil mangler. Error loading the document: no permission. Fejl ved indlæsning af dokumentet: ingen tilladelse. Error loading: backend not configured. Fejl ved indlæsning: backend ikke konfigureret. Error loading the document: other handler error<br>Maybe the application is locking the file ? Fejl ved indlæsning af dokumentet: anden håndteringsfejl<br>Måske er programmet låser filen? Error loading the document: other handler error. Fejl ved indlæsning af dokumentet: anden håndteringsfejl. <br>Attempting to display from stored text. <br>Forsøger at vise fra lagret tekst. Could not fetch stored text Kunne ikke hente gemt tekst Previous result document Forrige resultat dokument Next result document Næste resultat dokument Preview Window Forhåndsvis Vindue Close Window Luk Vindue Next doc in tab Næste dokument i fanebladet Previous doc in tab Forrige dokument i fanen Close tab Luk fane Print tab Print tab Close preview window Luk forhåndsvisningsvindue Show next result Vis næste resultat Show previous result Vis tidligere resultat Print Udskriv PreviewTextEdit Show fields Vis felter Show main text Vis hovedtekst Print Udskriv Print Current Preview Udskriv denne Visning Show image Vis billede Select All Vælg alle Copy Kopier Save document to file Gem dokument til fil Fold lines Ombryd linjer Preserve indentation Bevar indrykning Open document Åbn dokument Reload as Plain Text Genindlæs som ren tekst Reload as HTML Genindlæs som HTML QObject Global parameters Globale parametre Local parameters Lokale parametre <b>Customised subtrees <b>Tilpassede undermapper The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Listen over undermapper i det indekserede hierarki <br>hvor nogle parametre behøver at blive omdefineret. Standard: tom. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>De parametre, der følger er angivet enten på øverste niveau, hvis intet<br>eller en tom linje er valgt i listefeltet ovenfor, eller for den valgte undermappe. <br> Du kan tilføje eller fjerne mapper ved at klikke på +/- knapperne. Skipped names Udeladte navne These are patterns for file or directory names which should not be indexed. Dette er mønstre for fil- eller mappenavne, der ikke skal indekseres. Default character set Standard tegnsæt This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Dette er det tegnsæt, der bruges til at læse filer, som ikke identificerer tegnsættet internt, for eksempel rene tekstfiler.<br>Standardværdien er tom, og værdien fra NLS miljøet anvendes. Follow symbolic links Følg symbolske links Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Følg symbolske link under indeksering. Standarden er nej, for at undgå dobbelt indeksering Index all file names Indekser alle filnavne Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indekser navnene på filer, hvor indholdet ikke kan identificeres eller behandles (ingen eller ikke-understøttet mime-type). Standard er true Beagle web history Beagle webhistorik Search parameters Søgeparametre Web history Webhistorik Default<br>character set Standard<br>tegnsæt Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Tegnsæt, der bruges til at læse filer, hvor tegnsættet ikke kan identificeres ud fra indholdet, f.eks. rene tekstfiler.<br>Standardværdien er tom, og værdien fra NLS-omgivelserne anvendes. Ignored endings ignorerede endelser These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Dette er filnavneafslutninger for filer, som kun vil blive indekseret af indhold (intet MIME-typeidentifikationsforsøg, ingen dekomprimering, ingen indholdsindeksering. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Dette er endelser på filnavne for filer, hvor kun navnet vil blive indekseret (ingen forsøg på identifikation af MIME-type, ingen dekomprimering, ingen indeksering af indhold). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>De parametre, der følger, er indstillet enten på øverste niveau, hvis intet eller en tom linje er valgt i listefeltet ovenfor, eller for den valgte undermappe. Du kan tilføje eller fjerne mapper ved at klikke på +/- knapperne. These are patterns for file or directory names which should not be indexed. Disse er mønstre for fil- eller mappe-navne, som ikke bør indekseres. QWidget Create or choose save directory Opret eller vælg mappe til at gemme i Choose exactly one directory Vælg præcis en mappe Could not read directory: Kunne ikke læse mappe: Unexpected file name collision, cancelling. Uventet kollision af filnavn, annullerer. Cannot extract document: Kan ikke udtrække dokument: &Preview &Forhåndsvisning &Open &Åbn Open With Åbn med Run Script Kør skript Copy &File Name Kopier &Filnavn Copy &URL Kopier &URL &Write to File &Skriv til fil Save selection to files Gem det valgte til filer Preview P&arent document/folder Forhåndsvis &Forælderdokument/mappe &Open Parent document/folder &Åbn Forælderdokument/mappe Find &similar documents Find &lignende dokumenter Open &Snippets window Åbn vindue til &tekststumper Show subdocuments / attachments Vis underdokumenter / vedhæftede filer &Open Parent document &Åbn overordnet dokument &Open Parent Folder &Åbn Overordnet Mappe Copy Text Kopier tekst Copy &File Path Kopier &Filsti Copy File Name Kopier filnavn QxtConfirmationMessage Do not show again. Vis ikke igen. RTIToolW Real time indexing automatic start Automatisk start af realtid indeksering <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> Indeksering kan sættes til at køre som en dæmon, der opdatere indekset når filer ændres, i realtid. Du får et indeks, som altid er opdateret, men systemressourcer anvendes permanent..</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Start indekseringsdæmonen med min skrivebordssession. Also start indexing daemon right now. Start også indekseringsdæmon lige nu. Replacing: Erstatter: Replacing file Erstatter fil Can't create: Kan ikke oprette: Warning Advarsel Could not execute recollindex Kunne ikke køre recollindex Deleting: Sletter: Deleting file Sletter fil Removing autostart Fjerner autostart Autostart file deleted. Kill current process too ? Autostartfil er slettet. Stop også nuværende proces? Configuration name Konfigurationsnavn Short alphanumeric nickname for this config Kort alfanumerisk kaldenavn for denne konfiguration Could not find Kunne ikke finde RclCompleterModel Hits Træffere Hits RclMain About Recoll Om Recoll Executing: [ Udfører: [ Cannot retrieve document info from database Kan ikke hente dokumentinfo fra databasen Warning Advarsel Can't create preview window Kan ikke oprette forhåndsvisningsvindue Query results Resultater af forespørgsel Document history Dokumenthistorik History data Historik-data Indexing in progress: Indeksering i gang: Files Filer Purge Rydder op Stemdb stammedb Closing Afslutter Unknown Ukendt This search is not active any more Denne søgning er ikke længere aktiv Can't start query: Kan't starte forespørgsel: Bad viewer command line for %1: [%2] Please check the mimeconf file Ugyldig søgerkommandolinje for %1: [%2] Tjek venligst filen mimeconf Cannot extract document or create temporary file Kan ikke udtrække dokument eller oprette midlertidig fil (no stemming) (Ingen ordstammer) (all languages) (alle sprog) error retrieving stemming languages fejl under hentning af ordstammer for sprogene Update &Index Opdater &Indeks Indexing interrupted indeksering afbrudt Stop &Indexing Stop &Indeksering All Alle media medier message besked other andet presentation præsentation spreadsheet regneark text tekst sorted sorteret filtered filtreret External applications/commands needed and not found for indexing your file types: Eksterne programmer/kommandoer er nødvendige og ikke fundet til indeksering af dine filtyper: No helpers found missing Ingen hjælpere mangler Missing helper programs Manglende hjælpeprogrammer Save file dialog Gem fildialog Choose a file name to save under Vælg et filnavn der skal gemmes under Document category filter Dokument kategori filter No external viewer configured for mime type [ Ingen ekstern fremviser konfigureret for mime-type [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Fremviseren angivet i mimeview for %1: %2 er ikke fundet. Ønsker du at åbne indstillingsvinduet? Can't access file: Kan ikke tilgå fil: Can't uncompress file: Kan ikke dekomprimere fil: Save file Gem fil Result count (est.) Optælling af resultat (est.) Query details Detaljer i Forespørgsel Could not open external index. Db not open. Check external index list. Kunne ikke åbne ekstern indeks. DB er ikke åben. Tjek liste over eksterne indekser. No results found Ingen resultater fundet None Ingen Updating Opdaterer Done Færdig Monitor Overvåg Indexing failed Indeksering mislykkedes The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Den nuværende indekseringsproces blev ikke startet fra denne grænseflade. Klik på OK for at stoppe den alligevel, eller Annuller for at lade den køre Erasing index Sletter indeks Reset the index and start from scratch ? Nulstil indekset og start forfra? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Forespørgsel er i gang<br>På grund af begrænsninger i indekseringsbiblioteket,<br>vil en annullering afslutte programmet Error Fejl Index not open Indeks ikke åben Index query error Indeks forespørgselsfejl Indexed Mime Types Indekserede Mime-Typer Content has been indexed for these MIME types: Indhold er blevet indekseret for disse MIME-typer: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Indeks er ikke opdateret for denne fil. Afviger for at risikere at vise den forkerte post. Klik på OK for at opdatere indekset for denne fil, og derefter genkør forespørgslen når indeksering er færdig. Else, Annuller. Can't update index: indexer running Kan ikke opdatere indeks: indeksering kører Indexed MIME Types Indekserede MIME-typer Bad viewer command line for %1: [%2] Please check the mimeview file Forkert kommandolinje for fremviser for %1: [%2] Kontroller venligst mimeview-filen Viewer command line for %1 specifies both file and parent file value: unsupported Fremviser kommandolinje for %1 angiver både fil og forælderfil værdier: er ikke understøttet Cannot find parent document Kan ikke finde forælderdokument Indexing did not run yet Indeksering har ikke kørt endnu External applications/commands needed for your file types and not found, as stored by the last indexing pass in Eksterne programmer/kommandoer nødvendige for dine filtyper blev ikke fundet, som gemt af den sidste indeksering Index not up to date for this file. Refusing to risk showing the wrong entry. Indeks er ikke opdateret for denne fil. Afviger for at risikere at vise den forkerte post. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Klik på OK for at opdatere indekset for denne fil, og derefter genkør forespørgslen når indeksering er færdig. Else, Annuller. Indexer running so things should improve when it's done Indeksering kører, så tingene bør forbedres, når det's gjort Sub-documents and attachments Underdokumenter og vedhæftede filer Document filter Dokumentfilter Index not up to date for this file. Refusing to risk showing the wrong entry. Indeks er ikke opdateret for denne fil. Nægter at risikere at vise den forkerte indgang. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Klik OK for at opdatere indekset for denne fil, du bliver så nødt til at gentage forespørgslen når indeksering er færdig. The indexer is running so things should improve when it's done. Indeksering kører, så ting burde være bedre, når den er færdig. The document belongs to an external indexwhich I can't update. Dokumentet tilhører et ekstern indeks, som jeg ikke kan opdatere. Click Cancel to return to the list. Click Ignore to show the preview anyway. Klik på Annuller for at vende tilbage til listen. Klik på Ignorer for at vise forhåndsvisningen alligevel. Duplicate documents Identiske dokumenter These Urls ( | ipath) share the same content: Disse webadresser ( | ipath) deler samme indhold: Bad desktop app spec for %1: [%2] Please check the desktop file Forkert desktop app spec for %1: [%2] Tjek venligst desktopfilen Bad paths Ugyldige stier Bad paths in configuration file: Ugyldige stier i konfigurationsfil: Selection patterns need topdir Mønstre for udvælgelse skal have en øverste mappe Selection patterns can only be used with a start directory Mønstre for udvælgelse kan kun bruges med en startmappe No search Ingen søgning No preserved previous search Ingen tidligere søgning er bevaret Choose file to save Vælg fil, der skal gemmes Saved Queries (*.rclq) Gemte forespørgsler (*.rclq) Write failed Skrivning mislykkedes Could not write to file Kunne ikke skrive til fil Read failed Læsning mislykkedes Could not open file: Kunne ikke åbne fil: Load error Indlæsningsfejl Could not load saved query Kunne ikke indlæse gemte forespørgsel Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Åbner en midlertidig kopi. Ændringer vil gå tabt, hvis du ikke gemmer<br/>dem til et permanent sted. Do not show this warning next time (use GUI preferences to restore). Vis ikke denne advarsel næste gang (brug GUI præferencer for at gendanne). Disabled because the real time indexer was not compiled in. Deaktiveret fordi realtid indeksering ikke blev kompileret ind. This configuration tool only works for the main index. Dette konfigurationsværktøj virker kun for hovedindekset. The current indexing process was not started from this interface, can't kill it Den nuværende indekseringsproces blev ikke startet fra denne grænseflade, kan ikke stoppe den The document belongs to an external index which I can't update. Dokumentet tilhører et eksternt indeks, som jeg ikke kan opdatere. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Klik på Annuller for at vende tilbage til listen. <br>Klik på Ignorer for at vise forhåndsvisningen alligevel. (og husk for denne session). Index scheduling Indeks skedulering Sorry, not available under Windows for now, use the File menu entries to update the index Beklager, er endnu ikke tilgængelig for Windows, bruge Fil menuindgange for at opdatere indekset Can't set synonyms file (parse error?) Kan ikke aktivere synonymer-fil (analysefejl?) Index locked Indeks låst Unknown indexer state. Can't access webcache file. Indeksering i ukendt tilstand. Kan ikke tilgå webcachefil. Indexer is running. Can't access webcache file. Indeksering kører. Kan ikke tilgå webcachefil. with additional message: med yderligere meddelelse: Non-fatal indexing message: Ikke-fatal indeksering besked: Types list empty: maybe wait for indexing to progress? Typer liste tom: måske vente på indeksering til fremskridt? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Viewer kommandolinje for %1 angiver overordnet fil, men URL er http[s]: ikke understøttet Tools Værktøjer Results Resultater (%d documents/%d files/%d errors/%d total files) (%d dokumenter/%d filer/%d fejl/%d samlede filer) (%d documents/%d files/%d errors) (%d dokumenter/%d filer/%d fejl) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Tomme eller ikke-eksisterende stier i konfigurationsfilen. Klik på Ok for at starte indeksering alligevel (manglende data vil ikke blive renset fra indekset): Indexing done Indeksering udført Can't update index: internal error Kan't opdateringsindeks: intern fejl Index not up to date for this file.<br> Indeks ikke opdateret for denne fil.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Det ser også ud til, at den sidste indeksopdatering for filen mislykkedes.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Klik på OK for at forsøge at opdatere indekset for denne fil. Du bliver nødt til at køre forespørgslen igen, når indeksering er afsluttet.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Klik på Annuller for at vende tilbage til listen.<br>Klik Ignorér for at vise forhåndsvisningen alligevel (og husk for denne session). Der er en risiko for at vise den forkerte post.<br/> documents dokumenter document dokument files filer file fil errors fejl error fejl total files) samlede filer) No information: initial indexing not yet performed. Ingen oplysninger: oprindelig indeksering endnu ikke udført. Batch scheduling Batch planlægning The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Værktøjet vil lade dig beslutte på hvilket tidspunkt indeksering skal køre. Det bruger Windows opgave scheduler. Confirm Bekræft Erasing simple and advanced search history lists, please click Ok to confirm Sletning af enkle og avancerede søgehistorik lister, klik på OK for at bekræfte Could not open/create file Kunne ikke åbne/oprette fil F&ilter F&ilter Could not start recollindex (temp file error) Kunne ikke starte recollindex (temp fil fejl) Could not read: Kunne ikke læse: This will replace the current contents of the result list header string and GUI qss file name. Continue ? Dette vil erstatte det nuværende indhold af resultatlistens hovedstreng og GUI qss filnavn. Fortsæt? You will need to run a query to complete the display change. Du bliver nødt til at køre en forespørgsel for at fuldføre visningsændringen. Simple search type Simpel søgetype Any term Vilkårlig ord All terms Alle ord File name Filnavn Query language Forespørgselssprog Stemming language Ordstammer for sprog Main Window Hoved Vindue Focus to Search Fokus på søgning Focus to Search, alt. Fokus på søgning, alt. Clear Search Ryd Søgning Focus to Result Table Fokus på resultattabel Clear search Ryd søgning Move keyboard focus to search entry Flyt tastaturfokus for at søge ind Move keyboard focus to search, alt. Flyt tastaturets fokus for at søge, alt. Toggle tabular display Slå tabelvisning til/fra Move keyboard focus to table Flyt tastaturets fokus til tabellen Flushing Tømning Show menu search dialog Vis menu søgedialog Duplicates Dubletter Filter directories Filtrer mapper Main index open error: Hovedindeks åbningsfejl: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Indekset kan være beskadiget. Måske prøv at køre xapian-check eller genopbygge indekset? This search is not active anymore Denne søgning er ikke længere aktiv. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Seerens kommandolinje for %1 angiver overordnet fil, men URL'en er ikke file:// : ikke understøttet The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Den viser, der er angivet i mimeview for %1: %2, blev ikke fundet. Vil du starte indstillingsdialogen? Show advanced search dialog Vis avanceret søgedialog with additional message: RclMainBase Previous page Forrige side Next page Næste side &File &Fil E&xit A&fslut &Tools &Værktøjer &Help &Hjælp &Preferences &Præferencer Search tools Søg efter værktøjer Result list Resultatliste &About Recoll &Om Recoll Document &History Dokument&historik Document History Dokumenthistorik &Advanced Search &Avanceret søgning Advanced/complex Search Avanceret/kompleks søgning &Sort parameters &Sorterings-parametre Sort parameters Sorterings-parametre Next page of results Næste side med resultater Previous page of results Forrige side med resultater &Query configuration &Forespørgselskonfiguration &User manual &Brugermanual Recoll Rekoll Ctrl+Q Ctrl+Q Update &index Opdater &Indeks Term &explorer &Søg efter ord Term explorer tool Værktøj for søgning efter ord External index dialog Eksterne indekser &Erase document history &Slet dokumenthistorik First page Første side Go to first page of results Gå til første side med resultater &Indexing configuration &Konfiguration af indeksering All Alle &Show missing helpers &Vis manglende hjælpere PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen &Fuld skærm F11 F11 Full Screen Fuld skærm &Erase search history &Slet søgehistorik sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Sorter efter dato fra ældste til nyeste sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Sorter efter dato fra nyeste til ældste Show Query Details Vis Detaljer i forespørgsel Show results as table Vis resultater som tabel &Rebuild index &Genopbyg indeks &Show indexed types &Vis indekserede typer Shift+PgUp Shift+PgUp &Indexing schedule &Tidsplan for Indeksering E&xternal index dialog E&ksterne indekser &Index configuration &Konfiguration for Indeks &GUI configuration &Konfiguration for GUI &Results &Resultater Sort by date, oldest first Sorter efter dato, ældste først Sort by date, newest first Sorter efter dato, nyeste først Show as table Vis som tabel Show results in a spreadsheet-like table Vis resultater i en regneark-lignende tabel Save as CSV (spreadsheet) file Gem som CSV (regneark) fil Saves the result into a file which you can load in a spreadsheet Gemmer resultatet i en fil, som du kan indlæse i et regneark Next Page Næste side Previous Page Forrige side First Page Første side Query Fragments Forespørgsel efter fragmenter With failed files retrying Forsøg igen med filer der mislykkedes Next update will retry previously failed files Næste opdatering vil igen forsøge med filer, der tidligere mislykkedes Save last query Gem sidste forespørgsel Load saved query Indlæs gemte forespørgsel Special Indexing Særlig indeksering Indexing with special options Indeksering med særlige indstillinger Indexing &schedule Tid&splan for Indeksering Enable synonyms Aktiver synonymer &View &Vis Missing &helpers Manglende &hjælpere Indexed &MIME types Indekserede &MIME-typer Index &statistics Indeks&statistik Webcache Editor Rediger webcache Trigger incremental pass Udløser trinvis passering E&xport simple search history E&ksporter simpel søgehistorik Use default dark mode Brug standard mørk tilstand Dark mode Mørk tilstand &Query &Forespørgsel Increase results text font size Forøg skriftstørrelsen på resultatteksten. Increase Font Size Forøg skriftstørrelsen Decrease results text font size Formindsk resultattekstens skriftstørrelse Decrease Font Size Formindsk skriftstørrelsen Start real time indexer Start real time indexer Start real time indexer Query Language Filters Søgesprogfiltre Filter dates Filtrer datoer Assisted complex search Hjulpet kompleks søgning Filter birth dates Filtrer fødselsdatoer Switch Configuration... Skift konfiguration... Choose another configuration to run on, replacing this process Vælg en anden konfiguration at køre på, og erstat denne proces. &User manual (local, one HTML page) Brugervejledning (lokal, én HTML-side) &Online manual (Recoll Web site) Online manual (Recoll-websted) Path translations Sti oversættelser With failed files retrying RclTrayIcon Restore Gendan Quit Afslut RecollModel Abstract Sammendrag Author Forfatter Document size Dokumentets størrelse Document date Dokumentets dato File size Filstørrelse File name Filnavn File date Fildato Ipath Ipath Keywords Nøgleord Mime type Mime- type Original character set Originale tegnsæt Relevancy rating Relevans bedømmelse Title Titel URL URL Mtime Mtid Date Dato Date and time Dato og tid MIME type MIME-type Can't sort by inverse relevance Kan't sortere efter omvendt relevans ResList Result list Resultatliste Unavailable document Dokument ikke tilgængelig Previous Forrige Next Næste <p><b>No results found</b><br> <p><b>Ingen resultater fundet</b><br> &Preview &Forhåndsvisning Copy &URL Kopier &URL Find &similar documents Find &lignende dokumenter Query details Detaljer i Forespørgsel (show query) (vis forespørgsel) Copy &File Name Kopier &Filnavn filtered filtreret sorted sorteret Document history Dokumenthistorik Preview Forhåndsvisning Open Åbn <p><i>Alternate spellings (accents suppressed): </i> <p><i>Alternative stavemåder (accenter undertrykt): </i> &Write to File &Skriv til fil Preview P&arent document/folder Forhåndsvis &Forælderdokument/mappe &Open Parent document/folder &Åbn Forælderdokument/mappe &Open &Åbn Documents Dokumenter out of at least ud af mindst for til <p><i>Alternate spellings: </i> <p><i>Alternative stavemåder: </i> Open &Snippets window Åbn vindue til &tekststumper Duplicate documents Identiske dokumenter These Urls ( | ipath) share the same content: Disse webadresser ( | ipath) deler samme indhold: Result count (est.) Optælling af resultat (est.) Snippets Tekststumper This spelling guess was added to the search: Denne stavegæt blev tilføjet til søgningen: These spelling guesses were added to the search: Disse staveforslag blev tilføjet til søgningen: ResTable &Reset sort &Nulstil sortering &Delete column &Slet kolonne Add " Tilføj " " column " kolonne Save table to CSV file Gem tabel til CSV-fil Can't open/create file: Kan ikke åbne/oprette fil: &Preview &Forhåndsvisning &Open &Åbn Copy &File Name Kopier &Filnavn Copy &URL Kopier &URL &Write to File &Skriv til fil Find &similar documents Find &lignende dokumenter Preview P&arent document/folder Forhåndsvis &Forælderdokument/mappe &Open Parent document/folder &Åbn Forælderdokument/mappe &Save as CSV &Gem som CSV Add "%1" column Tilføj "%1" kolonne Result Table Resultattabel Open Åbn Open and Quit Åbn og afslut Preview Forhåndsvisning Show Snippets Vis Stumper Open current result document Åbn det aktuelle resultatdokument Open current result and quit Åbn aktuelle resultat og afslut Show snippets Vis snippets Show header Vis overskrift Show vertical header Vis lodret header Copy current result text to clipboard Kopiér nuværende resultattekst til udklipsholder Use Shift+click to display the text instead. Brug Shift+klik for at vise teksten i stedet. %1 bytes copied to clipboard %1 bytes kopieret til udklipsholderen Copy result text and quit Kopier resultatteksten og afslut ResTableDetailArea &Preview &Forhåndsvisning &Open &Åbn Copy &File Name Kopier &Filnavn Copy &URL Kopier &URL &Write to File &Skriv til fil Find &similar documents Find &lignende dokumenter Preview P&arent document/folder Forhåndsvis &Forælderdokument/mappe &Open Parent document/folder &Åbn Forælderdokument/mappe ResultPopup &Preview &Forhåndsvisning &Open &Åbn Copy &File Name Kopier &Filnavn Copy &URL Kopier &URL &Write to File &Skriv til fil Save selection to files Gem det valgte til filer Preview P&arent document/folder Forhåndsvis &Forældre-dokument/mappe &Open Parent document/folder &Åbn Forældre-dokument/mappe Find &similar documents Find &lignende dokumenter Open &Snippets window Åbn vindue til &tekststumper Show subdocuments / attachments Vis underdokumenter / vedhæftede filer Open With Åbn med Run Script Kør skript SSearch Any term Vilkårlig ord All terms Alle ord File name Filnavn Completions Afslutninger Select an item: Vælg et element: Too many completions For mange færdiggørelser Query language Forespørgselssprog Bad query string Forkert forespørgselsstreng Out of memory Ikke mere hukommelse Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Indtast forespørgselssprogudtryk. Snydeark:<br> <i>ord1 ord2</i> : 'ord1' og 'ord2' i et hvilken som helst felt.<br> <i>felt:ord1</i> : 'ord1' i feltet 'felt'.<br> Standard feltnavne/synonymer:<br> titel/emne/billedtekst, forfatter/fra, modtager/til, filnavn, ekst.<br> Pseudofelter: dir, mime/format, type/rclcat, dato.<br> To datointerval-eksempler: 2009-03-01/2009-05-20 2009-03-01/P2M:<br>. <i>ord1 ord2 ELLER ord3</i>: ord1 OG (ord2 ELLER ord3).<br> Ingen egentlige parenteser er tilladt.<br> <i>"ord1 ord2"</i> : frase (skal forekomme nøjagtigt). Mulige modifikatorer:<br> <i>"ord1 ord2"p </i> : uordnet nærheds-søgning med standard afstand.<br> Brug <b>Vis Forespørgsel</b> link når i tvivl om resultatet og se manual (&lt;F1>) for flere detaljer. Enter file name wildcard expression. Indtast filnavn jokertegn udtryk. Enter search terms here. Type ESC SPC for completions of current term. Indtast søgeord her. Tast ESC SPC for færdiggørelse af nuværende ord. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Indtast forespørgselssprogets udtryk. Snydeark:<br> <i>ord1 ord2</i> : 'ord1' og 'ord2' i et hvilken som helst felt.<br> <i>felt:ord1</i> : 'ord1' i feltet 'felt'.<br> Standard feltnavne/synonymer:<br> titel/emne/billedtekst, forfatter/fra, modtager/til, filnavn, ekst.<br> Pseudofelter: dir, mime/format, type/rclcat, dato, størrelse.<br> To datointerval-eksempler: 2009-03-01/2009-05-20 2009-03-01/P2M:<br>. <i>ord1 ord2 OR ord3</i>: ord1 AND (ord2 OR ord3).<br> Du kan bruge parenteser for at gøre tingene klarere.<br> <i>"ord1 ord2"</i> : frase (skal forekomme nøjagtigt). Mulige modifikatorer:<br> <i>"ord1 ord2"p </i> : uordnet nærheds-søgning med standard afstand.<br> Brug <b>Vis Forespørgsel</b> link når i tvivl om resultatet og se manual (&lt;F1>) for flere detaljer. Stemming languages for stored query: Ordstammer til sprogene for gemte forespørgsel: differ from current preferences (kept) adskiller sig fra de nuværende præferencer (beholdt) Auto suffixes for stored query: Automatiske suffikser for gemte forespørgsel: External indexes for stored query: Eksterne Indekser for gemte forespørgsel: Autophrase is set but it was unset for stored query Autofrase er aktiveret, men var deaktiveret for gemte forespørgsel Autophrase is unset but it was set for stored query Autofrase er deaktiveret, men var aktiveret for gemte forespørgsel Enter search terms here. Indtast søgeord her. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; border: 1px solid sort border-collapse: collapse; kollaps: kollaps } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Forespørgsel sprog snydeplade. Klik på <b>Vis forespørgsel</b>.&nbsp; You should really look at the manual (F1)</p> Du bør virkelig se på manualen (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Hvad</th><th>Eksempler</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>Og</td><td>en to&nbsp;&nbsp;&nbsp;en OG to&nbsp;&nbsp;&nbsp;en && to</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Eller</td><td>en ELLER to&nbsp;&nbsp;&nbsp;en og to</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Kompleks boolean. ELLER har prioritet, brug parenteser&nbsp; where needed</td><td>(one AND two) OR three</td></tr> om nødvendigt</td><td>(et OG to) ELLER tre</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Ikke</td><td>term</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Sætning</td><td>"stolthed og prejudice"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Ubestilt prox. (default slack=10)</td><td>"fordomme&nbsp;stolthed"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Ingen stamudvidelse: kapitaliserer</td><td>Floor</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Feltspecifik</td><td>forfatter: austen&nbsp;&nbsp;titel:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>ELLER inde i feltet</td><td>forfatter:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Feltnavne</td><td>title/subject/caption&nbsp;&nbsp;forfatter/fra<br>modtager/til&nbsp;&nbsp;filnavn&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Mappe sti filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Dato intervaller</td><td>dato:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> dato:2018&nbsp;&nbsp;dato:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Kan't åbne indeks Could not restore external indexes for stored query:<br> Kunne ikke gendanne eksterne indekser for lagret forespørgsel:<br> ??? ??? Using current preferences. Brug af aktuelle indstillinger. Simple search Simpel søgning History Historie <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Søgesprog snydeark. I tvivl: klik på <b>Vis forespørgselsdetaljer</b>. &nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Stor forbogstav for at undertrykke stammeudvidelse</td><td>Gulv</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSøgeBase Clear Ryd Ctrl+S Ctrl+S Erase search entry Slet søgeindgang Search Søg Start query Start forespørgsel Enter search terms here. Type ESC SPC for completions of current term. Indtast søgeord her. Type ESC SPC for færdiggørelse af nuværende ord. Choose search type. Vælg søgetype. Show query history Vis forespørgsel historik Enter search terms here. Indtast søgeord her. Main menu Hovedmenu SearchClauseW SearchClauseW SearchClauseW Any of these Enhver af disse All of these Alle disse None of these Ingen af disse This phrase Denne sætning Terms in proximity Vilkår i nærheden File name matching Fil navn matcher Select the type of query that will be performed with the words Vælg den type forespørgsel, der vil blive udført med ordene Number of additional words that may be interspersed with the chosen ones Antal yderligere ord, der kan være blandet med de udvalgte In field I felt No field Intet felt Any Vilkårlig All Alle None Ingen Phrase Frase Proximity Nærhed File name Filnavn Snippets Snippets Tekststumper X X Find: Find: Next Næste Prev Forrige SnippetsW Search Søg <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Desværre blev der ikke, inden for rimelige grænser, fundet en nøjagtig match. Sandsynligvis fordi dokumentet er meget stort, så tekststump-generatoren for vild i mængden...</ p> Sort By Relevance Sorter Efter Relevans Sort By Page Sortér Efter Side Snippets Window Tekstumper Vindue Find Find Find (alt) Find (alt) Find Next Find Næste Find Previous Find Forrige Hide Skjul Find next Find næste Find previous Find forrige Close window Luk vindue Increase font size Forøg skriftstørrelsen Decrease font size Formindsk skriftstørrelsen SortForm Date Dato Mime type Mime- type SortFormBase Sort Criteria Sorteringskriterier Sort the Sortér most relevant results by: mest relevante resultater ved: Descending Faldende Close Luk Apply Anvend SpecIdxW Special Indexing Særlig indeksering Do not retry previously failed files. Forsøg ikke igen med filer, der tidligere mislykkedes. Else only modified or failed files will be processed. Ellers vil kun ændrede eller mislykkede filer blive behandlet. Erase selected files data before indexing. Slet udvalgte filers data, før indeksering. Directory to recursively index Mappe til rekursivt indeks Browse Gennemse Start directory (else use regular topdirs): Startmappe (ellers brug de regulære øverste mapper): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Lad stå tomt for at vælge alle filer. Du kan bruge adskillige mellemrums-adskilte shell-type mønstre.<br>Mønstre med indlejrede mellemrum skal citeres med dobbelte anførselstegn.<br>Kan kun bruges, hvis startmålet er angivet. Selection patterns: Mønstre for udvælgelse: Top indexed entity Top indekserede enhed Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Mappe for rekursiv indeksering. Dette skal være indenfor det regulære indekserede område<br> som defineret i konfigurationsfilen (øverste mapper). Retry previously failed files. Forsøg tidligere mislykkede filer. Start directory. Must be part of the indexed tree. We use topdirs if empty. Start mappe. Skal være en del af det indekserede træ. Vi bruger topdirs hvis tom. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Start mappe. Skal være en del af det indekserede træ. Brug hele indekseret område hvis tomt. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Diagnostik outputfil. Vil blive afkortet og modtage indekseringsdiagnostik (årsager til filer, der ikke bliver indekseret). Diagnostics file Diagnostikfil SpellBase Term Explorer Søg efter ord &Expand &Udvid Alt+E Alt+E &Close &Luk Alt+C Alt+C Term Ord No db info. Ingen dbinfo. Doc. / Tot. Dok. / Tot. Match Sammenlign Case Stor/Små bogstaver Accents Accenter SpellW Wildcards Jokertegn Regexp Regex Spelling/Phonetic Stavning/Fonetisk Aspell init failed. Aspell not installed? Aspell init mislykkedes. Aspell ikke installeret? Aspell expansion error. Aspell udvidelsesfejl. Stem expansion Udvidelse af stamme error retrieving stemming languages fejl under hentning af ordstammer for sprogene No expansion found Ingen udvidelse fundet Term Ord Doc. / Tot. Dok. / Tot. Index: %1 documents, average length %2 terms Indeks: %1 dokumenter, gennemsnitlig længde %2 led Index: %1 documents, average length %2 terms.%3 results Index: %1 dokumenter, gennemsnitslængde %2 ord %3 resultater %1 results %1 resultater List was truncated alphabetically, some frequent Liste blev afkortet alfabetisk, nogle ofte terms may be missing. Try using a longer root. Der kan mangle ord. Prøv at bruge en længere rod. Show index statistics Vis statistik for indeks Number of documents Antal dokumenter Average terms per document Gennemsnitlige ord pr dokument Smallest document length Mindste dokumentlængde Longest document length Længste dokumentlængde Database directory size Mappestørrelse for database MIME types: MIME-typer: Item Element Value Værdi Smallest document length (terms) Mindste dokumentlængde (ord) Longest document length (terms) Længste dokumentlængde (ord) Results from last indexing: Resultater fra sidste indeksering: Documents created/updated Dokumenter oprettet/opdateret Files tested Filer testet Unindexed files ikke-indekserede filer List files which could not be indexed (slow) List filer som ikke kunne indekseres (langsom) Spell expansion error. Spell ekspansionsfejl. Spell expansion error. Staveudvidelsesfejl. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index Den valgte mappe synes ikke at være et Xapianindeks This is the main/local index! Dette er hoved/lokal indekset! The selected directory is already in the index list Den valgte mappe er allerede i indekslisten Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Vælg xapian index directory (ie: /home/buddy/.recoll/xapiandb) error retrieving stemming languages fejl under hentning af ordstammer for sprogene Choose Vælg Result list paragraph format (erase all to reset to default) Afsnitformat for resultatliste (slet alt for at nulstille til standard) Result list header (default is empty) Overskrift for resultatliste (standard er tom) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Vælg recoll konfigmappe eller xapian indeksmappe (f.eks: /home/me/.recoll eller /home/me/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Den valgte mappe ligner en Recoll konfigurationmappe, men konfigurationen kunne ikke læses At most one index should be selected Der burde vælges højst et indeks Cant add index with different case/diacritics stripping option Kan ikke tilføje indeks med en anden indstilling for fjernelse af store-bogstaver/diakritiske tegn Default QtWebkit font Standard skrifttype for QtWebkit Any term Vilkårlig ord All terms Alle ord File name Filnavn Query language Forespørgselssprog Value from previous program exit Værdi fra tidligere programafslutning Context Kontekst Description Varebeskrivelse Shortcut Genvej Default Standard Choose QSS File Vælg QSS-fil Can't add index with different case/diacritics stripping option. Kan ikke tilføje indeks med forskellige indstillinger for store/små bogstaver og diakritisk fjernelse. Light Lys Dark Mørk System Systemet UIPrefsDialogBase User interface brugergrænseflade Number of entries in a result page Antal indgange i en resultatside Result list font Skrifttype for resultatliste Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Åbner et vindue til at vælge resultatlistens skrifttype Reset Nulstil Resets the result list font to the system default Nulstiller resultatlistens skrifttype til systemets standard Auto-start simple search on whitespace entry. Autostart simpel søgning ved blanktegn. Start with advanced search dialog open. Start med åbent avanceret søgevindue. Start with sort dialog open. Start med sorteringsdialog åben. Search parameters Søgeparametre Stemming language Ordstammer for sprog Dynamically build abstracts Lav dynamisk sammendrag Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Skal vi forsøge at lave sammendrag af indgange til resultatliste ved at bruge sammenhænget med forespørgselsordene? Kan være langsomt for store dokumenter. Replace abstracts from documents Erstat sammendrag fra dokumenter Do we synthetize an abstract even if the document seemed to have one? Skal vi sammenfatte et sammendrag, selvom dokumentet synes at have et? Synthetic abstract size (characters) Størrelse på det genererede sammendrag (tegn) Synthetic abstract context words Sammenhængende ord for det genererede sammendrag External Indexes Eksterne Indekser Add index Tilføj index Select the xapiandb directory for the index you want to add, then click Add Index Vælg xapiandb-mappen for det indeks, du vil tilføje, og klik derefter på Tilføj indeks Browse Gennemse &OK &Ok Apply changes Anvend ændringer &Cancel &Annuller Discard changes Kassere ændringer Result paragraph<br>format string Resultat afsnit<br>format streng Automatically add phrase to simple searches Tilføj automatisk frase til simple søgninger A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. En søgning efter [Rullende Sten] (2 ord) vil blive ændret til [rullende eller sten eller (rullende frase 2 sten)]. Dette skulle give højere forrang til resultaterne, hvor søgeordene vises nøjagtigt som angivet. User preferences Brugerindstillinger Use desktop preferences to choose document editor. Brug desktop-præferencer til at vælge dokument-editor. External indexes Eksterne indekser Toggle selected Skift det valgte Activate All Aktiver alle Deactivate All Deaktiver alle Remove selected Fjern valgte Remove from list. This has no effect on the disk index. Fjern fra listen. Dette har ingen virkning på indeks på disken. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definerer formatet for hvert resultat liste afsnit. Brug qt html format og printf-lignende erstatninger:<br>%A Resumé<br> %D Dato<br> %I Ikon billede navn<br> %K Søgeord (hvis nogen)<br> %L Forhåndsvisning og Rediger links<br> %M Mime type<br> %N Resultat nummer<br> %R Relevans procentdel<br> %S Størrelsesinformation<br> %T Afsnit<br> %U Url<br> Remember sort activation state. Husk sorteringens aktiveringstilstand. Maximum text size highlighted for preview (megabytes) Maksimal tekststørrelse der fremhæves for forhåndsvisning (megabyte) Texts over this size will not be highlighted in preview (too slow). Tekster over denne størrelse vil ikke blive fremhævet i forhåndsvisning (for langsom). Highlight color for query terms Farve for fremhævning af søgeord Prefer Html to plain text for preview. Foretræk Html til almindelig tekst for forhåndsvisning. If checked, results with the same content under different names will only be shown once. Afkryds forårsager, at resultater med samme indhold under forskellige navne kun bliver rapporteret en gang. Hide duplicate results. Skjul identiske resultater. Choose editor applications Vælg redigeringsprogrammer Display category filter as toolbar instead of button panel (needs restart). Vis kategorifilter som værktøjslinje i stedet for knappanelet (kræver genstart). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Ordene på listen bliver automatisk vendt til ext: xxx sætninger i forespørgselssprogets indgang. Query language magic file name suffixes. Forespørgselssprogets magiske filnavnendelser. Enable Aktiver ViewAction Changing actions with different current values Ændring af handlinger med forskellige aktuelle værdier Mime type Mime- type Command Kommando MIME type MIME-type Desktop Default Desktop standard Changing entries with different current values Ændrer indgange med forskellige aktuelle værdier ViewActionBase File type Filtype Action Handling Select one or several file types, then click Change Action to modify the program used to open them Vælg en eller flere filtyper, og klik derefter på Skift handling for at ændre det program, der bruges til at åbne dem Change Action Skift Handling Close Luk Native Viewers Oprindelige fremvisere Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Vælg en eller flere mime typer og klik derefter på "Skift handling"<br>Du kan også lukke denne dialog og tjekke "Brug desktop præferencer"<br>i hovedpanelet for at ignorere denne liste og bruge din desktop standardindstillinger. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Vælg en eller flere Mime-typer og brug derefter knapperne i bundrammen til at ændre, hvordan de behandles. Use Desktop preferences by default Brug indstillinger for Desktop som standard Select one or several file types, then use the controls in the frame below to change how they are processed Vælg en eller flere filtyper, og brug derefter knapperne i rammen nedenfor for at ændre, hvordan de behandles Exception to Desktop preferences Undtagelse til indstillinger for Desktop Action (empty -> recoll default) Handling (tom -> recoll standard) Apply to current selection Anvend på aktuelle udvalg Recoll action: Recoll handling: current value aktuelle værdi Select same Vælg det samme <b>New Values:</b> <b>Nye værdier:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Værdien er en kommandolinje, der skal udføres. Erstatninger: %s: søgestreng; %p: sidenummer; <br>%f: dokumentfilnavn. F1 for mere hjælp. Webcache Webcache editor Rediger webcache Search regexp Regex søgning TextLabel Tekstetiket WebcacheEdit Copy URL Kopier URL Unknown indexer state. Can't edit webcache file. Indeksering i ukendt tilstand. Kan ikke redigere webcachefil. Indexer is running. Can't edit webcache file. Indeksering kører. Kan ikke redigere webcachefil. Delete selection Slet det valgte Webcache was modified, you will need to run the indexer after closing this window. WebCache blev ændret, du er nød til at køre indeksering efter lukning af dette vindue. Save to File Gem til fil File creation failed: Filoprettelse mislykkedes: Maximum size %1 (Index config.). Current size %2. Write position %3. Maksimal størrelse %1 (Indeks konfig.). Aktuel størrelse %2. Skriveposition %3. WebcacheModel MIME MIME Url URL Date Dato Size Størrelse URL URL WinSchedToolW Error Fejl Configuration not initialized Konfiguration ikke initialiseret <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Rekoll indeksering batch scheduling</h3><p>Vi bruger standard Windows task scheduler til dette. Programmet vil blive startet, når du klikker på knappen nedenfor.</p><p>Du kan bruge enten den fulde grænseflade (<i>Opret opgave</i> i menuen til højre), eller den forenklede <i>Opret grundlæggende opgave</i> guide. I begge tilfælde Kopier/Indsæt batchfilstien nedenfor som <i>Handling</i> der skal udføres.</p> Command already started Kommando allerede startet Recoll Batch indexing Rekoll Batch indeksering Start Windows Task Scheduler tool Start Windows Opgavestyring værktøj Could not create batch file Kunne ikke oprette batch-fil confgui::ConfBeaglePanelW Steal Beagle indexing queue Stjæl Beagle indeksering kø Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle SKAL IKKE køre. Aktiverer behandling af beagle køen til at indeksere Firefox webhistorik.<br>(du bør også installere Firefox Beagle plugin) Web cache directory name Web-cache mappenavn The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Navnet på en mappe hvor cachen for besøgte websider skal gemmes.<br>En ikke-absolut sti er taget i forhold til konfigurationsmappen. Max. size for the web cache (MB) Maks. størrelse for web cache (MB) Entries will be recycled once the size is reached Indgangene vil blive genbrugt, når størrelsen er nået Web page store directory name Mappenavn for lageret til Websider The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Navnet på en mappe hvor du vil gemme kopier af besøgte websider.<br>En relativ sti er taget i forhold til konfigurationsmappen. Max. size for the web store (MB) Max. størrelse til web-lager (MB) Process the WEB history queue Behandl køen for WEB-historik Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Aktiverer indeksering af sider besøgt af Firefox.<br>(Du skal også installere Firefox Recoll plugin) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Indgangene vil blive genbrugt, når størrelsen er nået.<br>Kun en øgning af størrelsen giver god mening, da en reducering af værdien ikke vil afkorte en eksisterende fil (kun spildplads i slutningen). confgui::ConfIndexW Can't write configuration file Kan ikke skrive konfigurationsfil Recoll - Index Settings: Rekoll - Indeks Indstillinger: confgui::ConfParamFNW Browse Gennemse Choose Vælg confgui::ConfParamSLW + + - - Add entry Tilføj post Delete selected entries Slet valgte poster ~ ~ Edit selected entries Rediger valgte poster confgui::ConfSearchPanelW Automatic diacritics sensitivity Automatisk følsomhed over for diakritiske tegn <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Udløser automatisk følsomhed over for diakritiske tegn, hvis søgeordet har accent tegn (ikke i unac_except_trans). Ellers er du nød til bruge forespørgselssproget og <i>D</i> modifikatoren, for at angive følsomhed over for diakritiske tegn. Automatic character case sensitivity Automatisk følsomhed over for store/små bogstaver <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Udløser automatisk følsomhed over for store/små bogstaver, hvis indgangen har store bogstaver i andet end den første position. Ellers er du nød til bruge forespørgselssproget og <i>C</i> modifikatoren, for at angive følsomhed over for store/små bogstaver. Maximum term expansion count Maksimale antal ordudvidelser <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maksimal antal udvidelser-for et enkelt ord (fx: når der bruges jokertegn). Standarden på 10 000 er rimeligt og vil undgå forespørgsler, der synes at fryse mens motoren arbejder sig igennem ordlisten. Maximum Xapian clauses count Maksimale antal Xapiansætninger <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Maksimalt antal grundlæggende sætninger vi føjer til en enkel Xapian forespørgsel. I nogle tilfælde kan resultatet af ordudvidelse være multiplikativ, og vi ønsker at undgå at bruge overdreven hukommelse. Standarden på 100 000 bør være både høj nok i de fleste tilfælde og kompatibel med de nuværende typiske hardware konfigurationer. confgui::ConfSubPanelW Global Globalt Max. compressed file size (KB) Maks. komprimeret filstørrelse (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Denne værdi angiver en grænse for, hvornår komprimerede filer ikke vil blive behandlet. Indstil til -1 for ingen grænse, til 0 for ingen dekomprimering nogensinde. Max. text file size (MB) Maks. størrelse på tekstfil (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Denne værdi angiver en grænse for, hvornår tekstfiler ikke vil blive behandlet. Indstil til -1 for ingen grænse. Dette er for at udelukke monster logfiler fra indekset. Text file page size (KB) Sidestørrelse på tekstfil (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Hvis denne værdi er angivet (ikke lig med -1), vil tekstfiler opdeles i bidder af denne størrelse for indeksering. Dette vil hjælpe søgning i meget store tekstfiler (dvs.: log-filer). Max. filter exec. time (S) Maks. udførelsestid for filtre (S) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Eksterne filtre, der virker længere end dette, vil blive afbrudt. Dette er for det sjældne tilfælde (ie: postscript) hvor et dokument kan få et filter til at loopSet til -1 for ingen grænse. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Eksterne filtre der arbejder længere end dette vil blive afbrudt. Dette er for det sjældne tilfælde (dvs.: postscript) hvor et dokument kan forårsage, at et filter laver et loop. Indstil til -1 for ingen grænse. Only mime types Kun mime-typer An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive En eksklusiv liste over indekserede MIME-typer.<br>Intet andet vil blive indekseret. Normalt tom og inaktiv Exclude mime types Udeluk mime-typer Mime types not to be indexed Mime-typer der ikke skal indekseres Max. filter exec. time (s) Maks. filter eksekveringstid (s) confgui::ConfTabsW Apply Anvend confgui::ConfTopPanelW Top directories Øverste mapper The list of directories where recursive indexing starts. Default: your home. Listen over mapper hvor rekursiv indeksering starter. Standard: din hjemme-mappe (home). Skipped paths Udeladte stier These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Dette er navne på mapper, som indeksering ikke går ind i.<br>Kan indeholde jokertegn. Skal stemme overens med stierne, som de ses af indekseringsprogrammet (dvs. hvis de øverste mapper omfatter '/home/mig' og '/home' er et link til '/usr/home', en korrekt udeladtSti indgang ville være '/home/mig/tmp * ', ikke '/usr/home/mig/tmp * ') Stemming languages Ordstammer for sprogene The languages for which stemming expansion<br>dictionaries will be built. De sprog, hvor ordstamme-udvidelses<br>ordbøger vil blive bygget. Log file name Navn på logfil The file where the messages will be written.<br>Use 'stderr' for terminal output Filen hvor meddelelser vil blive skrevet.<br>Brug 'stderr' for terminal output Log verbosity level Log informationsniveau This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Denne værdi justerer mængden af meddelelser,<br>fra kun fejl til en masse fejlretningsdata. Index flush megabytes interval Megabyte interval for skrivning af Index This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Denne værdi justere mængden af data, der er indekseret mellem skrivning til disken.<br>Dette hjælper med at kontrollere indekseringsprogrammets brug af hukommelse. Standard 10MB Max disk occupation (%) Maks brug af disk (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Dette er den procentdel af diskforbrug hvor indeksering vil mislykkes, og stoppe (for at undgå at fylde dit disk).<br>0 betyder ingen grænse (dette er standard). No aspell usage Brug ikke aspell Aspell language Aspell sprog The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Sproget for aspell ordbog. Dette skal ligne 'da' eller 'fr' . .<br>Hvis denne værdi ikke er angivet, vil NLS- miljøet blive brugt til at beregne den, som normalt virker. o få en idé om, hvad der er installeret på dit system, type 'aspell config' og lede efter . på filer inde i 'data-dir' mappe. Database directory name Databasens mappenavn The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Navnet på en mappe hvor indekset<br>En ikke-absolut sti skal gemmes i forhold til konfigurationsmappen. Standard er 'xapiandb'. Use system's 'file' command Brug system's 'fil' kommando Use the system's 'file' command if internal<br>mime type identification fails. Brug systemet's 'fil' kommando hvis intern<br>mime type identifikation mislykkes. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Deaktiver brug af aspell til at generere stavnings-tilnærmelse i værktøj for søgning efter ord. <br> Nyttigt hvis aspell er fraværende eller ikke virker. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Sproget for aspell ordbog. Det skal se ud som "en" eller "fr" ...<br>Hvis denne værdi ikke er angivet, så vil NLS omgivelser blive brugt til at finde det, det fungerer normalt. For at få en idé om, hvad der er installeret på dit system, kan du skrive 'aspell konfig "og se efter .dat filer inde i 'data-dir' mappen. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Navnet på en mappe hvor du vil gemme indekset<br>En relativ sti er taget i forhold til konfigurationsmappen. Standard er "xapiandb. Unac exceptions Unac-undtagelser <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Disse er undtagelser fra unac mekanismen, der, som standard, fjerner alle diakritiske tegn, og udfører kanonisk nedbrydning. Du kan tilsidesætte fjernelse af accent for nogle tegn, afhængigt af dit sprog, og angive yderligere nedbrydninger, f.eks. for ligaturer. I hver indgang adskilt af mellemrum, er det første tegn kildedelen, og resten er oversættelsen. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Disse er stinavne på mapper som indeksering ikke vil komme ind.<br>Sti elementer kan indeholde jokerkort. Indgangene skal matche stierne set af indekseringen (f.eks. hvis topdirs omfatter '/home/me' og '/home' er faktisk et link til '/usr/home', en korrekt sprunget ind i stien ville være '/home/me/tmp*', ikke '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Maks. diskbelægning (%, 0 betyder ingen grænse) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Dette er procentdelen af diskforbrug - samlet diskforbrug, ikke indeksstørrelse - hvor indeksering vil mislykkes og stoppe.<br>Standardværdien på 0 fjerner enhver grænse. uiPrefsDialogBase User preferences Brugerindstillinger User interface brugergrænseflade Number of entries in a result page Antal indgange i en resultatside If checked, results with the same content under different names will only be shown once. Afkryds forårsager, at resultater med samme indhold under forskellige navne kun bliver rapporteret en gang. Hide duplicate results. Skjul identiske resultater. Highlight color for query terms Farve for fremhævning af søgeord Result list font Skrifttype for resultatliste Opens a dialog to select the result list font Åbner et vindue til at vælge resultatlistens skrifttype Helvetica-10 Helvetica-10 Resets the result list font to the system default Nulstiller resultatlistens skrifttype til systemets standard Reset Nulstil Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Definerer formatet for hvert resultat liste afsnit. Brug qt html format og printf-lignende erstatninger:<br>%A Resumé<br> %D Dato<br> %I Ikon billede navn<br> %K Søgeord (hvis nogen)<br> %L Forhåndsvisning og Rediger links<br> %M Mime type<br> %N Resultat nummer<br> %R Relevans procentdel<br> %S Størrelsesinformation<br> %T Afsnit<br> %U Url<br> Result paragraph<br>format string Resultat afsnit<br>format streng Texts over this size will not be highlighted in preview (too slow). Tekster over denne størrelse vil ikke blive fremhævet i forhåndsvisning (for langsom). Maximum text size highlighted for preview (megabytes) Maksimal tekststørrelse der fremhæves for forhåndsvisning (megabyte) Use desktop preferences to choose document editor. Brug desktop-præferencer til at vælge dokument-editor. Choose editor applications Vælg redigeringsprogrammer Display category filter as toolbar instead of button panel (needs restart). Vis kategorifilter som værktøjslinje i stedet for knappanelet (kræver genstart). Auto-start simple search on whitespace entry. Autostart simpel søgning ved blanktegn. Start with advanced search dialog open. Start med åbent avanceret søgevindue. Start with sort dialog open. Start med sorteringsdialog åben. Remember sort activation state. Husk sorteringens aktiveringstilstand. Prefer Html to plain text for preview. Foretræk Html til almindelig tekst for forhåndsvisning. Search parameters Søgeparametre Stemming language Ordstammer for sprog A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. En søgning efter [Rullende Sten] (2 ord) vil blive ændret til [rullende eller sten eller (rullende frase 2 sten)]. Dette skulle give højere forrang til resultaterne, hvor søgeordene vises nøjagtigt som angivet. Automatically add phrase to simple searches Tilføj automatisk frase til simple søgninger Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Skal vi forsøge at lave sammendrag af indgange til resultatliste ved at bruge sammenhænget med forespørgselsordene? Kan være langsomt for store dokumenter. Dynamically build abstracts Lav dynamisk sammendrag Do we synthetize an abstract even if the document seemed to have one? Skal vi sammenfatte et sammendrag, selvom dokumentet synes at have et? Replace abstracts from documents Erstat sammendrag fra dokumenter Synthetic abstract size (characters) Størrelse på det genererede sammendrag (tegn) Synthetic abstract context words Sammenhængende ord for det genererede sammendrag The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Ordene på listen bliver automatisk vendt til ext: xxx sætninger i forespørgselssprogets indgang. Query language magic file name suffixes. Forespørgselssprogets magiske filnavnendelser. Enable Aktiver External Indexes Eksterne Indekser Toggle selected Skift det valgte Activate All Aktiver alle Deactivate All Deaktiver alle Remove from list. This has no effect on the disk index. Fjern fra listen. Dette har ingen virkning på indeks på disken. Remove selected Fjern valgte Click to add another index directory to the list Klik for at tilføje en anden indeksmappe til listen Add index Tilføj index Apply changes Anvend ændringer &OK &Ok Discard changes Kassere ændringer &Cancel &Annuller Abstract snippet separator Separator mellem sammendragets tekststumper Use <PRE> tags instead of <BR>to display plain text as html. Brug <PRE> tags i stedet for <BR>til at vise almindelig tekst som html. Lines in PRE text are not folded. Using BR loses indentation. Linjer i PRE tekst er ikke foldet. Brug BR taber indrykning. Style sheet Stilark Opens a dialog to select the style sheet file Åbn et vindue for at vælge stilark-filen Choose Vælg Resets the style sheet to default Nulstil stilark til standard Lines in PRE text are not folded. Using BR loses some indentation. Linjer i PRE tekst er ikke foldet. Brug BR taber noget indrykning. Use <PRE> tags instead of <BR>to display plain text as html in preview. Brug <PRE> tags i stedet for <BR>til at vise almindelig tekst som html i forhåndsvisning. Result List Resultatliste Edit result paragraph format string Rediger formatstreng for resultatafsnit Edit result page html header insert Rediger kode for indsætnig i html-hoved for resultatside Date format (strftime(3)) Datoformat (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Hyppighedens procentvise tærskel, hvorover vi ikke bruger ord inde i autofrase. Hyppige ord er et stort problem for ydeevnen med fraser. Udeladte ord forøger frase stilstand, og reducere effektiviteten af autofrase. Standardværdien er 2 (procent). Autophrase term frequency threshold percentage Tærskelprocentsats for ordhyppighed ved autofrase Plain text to HTML line style Almindelig tekst til HTML linjetype Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Linjer i PRE tekst ombrydes ikke. Brug af BR mister en del indrykning. PRE + Wrap stil kunne være, hvad du ønsker. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + wrap Exceptions Undtagelser Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Mime typer, der ikke bør sendes til xdg-open selv når "Brug desktop præferencer" er indstillet.<br> Nyttigt at videregive sidetal og søgestrengsmuligheder til, f.eks. evince. Disable Qt autocompletion in search entry. Deaktiver Qt autofuldførelse i søgeindgange. Search as you type. Søg mens du skriver. Paths translations Oversættelser af stier Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Klik for at tilføje endnu en indeksmappe til listen. Du kan vælge enten en Recoll konfigurationsmappe eller et Xapianindeks. Snippets window CSS file CSS-fil for vindue til tekststumper Opens a dialog to select the Snippets window CSS style sheet file Åbner et vindue til at vælge CSS stilark-fil for vinduet til tekststumper Resets the Snippets window style Nulstil stilen for vinduet til tekststumper Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Bestemmer om dokumentfiltre er vist som radioknapper, værktøjslinje kombinationsfelt eller menu. Document filter choice style: Valgmetode for dokumentfilter: Buttons Panel Panel med knapper Toolbar Combobox værktøjslinje kombinationsfelt Menu Menu Show system tray icon. Vis statusikon. Close to tray instead of exiting. Luk til systembakke i stedet for at afslutte. Start with simple search mode Start med enkel søgetilstand Show warning when opening temporary file. Vis advarsel, når der åbnes en midlertidig fil. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Brugerstil der skal anvendes på vinduet til tekststumper.<br>Bemærk: Det færdige sidehoved-indstik er også inkluderet i tekststumper-vinduets hoved. Synonyms file Synonymer-fil Highlight CSS style for query terms Fremhæv CSS stil for forespørgeord Recoll - User Preferences Rekoll - Brugerindstillinger Set path translations for the selected index or for the main one if no selection exists. Angiv stioversættelser for det valgte indeks eller for det vigtigste, hvis der ikke findes et valg. Activate links in preview. Aktiver links i forhåndsvisning. Make links inside the preview window clickable, and start an external browser when they are clicked. Gør links inde i preview vinduet klikbare, og starte en ekstern browser, når de klikkes. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Forespørgsel vilkår fremhæve i resultater. <br>Måske prøve noget som "color:red;background:gul" for noget mere livligt end standard blå... Start search on completer popup activation. Start søgning ved fuldføre popup aktivering. Maximum number of snippets displayed in the snippets window Maksimalt antal snippets der vises i snippets vinduet Sort snippets by page number (default: by weight). Sorter snippets efter sidenummer (standard: efter vægt). Suppress all beeps. Undertryk alle bipper. Application Qt style sheet Programmets Qt- stilark Limit the size of the search history. Use 0 to disable, -1 for unlimited. Begræns størrelsen af søgehistorikken. Brug 0 til at deaktivere, - 1 for ubegrænset. Maximum size of search history (0: disable, -1: unlimited): Maksimal størrelse på søgehistorik (0: deaktiveret, -1: ubegrænset): Generate desktop notifications. Generer skrivebordsnotifikationer. Misc Diverse Work around QTBUG-78923 by inserting space before anchor text Arbejd omkring QTBUG-78923 ved at indsætte plads før ankertekst Display a Snippets link even if the document has no pages (needs restart). Vis et stumper link, selvom dokumentet ikke har nogen sider (kræver genstart). Maximum text size highlighted for preview (kilobytes) Maksimal tekststørrelse fremhævet for forhåndsvisning (kilobytes) Start with simple search mode: Start med enkel søgetilstand: Hide toolbars. Skjul værktøjslinjer. Hide status bar. Skjul statusbjælke. Hide Clear and Search buttons. Skjul Ryd og Søg knapper. Hide menu bar (show button instead). Skjul menulinjen (vis knap i stedet). Hide simple search type (show in menu only). Skjul simpel søgetype (kun i menuen). Shortcuts Genveje Hide result table header. Skjul resultattabel header. Show result table row headers. Vis rækkeoverskrifter i resultattabellen. Reset shortcuts defaults Nulstil genveje standarder Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Deaktivér genvejene Ctrl+[0-9]/[a-z] for at hoppe til tabelrækker. Use F1 to access the manual Brug F1 til at få adgang til manualen Hide some user interface elements. Skjul nogle brugergrænsefladeelementer. Hide: Skjul: Toolbars Værktøjslinjer Status bar Statuslinje Show button instead. Vis knap i stedet. Menu bar Menu bjælke Show choice in menu only. Vis valgmulighed kun i menuen. Simple search type Simpel søgetype Clear/Search buttons Ryd/Søg knapper Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Deaktiver genvejene Ctrl+[0-9]/Shift+[a-z] for at hoppe til tabelrækker. None (default) Ingen (standard) Uses the default dark mode style sheet Bruger standard mørk tilstand stylesheet Dark mode Mørk tilstand Choose QSS File Vælg QSS-fil To display document text instead of metadata in result table detail area, use: For at vise dokumenttekst i stedet for metadata i detaljeområdet i resultat-tabellen, skal du bruge: left mouse click venstre museklik Shift+click Skift+klik Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Åbner en dialogboks for at vælge stylesheet-filen.<br>Se på /usr/share/recoll/examples/recoll[-dark].qss for et eksempel. Result Table Resultattabel Do not display metadata when hovering over rows. Vis ikke metadata, når du holder musen over rækkerne. Work around Tamil QTBUG-78923 by inserting space before anchor text Arbejd omkring Tamil QTBUG-78923 ved at indsætte mellemrum før anker tekst. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Fejlen får mærkelige cirkeltegn til at blive vist inde i markerede tamilske ord. Løsningen indsætter et ekstra mellemrumstegn, som ser ud til at løse problemet. Depth of side filter directory tree Dybde af sidefiltermappenavigationsstruktur Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Zoomfaktor for brugergrænsefladen. Nyttig, hvis standardindstillingen ikke er korrekt til din skærmopløsning. Display scale (default 1.0): Vis skala (standard 1.0): Automatic spelling approximation. Automatisk stavekontrol. Max spelling distance Maksimal staveafstand Add common spelling approximations for rare terms. Tilføj almindelige staveapproksimationer for sjældne termer. Maximum number of history entries in completer list Maksimalt antal historikposter i udfyldningslisten Number of history entries in completer: Antal af historikindgange i auto-fuldførelsen: Displays the total number of occurences of the term in the index Viser det samlede antal forekomster af udtrykket i indekset. Show hit counts in completer popup. Vis antal hits i auto-fuldførelses-popup'en. Prefer HTML to plain text for preview. Foretræk HTML frem for almindelig tekst til forhåndsvisning. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Se Qt QDateTimeEdit-dokumentationen. F.eks. yyyy-MM-dd. Efterlad tom for at bruge standard Qt/System-formatet. Side filter dates format (change needs restart) Side filter datoformat (ændring kræver genstart) If set, starting a new instance on the same index will raise an existing one. Hvis indstillet, vil start af en ny instans på samme indeks hæve en eksisterende. Single application Enkelt applikation Set to 0 to disable and speed up startup by avoiding tree computation. Sæt til 0 for at deaktivere og fremskynde opstart ved at undgå træberegning. The completion only changes the entry when activated. Udfyldelsen ændrer kun posten, når den aktiveres. Completion: no automatic line editing. Udførelse: ingen automatisk linje redigering. Interface language (needs restart): Grænsefladesprog (kræver genstart): Note: most translations are incomplete. Leave empty to use the system environment. Bemærk: De fleste oversættelser er ufuldstændige. Efterlad tom for at bruge systemmiljøet. Preview Forhåndsvisning Set to 0 to disable details/summary feature Sæt til 0 for at deaktivere detaljer/oversigt funktionen. Fields display: max field length before using summary: Felter vises: maksimalt feltlængde før brug af resumé: Number of lines to be shown over a search term found by preview search. Antal linjer, der skal vises over et søgeudtryk fundet ved forhåndsvisningssøgning. Search term line offset: Søgeterm linje offset: Wild card characters *?[] will processed as punctuation instead of being expanded Vilde korttegn *?[] vil blive behandlet som tegnsætning i stedet for at blive udvidet. Ignore wild card characters in ALL terms and ANY terms modes Ignorer jokertegn i ALLE vilkår og HVILKE SOM HELST vilkår tilstande Color scheme Farveskema When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Når du viser HTML i mørk tilstand, skal du forsøge at bruge en mørk baggrund (og lys farve). Dette er i konflikt med mange dokumenter, der vil tilsidesætte vores lyse indstilling med deres eget CSS (mørke) forgrundsfarve, hvilket resulterer i et ulæseligt dokument, så det er slået fra som standard. Use dark background when displaying HTML in dark mode. Brug mørk baggrund, når du viser HTML i mørk tilstand. recoll-1.43.12/qtgui/i18n/recoll_pl.ts0000644000175000017500000074622115124431112016705 0ustar dockesdockes ActSearchDLG Menu search Wyszukiwanie w menu AdvSearch All clauses Każdy warunek Any clause Któryś warunek texts teksty spreadsheets arkusze kalkulacyjne presentations prezentacje media multimedia messages wiadomości other pozostałe Bad multiplier suffix in size filter Błędna jednostka we filtrze rozmiaru text tekstowe spreadsheet arkusze presentation prezentacje message wiadomości Advanced Search Zaawansowane szukanie History Next Następna historia History Prev Poprzednia historia Load next stored search Załaduj następne wyszukiwanie Load previous stored search Załaduj poprzednie wyszukiwanie AdvSearchBase Advanced search Dokładne szukanie Restrict file types Określ typ pliku Save as default Zapamiętaj wybrane typy Searched file types Przeszukaj plik All ----> Wszystkie ----> Sel -----> Zaznaczone -----> <----- Sel <----- Zaznaczone <----- All <----- Wszystkie Ignored file types Pomiń pliki Enter top directory for search Podaj szczyt katalogu szukania Browse Przeglądaj Restrict results to files in subtree: Tylko pliki LEŻĄCE W katalogu: Start Search Szukaj Search for <br>documents<br>satisfying: Wyszukaj <br>dokumentów<br>spełniających następujące warunki: Delete clause Usuń warunek Add clause Dodaj warunek Check this to enable filtering on file types Zaznacz, by określić typ pliku By categories Jako kategoria Check this to use file categories instead of raw mime types Zaznacz, by użyć kategorii Close Zamknij All non empty fields on the right will be combined with AND ("All clauses" choice) or OR ("Any clause" choice) conjunctions. <br>"Any" "All" and "None" field types can accept a mix of simple words, and phrases enclosed in double quotes.<br>Fields with no data are ignored. Wszystkie niepuste pola po prawej stronie będą połączone z A ("Wszystkie klauzule" wybór) lub OR ("Każda klauzula" wybór). <br>"Jakiekolwiek" "Wszystkie" i "Żadne typy pól" nie mogą zaakceptować kombinacji prostych słów, oraz wyrazy zawarte w kwotach podwójnych.<br>Pola bez danych są ignorowane. Invert LEŻĄCE POZA Minimum size. You can use k/K,m/M,g/G as multipliers Dopuszczalne jednostki: k/K, m/M, g/G Min. Size Większy od: Maximum size. You can use k/K,m/M,g/G as multipliers Dopuszczalne jednostki: k/K, m/M, g/G Max. Size Mniejszy od: Select Wybierz Filter Filtry From Po: To Przed: Check this to enable filtering on dates Zaznacz, by określić datę Filter dates Po dacie Find Znajdź Check this to enable filtering on sizes Zaznacz, by określić rozmiar Filter sizes Po rozmiarze Filter birth dates Filtruj daty urodzenia ConfIndexW Can't write configuration file Nie można pisać w pliku konfiguracji Global parameters Parametry globalne Local parameters Parametry lokalne Search parameters Parametry szukania Top directories Szczytowe katalogi The list of directories where recursive indexing starts. Default: your home. Lista katalogów rekursywnego indeksowania. Domyślnie: Twój katalog domowy. Skipped paths Wykluczone ścieżki These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Są to nazwy ścieżek katalogów, których indeksowanie nie wprowadzi.<br>Elementy ścieżki mogą zawierać karty wieloznaczne. Wpisy muszą odpowiadać ścieżkom obserwowanym przez indeksatora (np. jeśli topdirs zawiera '/home/me' i '/home' jest w rzeczywistości linkiem do '/usr/home', poprawny wpis ścieżki pominiętej będzie '/home/me/tmp*', nie '/usr/home/me/tmp*') Stemming languages Reguły ciosania (ang. stemming languages) The languages for which stemming expansion<br>dictionaries will be built. Języki, dla których zostaną zbudowane dodatkowe<br>słowniki. Log file name Nazwa pliku dziennika (logs) The file where the messages will be written.<br>Use 'stderr' for terminal output Plik w którym będą zapisywane wiadomości.<br>Użyj 'stderr' dla terminali wyjściowych Log verbosity level Poziom stężenia komunikatu This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Ta wartość dostosowuje ilość wiadomości,<br>od tylko błędów do wielu danych debugowania. Index flush megabytes interval Interwał (megabajty) opróżniania indeksowania This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Ta wartość dostosowuje ilość danych, które są indeksowane między spłukiwaniami na dysku.<br>Pomaga to kontrolować użycie pamięci indeksatora. Domyślnie 10MB This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Jest to procent wykorzystania dysku - całkowite użycie dysku, a nie rozmiar indeksu - przy którym indeksowanie nie będzie udane i zatrzymane.<br>The default value of 0 removes any limit. No aspell usage Brak użycia Aspell Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Wyłącza używanie aspektu do generowania przybliżenia pisowni w narzędziu eksploratora terminu.<br> Przydatne jeśli aspekt jest nieobecny lub nie działa. Aspell language Język Aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Język słownika aspektu powinien wyglądać jak 'en' lub 'fr' . .<br>Jeśli ta wartość nie jest ustawiona, środowisko NLS zostanie użyte do jej obliczenia, co zwykle działa. Aby dowiedzieć się, co jest zainstalowane w systemie, wpisz 'aspell config' i szukaj . w plikach w katalogu 'data-dir'. Database directory name Nazwa katalogu bazy danych The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Nazwa katalogu, w którym ma być przechowywany indeks<br>Ścieżka niebezwzględna jest przyjmowana w stosunku do katalogu konfiguracyjnego. Domyślnym jest 'xapiandb'. Unac exceptions Wyjątki niezwiązane <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Są to wyjątki od mechanizmu unac, który domyślnie usuwa wszystkie diakrytyki i wykonuje dekompozycję kanoniczną. Możesz nadpisać nieakcentowanie niektórych znaków, w zależności od języka i określić dodatkowe rozkłady znaków. . dla ligatur. W każdym oddzielonym spacją wpis pierwszy znak jest jednym źródłowym, a reszta jest tłumaczeniem. Process the WEB history queue Przejdź do kolejki historii web Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Włącza indeksowanie odwiedzonych stron Firefoksu.<br>(musisz również zainstalować wtyczkę Firefoksa Recoll) Web page store directory name Nazwa katalogu dla trzymania stron web The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Nazwa katalogu, w którym można przechowywać kopie odwiedzanych stron internetowych.<br>Ścieżka nie jest bezwzględna w stosunku do katalogu konfiguracyjnego. Max. size for the web store (MB) Maks. rozmiar dla schowka webowego (MB) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Wpisy zostaną poddane recyklingowi po osiągnięciu rozmiaru.<br>Tylko zwiększenie rozmiaru ma sens, ponieważ zmniejszenie wartości nie spowoduje obcięcia istniejącego pliku (tylko miejsce na odpadach). Automatic diacritics sensitivity Automatyczna czułość na diakrytyki <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatyczne wyzwalanie wrażliwości diakrytycznej jeśli wyszukiwane hasło ma znaki akcentowane (nie w unac_except_trans). W innym przypadku musisz użyć języka zapytania i modyfikatora <i>D</i> , aby określić czułość diakrytyczną. Automatic character case sensitivity Automatyczna czułość wielkości znaków <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatyczne wyzwalanie czułości liter, jeśli wpis ma wielkie litery w jednej z pozycji oprócz pierwszej pozycji. W innym przypadku musisz użyć języka zapytania i modyfikatora <i>C</i> , aby określić wielkość liter. Maximum term expansion count Maksymalna liczba rozszerzeń terminu <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximum expansion count for a single term (np.: when use wildcards). Wartość domyślna 10 000 jest rozsądna i pozwoli uniknąć zapytań, które pojawiają się w stanie zamrożonym, gdy silnik porusza się na liście terminów. Maximum Xapian clauses count Maksymalna liczba klauzuli Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Struktura danych sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sdd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sdd W niektórych przypadkach wynik czasowej ekspansji może być mnożnikowy i chcemy uniknąć wykorzystywania nadmiernej pamięci. Domyślna wartość 100 000 powinna być w większości przypadków wystarczająco wysoka i kompatybilna z aktualnymi typowymi konfiguracjami sprzętu. The languages for which stemming expansion dictionaries will be built.<br>See the Xapian stemmer documentation for possible values. E.g. english, french, german... Języki, dla których będą budowane niestandardowe słowniki.<br>Zobacz dokumentację Xapian stemmer, aby uzyskać możliwe wartości. Np. english, french, german... The language for the aspell dictionary. The values are are 2-letter language codes, e.g. 'en', 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Językiem słownika aspektu są 2-literowe kody językowe, np. 'en', 'fr' . .<br>Jeśli ta wartość nie jest ustawiona, środowisko NLS zostanie użyte do jej obliczenia, co zwykle działa. Aby dowiedzieć się, co jest zainstalowane w systemie, wpisz 'aspell config' i szukaj . w plikach w katalogu 'data-dir'. Indexer log file name Nazwa pliku dziennika indeksu If empty, the above log file name value will be used. It may useful to have a separate log for diagnostic purposes because the common log will be erased when<br>the GUI starts up. Jeśli puste, użyta zostanie powyższa nazwa pliku dziennika. Użyteczne może być posiadanie osobnego dziennika do celów diagnostycznych, ponieważ wspólny dziennik zostanie usunięty po uruchomieniu<br>interfejsu graficznego. Disk full threshold percentage at which we stop indexing<br>E.g. 90% to stop at 90% full, 0 or 100 means no limit) Procent pełnego progu dysku, przy którym przestajemy indeksować<br>Np. 90% aby zatrzymać się na 90% pełnym, 0 lub 100 oznacza brak limitu) Web history Historia sieci Process the Web history queue Przetwórz kolejkę historii przeglądania internetu. (by default, aspell suggests mispellings when a query has no results). (domyslnie, aspell sugeruje bledy ortograficzne, gdy zapytanie nie zwraca wynikow). Page recycle interval Interwał odświeżania strony <p>By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ('day', 'week', 'month', 'year'). Note that increasing the interval will not erase existing entries. Domyślnie w pamięci podręcznej przechowywana jest tylko jedna instancja adresu URL. Można to zmienić, ustawiając wartość określającą, jak często przechowujemy wiele instancji ('dzień', 'tydzień', 'miesiąc', 'rok'). Należy pamiętać, że zwiększenie interwału nie spowoduje usunięcia istniejących wpisów. Note: old pages will be erased to make space for new ones when the maximum size is reached. Current size: %1 Uwaga: stare strony zostaną usunięte, aby zrobić miejsce dla nowych, gdy osiągnięty zostanie maksymalny rozmiar. Obecny rozmiar: %1 Start folders Rozpocznij foldery The list of folders/directories to be indexed. Sub-folders will be recursively processed. Default: your home. Lista folderów/katalogów do zindeksowania. Podfoldery będą przetwarzane rekurencyjnie. Domyślnie: twój folder domowy. Disk full threshold percentage at which we stop indexing<br>(E.g. 90 to stop at 90% full, 0 or 100 means no limit) Procentowy próg pełnego dysku, przy którym przestajemy indeksować (np. 90, aby zatrzymać się przy 90% pełności, 0 lub 100 oznacza brak limitu) Browser add-on download folder Folder pobierania dodatków do przeglądarki Only set this if you set the "Downloads subdirectory" parameter in the Web browser add-on settings. <br>In this case, it should be the full path to the directory (e.g. /home/[me]/Downloads/my-subdir) Tylko ustaw to, jeśli ustawiłeś parametr "Podkatalog pobierania" w ustawieniach dodatku przeglądarki internetowej. <br>W tym przypadku powinna to być pełna ścieżka do katalogu (np. /home/[me]/Downloads/my-subdir) Store some GUI parameters locally to the index Zapisz lokalnie niektóre parametry interfejsu GUI do indeksu. <p>GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index Ustawienia interfejsu GUI są zazwyczaj przechowywane w pliku globalnym, który jest ważny dla wszystkich indeksów. Ustawienie tego parametru spowoduje, że niektóre ustawienia, takie jak konfiguracja tabeli wyników, będą specyficzne dla danego indeksu. Suspend the real time indexer when running on battery Wstrzymaj indeksowanie w czasie rzeczywistym podczas pracy na baterii. The indexer will wait for a return on AC and reexec itself when it happens Indeksator będzie czekał na zwrot na AC i ponownie uruchomi się, gdy to nastąpi. The list of folders/directories to be indexed, recursively with their sub-folders.<br>The '~' character expands to your home directory, which is the default initial value. Lista folderów/katalogów do zindeksowania, rekurencyjnie wraz z ich podfolderami.<br>Znak '~' rozszerza się do katalogu domowego, który jest domyślną wartością początkową. (by default, aspell suggests mispellings when a query has no results). Database directory The name or path for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. ConfSubPanelW Only mime types Tylko typy mime An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Lista ekskluzywnych typów indeksowanych mime.<br>Nic innego nie zostanie zindeksowane. Zwykle puste i nieaktywne Exclude mime types Wyklucz typy mime Mime types not to be indexed Typy Mime nie mają być indeksowane Max. compressed file size (KB) Maks. rozmiar skompresowanego pliku (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Wartość progowa od której skompresowane pliki przestają być przetwarzane. Brak limitu to -1, 0 wyłącza przetwarzanie plików skompresowanych. Max. text file size (MB) Maks. rozmiar plików tekstowych (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Wartość progowa po której pliki tekstowe przestają być przetwarzane. Brak limitu to -1. Używaj do wykluczenia gigantycznych plików dziennika systemowego (logs). Text file page size (KB) Rozmiar strony pliku tekstowego (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Indeksując dzieli plik tekstowy na podane kawałki (jeśli różne od -1). Pomocne przy szukaniu w wielkich plikach (np.: dzienniki systemowe). Max. filter exec. time (s) Maks. czas wykonania filtra (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Przerywa po tym czasie zewnętrzne filtrowanie. Dla rzadkich przypadków (np.: postscript) kiedy dokument może spowodować zapętlenie filtrowania. Brak limitu to -1. Global Globalnie ConfigSwitchDLG Switch to other configuration Przełącz na inną konfigurację. ConfigSwitchW Choose other Wybierz inne. Choose configuration directory Wybierz katalog konfiguracyjny CronToolW Cron Dialog Ustaw cykl (CRON) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indeksuj cyklicznie (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Każde pole może zawierać wieloznacznik (*), pojdyńczą wartość, listę po przecinku (1,3,5) oraz zakres (1-7). Tak samo<span style=" font-style:italic;">jak</span>gdyby to był plik Crontab. Dlatego możliwe jest użycie składni Crontab. (zobacz crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Przykładowo wpisując <span style=" font-family:'Courier New,courier';">*</span> w <span style=" font-style:italic;">"Dni tygodnia", </span><span style=" font-family:'Courier New,courier';">12,19</span> w <span style=" font-style:italic;">"Godziny"</span> oraz <span style=" font-family:'Courier New,courier';">15</span> w <span style=" font-style:italic;">"Minuty"</span> uruchomili byśmy indeksowanie (recollindex) każdego dnia o 00:15 oraz 19:15</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Indeksowanie cykliczne (nawet te bardzo częste) jest mniej efektowne niż indeksowanie w czasie rzeczywistym.</p></body></html> Days of week (* or 0-7, 0 or 7 is Sunday) Dni tygodnia (* or 0-7, 0 lub 7 to Niedziela) Hours (* or 0-23) Godziny (* lub 0-23) Minutes (0-59) Minuty (0-59) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Kliknij <span style=" font-style:italic;">Wyłącz</span>, aby zatrzymać automatyczne indeksowanie. <span style=" font-style:italic;">Włącz</span>, aby je rozpocząć. <span style=" font-style:italic;">Anuluj</span>, aby utrzymać obecny stan.</p></body></html> Enable Włącz Disable Wyłącz It seems that manually edited entries exist for recollindex, cannot edit crontab Nie można zmienić crontab. Wygląda na to, że istnieją ręczne wpisy dla recollindex. Error installing cron entry. Bad syntax in fields ? Błąd przy rejestrowaniu cyklu. Błędna składnia w polach? EditDialog Dialog Okno dialogowe EditTrans Source path Ścieżka źródłowa Local path Ścieżka lokalna Config error Błąd konfiguracji Original path Ścieżka oryginalna Path in index Ścieżka w indeksie Translated path Przetłumaczona ścieżka EditTransBase Path Translations Ścieżka tłumaczenia Setting path translations for Ustawienie ścieżki translacji dla Select one or several file types, then use the controls in the frame below to change how they are processed Wybierz jeden lub kilka typów pliku, następnie wskaż w ramce poniżej jak mają zostać przetworzone Add Dodaj Delete Usuń Cancel Anuluj Save Zapisz FirstIdxDialog First indexing setup Początkowa konfiguracja indeksowania <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">It appears that the index for this configuration does not exist.</span><br /><br />If you just want to index your home directory with a set of reasonable defaults, press the <span style=" font-style:italic;">Start indexing now</span> button. You will be able to adjust the details later. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you want more control, use the following links to adjust the indexing configuration and schedule.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These tools can be accessed later from the <span style=" font-style:italic;">Preferences</span> menu.</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Indeks dla tej konfiguracji nie istnieje.</span><br /><br />Jeśli tylko chcesz indeksować swój katalog domowy użwyając fabrcznych ustawień, wciśnij przycisk <span style=" font-style:italic;">Rozpocznij indeksowanie </span>. Szczegóły możesz ustawić również później. </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Jeśli chesz mieć większą kontrolę, użyj następujących odnośników w celu konfiguracji indeksowania oraz jego harmonogramu.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">To samo możesz również otrzymać poźniej wybierając <span style=" font-style:italic;">Ustawienia</span> z menu.</p></body></html> Indexing configuration Konfiguracja indeksowania This will let you adjust the directories you want to index, and other parameters like excluded file paths or names, default character sets, etc. Tutaj możesz wybrać katalogi do indeksowania, oraz inne parametry tj. wyłączenie ścieżek plików czy ich nazw, domyślny zestaw znaków, etc. Indexing schedule Harmonogram indeksowania This will let you chose between batch and real-time indexing, and set up an automatic schedule for batch indexing (using cron). Tutaj możesz wybrać między indeksowaniem w kolejce, a indeksowaniem nabierząco, jak i ustaleniem automatycznej kolejki indeksowania (dzięki Cron) Start indexing now Rozpocznij indeksowanie FragButs %1 not found. %1 nie znaleziono. %1: %2 %1: %2 Fragment Buttons Przyciski fragmentów Query Fragments Fragmenty zapytania IdxSchedW Index scheduling setup Konfiguracja harmonogramu indeksowania <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can run permanently, indexing files as they change, or run at discrete intervals. </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reading the manual may help you to decide between these approaches (press F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This tool can help you set up a schedule to automate batch indexing runs, or start real time indexing when you log in (or both, which rarely makes sense). </p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Indeksowanie <span style=" font-weight:600;">Recoll</span> może być uruchomione na stałe (indeksując każdą zmianę) lub w określonych cyklach.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Instrukcja obsługi (EN) może pomóc wybrać rozwiązanie dla Ciebie (wciśnij F1). </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Narzędzie to pomoże Ci zaplanować indeksowanie cykliczne lub wybierzesz indeksowanie "na bieżąco" po zalogowaniu (lub jedno i drugie, co rzadko jest sendowne).</p></body></html> Cron scheduling Planowanie z użyciem Cron The tool will let you decide at what time indexing should run and will install a crontab entry. Tutaj zdecydujesz o jakim czasie indeksowanie ma być uruchamiane (po przez wpis do crontab). Real time indexing start up Uruchom indeksowanie "na bieżąco" Decide if real time indexing will be started when you log in (only for the default index). Pozwala uruchomić indeksowanie po zalogowaniu. ListDialog Dialog Okno dialogowe GroupBox Grupa Main No db directory in configuration Brak katalogu dla bazy danych w konfiguracji Could not open database in Nie można otworzyć bazy danych w . Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed. . Kliknij Anuluj, jeśli chcesz edytować plik konfiguracyjny przed rozpoczęciem indeksowania lub Ok, aby kontynuować. Configuration problem (dynconf Problem z konfiguracją (dynconf "history" file is damaged or un(read)writeable, please check or remove it: Plik "history" jest uszkodzony lub brak możliwości jego odczytu/zapisu, zmień to lub go usuń: "history" file is damaged, please check or remove it: "historia" plik jest uszkodzony, sprawdź lub usuń: Needs "Show system tray icon" to be set in preferences! Wymaga ustawienia opcji "Pokaż ikonę w zasobniku systemowym" w preferencjach! PTransEdit Path in index Ścieżka w indeksie Translated path Przetłumaczona ścieżka Config error Błąd konfiguracji Original path Ścieżka oryginalna Local path Ścieżka lokalna PTransEditBase Path Translations Ścieżka tłumaczenia Select one or several file types, then use the controls in the frame below to change how they are processed Wybierz jeden lub kilka typów pliku, następnie wskaż w ramce poniżej jak mają zostać przetworzone Add Dodaj Delete Usuń Cancel Anuluj Save Zapisz Preview &Search for: &Szukaj: &Next &Następny &Previous &Poprzedni Match &Case Sprawdzaj &wielkość liter Clear Wyczyść Creating preview text Tworzę podgląd tekstu Loading preview text into editor Ładuję podgląd tekstu do edytora Cannot create temporary directory Nie można utworzyć katalogu tymczasowego Cancel Anuluj Close Tab Zamknij kartę Missing helper program: Brak programu usprawniającego: Can't turn doc into internal representation for Nie mogę przemienić dokumentu na władny format Cannot create temporary directory: Nie można utworzyć katalogu tymczasowego: Error while loading file Błąd ładowania pliku Form Formularz Tab 1 Tab 1 Open Otwórz Canceled Anulowane Error loading the document: file missing. Błąd ładowania dokumentu: brak pliku. Error loading the document: no permission. Błąd ładowania dokumentu: brak uprawnień. Error loading: backend not configured. Błąd ładowania: backend nie został skonfigurowany. Error loading the document: other handler error<br>Maybe the application is locking the file ? Błąd ładowania dokumentu: inny błąd obsługi<br>Może aplikacja blokuje plik? Error loading the document: other handler error. Błąd ładowania dokumentu: inny błąd obsługi <br>Attempting to display from stored text. <br>Ustawianie wyświetlania z zapisanego tekstu. Could not fetch stored text Nie można pobrać zapisanego tekstu Previous result document Poprzedni wynik Next result document Następny wynik Preview Window Podgląd okna Close Window Zamknij okno Next doc in tab Następny dokument w karcie Previous doc in tab Poprzedni dokument w zakładce Close tab Zamknij kartę Print tab Print tab Close preview window Zamknij okno podglądu Show next result Pokaż następny wynik Show previous result Pokaż poprzedni wynik Print Drukuj PreviewTextEdit Show fields Pokaż pola Show main text Pokaż tekst główny Print Drukuj Print Current Preview Drukuj obecny podgląd Show image Pokaż obraz Select All Zaznacz wszystko Copy Kopiuj Save document to file Zapisz dokument do pliku Fold lines Zwiń linie Preserve indentation Zachowaj wcięcia Open document Otwórz dokument Reload as Plain Text Przeładuj jako zwykły tekst Reload as HTML Przeładuj jako HTML QObject Global parameters Parametry globalne Local parameters Parametry lokalne <b>Customised subtrees <b>Dostosuj subdrzewa The list of subdirectories in the indexed hierarchy <br>where some parameters need to be redefined. Default: empty. Lista podkatalogów w zindeksowanej hierarchii <br>, gdzie niektóre parametry muszą być ponownie zdefiniowane. Domyślnie: puste. <i>The parameters that follow are set either at the top level, if nothing<br>or an empty line is selected in the listbox above, or for the selected subdirectory.<br>You can add or remove directories by clicking the +/- buttons. <i>Parametry, które następują, są ustawione na najwyższym poziomie, jeśli nic<br>lub pusta linia jest zaznaczona na liście powyżej lub dla wybranego podkatalogu.<br>Możesz dodać lub usunąć katalogi klikając przycisk +/-. Skipped names Wykluczenia These are patterns for file or directory names which should not be indexed. Tutaj ustawiasz reguły wykluczające indeksowanie plików i katalogów. Default character set Domyślny zestaw znaków This is the character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Jest to zestaw znaków używany do odczytu plików, które nie identyfikują zestawu znaków wewnętrznie, na przykład plików czysto tekstowych.<br>The default value is empty and the value of the NLS environnement Follow symbolic links Idź za dowiązaniami symbolicznymi Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Follow symbolic links while indexing. The default is no, to avoid duplicate indexing Indeksując, idź za dowiązaniami symbolicznymi. Domyślnia wartość to NIE, chroni przed zduplikowanymi indeksami. Index all file names Indeksuj wszystkie nazwy plików Index the names of files for which the contents cannot be identified or processed (no or unsupported mime type). Default true Indeksuj nazwy plików dla których zawartość nie może być rozpoznana lub przetworzona (Nie lub nieobsługiwany typ MIME). Domyślnie Tak. Beagle web history Historia sieci Beagle Search parameters Parametry szukania Web history Historia sieci Default<br>character set Domyślny<br>zestaw znaków Character set used for reading files which do not identify the character set internally, for example pure text files.<br>The default value is empty, and the value from the NLS environnement is used. Zestaw znaków używany do czytania plików, które nie identyfikują zestawu znaków wewnętrznie, na przykład plików czystego tekstu.<br>The default value is empty and the value of the NLS environnement Ignored endings Ignorowane zakończenia These are file name endings for files which will be indexed by content only (no MIME type identification attempt, no decompression, no content indexing. Są to zakończenia nazwy pliku dla plików, które będą indeksowane tylko przez zawartość (bez próby identyfikacji typu MIME, bez dekompresji, bez indeksowania zawartości. These are file name endings for files which will be indexed by name only (no MIME type identification attempt, no decompression, no content indexing). Są to zakończenia nazwy pliku dla plików, które będą indeksowane tylko po nazwie (brak próby identyfikacji typu MIME, brak dekompresji, brak indeksowania zawartości). <i>The parameters that follow are set either at the top level, if nothing or an empty line is selected in the listbox above, or for the selected subdirectory. You can add or remove directories by clicking the +/- buttons. <i>Parametry, które następują, są ustawione na najwyższym poziomie, jeśli na liście powyżej zaznaczono nic lub pustą linię lub dla wybranego podkatalogu. Możesz dodać lub usunąć katalogi klikając przycisk +/-. These are patterns for file or directory names which should not be indexed. To są wzorce nazw plików lub katalogów, które nie powinny być indeksowane. QWidget Create or choose save directory Utwórz lub wybierz katalog zapisu Choose exactly one directory Wybierz dokładnie jeden katalog Could not read directory: Nie można odczytać katalogu: Unexpected file name collision, cancelling. Nieoczekiwana kolizja nazwy pliku, anulowanie. Cannot extract document: Nie można wyodrębnić dokumentu: &Preview &Poprzedni &Open &Otwórz Open With Otwórz za pomocą Run Script Uruchom skrypt Copy &File Name &Kopiuj nazwę pliku Copy &URL Kopiuj &URL &Write to File Zapisz &do pliku Save selection to files Zapisz zaznaczenie do pliku Preview P&arent document/folder Podgląd rodzica dokumentu|katalogu &Open Parent document/folder &Otwórz dokument|katalog rodzica Find &similar documents Znajdź &podobne dokumenty Open &Snippets window Otwórz okno &snipetów Show subdocuments / attachments Pokaż poddokumenty|załączniki &Open Parent document Otwórz dokument nadrzędny &Open Parent Folder &Otwórz folder nadrzędny Copy Text Skopiuj tekst Copy &File Path Skopiuj &Ścieżkę Pliku Copy File Name Skopiuj nazwę pliku QxtConfirmationMessage Do not show again. Nie pokazuj ponownie. RTIToolW Real time indexing automatic start Automatyczny start indeksowania w czasie rzeczywistym <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indexing can be set up to run as a daemon, updating the index as files change, in real time. You gain an always up to date index, but system resources are used permanently.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> indeksacja może być uruchomiona w tle (daemon), aktualizując indeks nabierząco. Zyskujesz zawsze aktualny indeks, tracąc część zasobów systemowych.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Start indexing daemon with my desktop session. Uruchom indeksowanie w tle razem ze startem komputera. Also start indexing daemon right now. Dodatkowo natychmiast uruchom indeksowanie w tle. Replacing: Podmiana: Replacing file Podmiana pliku Can't create: Nie mogę utworzyć: Warning Ostrzeżenie Could not execute recollindex Nie można wykonać recollindex Deleting: Usuwanie: Deleting file Usuwanie pliku Removing autostart Usuwanie autostartu Autostart file deleted. Kill current process too ? Usunięto plik autostartu. Zamknąć również bieżący proces? Configuration name Nazwa konfiguracji Short alphanumeric nickname for this config Krótki alfanumeryczny pseudonim dla tej konfiguracji Could not find Nie można znaleźć RclCompleterModel Hits Trafienia Hits RclMain About Recoll Karta Recoll Executing: [ Wykonuję: [ Cannot retrieve document info from database Brak możliwości pobrania informacji o dokumencie z bazy danych Warning Ostrzeżenie Can't create preview window Nie można utworzyć okna podglądu Query results Wynik zapytania Document history Historia dokumentów History data Historia danych Indexing in progress: Indeksowanie w tracie: Files Pliki Purge Wyczyść Stemdb Stemdb Closing Zamykanie Unknown Nieznane This search is not active any more To wyszukanie przestało być aktywne Can't start query: Może't start zapytania: Bad viewer command line for %1: [%2] Please check the mimeconf file Błędna linia poleceń przeglądarki dla %1: [%2] Sprawdź plik mimeconf Cannot extract document or create temporary file Nie można wypakować dokumentu lub stworzyć plik tymczasowy (no stemming) wyłącz ciosanie (ang. stemming) (all languages) (każdy język) error retrieving stemming languages Błąd pobierania "reguł ciosania" (ang. stemming languages) Update &Index Odśwież &Indeks Indexing interrupted Indeksowanie przerwane Stop &Indexing Zatrzymaj &Indeksowanie All Wszystko media multimedia message wiadomości other pozostałe presentation prezentacje spreadsheet arkusze text tekstowe sorted posortowane filtered przefiltrowane External applications/commands needed and not found for indexing your file types: Aplikacje zewnętrzne/polecenia potrzebne i nie znaleziono do indeksowania typów plików: No helpers found missing Wszystkie rozszerzenia znaleziono Missing helper programs Brakujące rozszerzenia Save file dialog Zapisz okno dialogowe Choose a file name to save under Wybierz nazwę pliku do zapisania Document category filter Filtr kategorii dokumentu No external viewer configured for mime type [ Brak skonfigurowanej zewnętrzenej przeglądarki typów MIME [ The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Brak przeglądarki dla typu MIME %1: %2 . Chcesz to ustawić teraz? Can't access file: Nie mogę uzyskać dostępu do pliku: Can't uncompress file: Nie mogę wypakować pliku: Save file Zapisz plik Result count (est.) Liczba wyników (szac.) Query details Szczegóły zapytania Could not open external index. Db not open. Check external index list. Nie mogę otworzyc zewnętrznego indeksu. Nie otwarta baza danych. Sprawdź listę zewnętrznych indeksów. No results found Brak wyników None Nic Updating Odświeżanie Done Zakończone Monitor Sprawdzanie Indexing failed Porażka indeksowania The current indexing process was not started from this interface. Click Ok to kill it anyway, or Cancel to leave it alone Obecny proces indeksowania uruchomiono z innego okna. Kliknij Ok, by zamknąć proces. Erasing index Usuwanie indeksu Reset the index and start from scratch ? Ponownie spisać indeks od zera? Query in progress.<br>Due to limitations of the indexing library,<br>cancelling will exit the program Trwa zapytanie.<br>Ze względu na ograniczenia biblioteki indeksowania,<br>anulowanie zakończy program Error Błąd Index not open Indeks jest zamknięty Index query error Błąd odpytania indeksu Indexed Mime Types Indeksowane typy Mime Content has been indexed for these MIME types: Zawartość została zindeksowana dla tych typów MIME: Index not up to date for this file. Refusing to risk showing the wrong entry. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Indeks nie aktualny dla tego pliku. Odmawiam ryzyka pokazania błędnego wpisu. Kliknij Ok, aby zaktualizować indeks dla tego pliku, a następnie ponownie uruchom zapytanie po zakończeniu indeksowania. Inne, Anuluj. Can't update index: indexer running Nie mogę zaktualizować indeksu: pracujący indekser Indexed MIME Types Zaindeksowane typy MIME Bad viewer command line for %1: [%2] Please check the mimeview file Błędna komenda przeglądarki dla typu %1: [%2] Sprawdź plik widoku MIME Viewer command line for %1 specifies both file and parent file value: unsupported Polecenie czytnika dla %1 podaje zarówno plik jak i wartość pliku rodzica: niewspierane Cannot find parent document Nie można odszukać rodzica dokumentu Indexing did not run yet Indeksowanie nie zostało jeszcze uruchomione External applications/commands needed for your file types and not found, as stored by the last indexing pass in Brak zewnętrznych aplikacji|komend wymaganych przez twoje typy plików. Index not up to date for this file. Refusing to risk showing the wrong entry. Indeks tego pliku jest nieaktualny. Odmawiam podania błędnych wyników. Click Ok to update the index for this file, then re-run the query when indexing is done. Else, Cancel. Kliknij Ok by uaktualnić indeks tego pliku, po zakończeniu ponów zapytanie lub Anuluj. Indexer running so things should improve when it's done Indeksowanie w trakcie, spodziewana poprawa po zakończeniu. Sub-documents and attachments Poddokumenty i załączniki Document filter Filtr dokumentów Index not up to date for this file. Refusing to risk showing the wrong entry. Indeks tego pliku jest nieaktualny. Odmawiam podania błędnych wyników. Click Ok to update the index for this file, then you will need to re-run the query when indexing is done. Kliknij Ok, aby zaktualizować indeks dla tego pliku, a następnie musisz ponownie uruchomić zapytanie po zakończeniu indeksowania. The indexer is running so things should improve when it's done. Indekser jest uruchomiony, więc rzeczy powinny się poprawić, gdy's skończy. The document belongs to an external indexwhich I can't update. Dokument należy do zewnętrznego indeksu, który mogę't aktualizować. Click Cancel to return to the list. Click Ignore to show the preview anyway. Kliknij przycisk Anuluj, aby powrócić do listy. Kliknij przycisk Ignoruj, aby pokazać podgląd. Duplicate documents Duplikaty dokumentów These Urls ( | ipath) share the same content: Te URLe ( | ipath) mają tą samą zawartość: Bad desktop app spec for %1: [%2] Please check the desktop file Błędna specyfikacja aplikacji desktopowej dla %1: [%2] Sprawdź plik pulpitu Bad paths Złe ścieżki Bad paths in configuration file: Błędne ścieżki w pliku konfiguracyjnym: Selection patterns need topdir Wzory selekcji wymagają topdir Selection patterns can only be used with a start directory Wzory wyboru mogą być używane tylko z katalogiem startowym No search Brak wyszukiwania No preserved previous search Nie zachowano poprzedniego wyszukiwania Choose file to save Wybierz plik do zapisania Saved Queries (*.rclq) Zapisane zapytania (*.rclq) Write failed Zapisanie nie powiodło się Could not write to file Nie można zapisać do pliku Read failed Błąd odczytu Could not open file: Nie można otworzyć pliku: Load error Błąd ładowania Could not load saved query Nie można załadować zapisanego zapytania Opening a temporary copy. Edits will be lost if you don't save<br/>them to a permanent location. Otwieranie tymczasowej kopii. Edycje zostaną utracone, jeśli nie't zapisz<br/>w stałej lokalizacji. Do not show this warning next time (use GUI preferences to restore). Nie pokazuj tego ostrzeżenia następnym razem (użyj preferencji GUI, aby przywrócić). Disabled because the real time indexer was not compiled in. Wyłączone, ponieważ indeks czasu rzeczywistego nie został skompilowany. This configuration tool only works for the main index. To narzędzie konfiguracyjne działa tylko dla głównego indeksu. The current indexing process was not started from this interface, can't kill it Bieżący proces indeksowania nie został uruchomiony z tego interfejsu, może't zabić go The document belongs to an external index which I can't update. Dokument należy do indeksu zewnętrznego, który mogę't aktualizować. Click Cancel to return to the list. <br>Click Ignore to show the preview anyway (and remember for this session). Kliknij przycisk Anuluj, aby powrócić do listy. <br>Kliknij przycisk Ignoruj, aby pokazać podgląd i tak (i zapamiętać dla tej sesji). Index scheduling Harmonogram indeksowania Sorry, not available under Windows for now, use the File menu entries to update the index Przepraszamy, obecnie niedostępne w systemie Windows, użyj wpisów menu pliku do aktualizacji indeksu Can't set synonyms file (parse error?) Czy można't ustawić plik synonimów (błąd analizacji?) Index locked Indeks zablokowany Unknown indexer state. Can't access webcache file. Nieznany stan indeksatora. Może't uzyskać dostęp do pliku pamięci podręcznej. Indexer is running. Can't access webcache file. Indekser jest uruchomiony. Może't uzyskać dostęp do pliku pamięci podręcznej. with additional message: z dodatkową wiadomością: Non-fatal indexing message: Wiadomość indeksowania niezakończona zgonem: Types list empty: maybe wait for indexing to progress? Lista typów pusta: może poczekać na indeksowanie do postępu? Viewer command line for %1 specifies parent file but URL is http[s]: unsupported Wiersz poleceń przeglądarki dla %1 określa plik nadrzędny, ale adres URL to http[s]: nieobsługiwany Tools Narzędzia Results Wyniki (%d documents/%d files/%d errors/%d total files) (%d dokumentów/%d plików/%d błędów/%d wszystkich plików) (%d documents/%d files/%d errors) (%d dokumentów/%d plików/%d błędów) Empty or non-existant paths in configuration file. Click Ok to start indexing anyway (absent data will not be purged from the index): Puste lub nieodległe ścieżki w pliku konfiguracyjnym. Kliknij Ok, aby rozpocząć indeksowanie (brak danych nie zostanie wyczyszczony z indeksu): Indexing done Indeksowanie wykonane Can't update index: internal error Można't aktualizować indeks: błąd wewnętrzny Index not up to date for this file.<br> Indeks nie jest aktualny dla tego pliku.<br> <em>Also, it seems that the last index update for the file failed.</em><br/> <em>Wydaje się również, że ostatnia aktualizacja indeksu dla pliku nie powiodła się.</em><br/> Click Ok to try to update the index for this file. You will need to run the query again when indexing is done.<br> Kliknij Ok, aby zaktualizować indeks dla tego pliku. Po zakończeniu indeksowania musisz uruchomić zapytanie ponownie.<br> Click Cancel to return to the list.<br>Click Ignore to show the preview anyway (and remember for this session). There is a risk of showing the wrong entry.<br/> Kliknij przycisk Anuluj, aby powrócić do listy.<br>Kliknij przycisk Ignoruj, aby pokazać podgląd i tak (i zapamiętać dla tej sesji). Istnieje ryzyko pojawienia się złego wpisu.<br/> documents dokumenty document dokument files pliki file plik errors błędy error błąd total files) całkowita ilość plików) No information: initial indexing not yet performed. Brak informacji: nie przeprowadzono jeszcze indeksowania początkowego. Batch scheduling Harmonogram partii The tool will let you decide at what time indexing should run. It uses the Windows task scheduler. Narzędzie pozwoli Ci zdecydować, w jakim czasie powinno działać indeksowanie. Używa harmonogramu zadań Windows. Confirm Potwierdź Erasing simple and advanced search history lists, please click Ok to confirm Usuwanie prostych i zaawansowanych list historii, kliknij Ok, aby potwierdzić Could not open/create file Nie można otworzyć/utworzyć pliku F&ilter &Ulepszony Could not start recollindex (temp file error) Nie można uruchomić recollindex (błąd pliku tymczasowego) Could not read: Nie można odczytać This will replace the current contents of the result list header string and GUI qss file name. Continue ? To zastąpi bieżącą zawartość nagłówka listy wyników i nazwy pliku qss GUI. Kontynuować? You will need to run a query to complete the display change. Aby dokończyć zmianę wyświetlacza, musisz uruchomić zapytanie. Simple search type Prosty typ wyszukiwania Any term Któryś termin All terms Każdy termin File name Nazwa pliku Query language Język zapytań Stemming language Język ciosania Main Window Główne okno Focus to Search Skoncentruj się na wyszukiwaniu Focus to Search, alt. Skoncentruj się na wyszukiwaniu, altro. Clear Search Wyczyść wyszukiwanie Focus to Result Table Skoncentruj się na tabeli wyników Clear search Wyczyść wyszukiwanie Move keyboard focus to search entry Przenieś skupienie klawiatury do wpisu wyszukiwania Move keyboard focus to search, alt. Przenieś ostrość klawiatury do wyszukiwania, alt. Toggle tabular display Przełącz wyświetlanie tabel Move keyboard focus to table Przenieś ostrość klawiatury do tabeli Flushing Oczyszczanie Show menu search dialog Pokaż okno dialogowe wyszukiwania menu. Duplicates Duplikaty Filter directories Filtruj katalogi Main index open error: Błąd otwarcia głównego indeksu: . The index may be corrupted. Maybe try to run xapian-check or rebuild the index ?. Indeks może być uszkodzony. Może spróbuj uruchomić xapian-check lub odbudować indeks? This search is not active anymore Ta wyszukiwarka nie jest już aktywna. Viewer command line for %1 specifies parent file but URL is not file:// : unsupported Wiersz poleceń przeglądarki dla %1 określa plik nadrzędny, ale adres URL nie jest file:// : nieobsługiwane. The viewer specified in mimeview for %1: %2 is not found. Do you want to start the preferences dialog ? Podgląd określony w mimeview dla %1: %2 nie został znaleziony. Czy chcesz uruchomić okno dialogowe preferencji? Show advanced search dialog Pokaż zaawansowane okno wyszukiwania with additional message: RclMainBase Previous page Poprzednia strona Next page Następna strona &File &Plik E&xit &Zakończ &Tools &Narzędzia &Help &Pomoc &Preferences &Ustawienia Search tools Narzędzia wyszukiwania Result list Wyniki &About Recoll &Karta Recoll Document &History &Historia dokumentu Document History Historia Dokumentu &Advanced Search &Zaawansowane szukanie Advanced/complex Search Złożone szukanie &Sort parameters Parametry &sortowania Sort parameters Parametry sortowania Next page of results Następna strona wyników Previous page of results Poprzednia strona wyników &Query configuration &Konfiguracja zapytania &User manual &Instrukcja Recoll Rozbij Ctrl+Q Ctrl + Q Update &index &Aktualizacja indeksu Term &explorer Przejżyj &terminy Term explorer tool Przeglądanie terminów External index dialog Zewnętrzny indeks &Erase document history &Usuń historię dokumentu First page Pierwsza strona Go to first page of results Przejdź do pierwszej strony wyników &Indexing configuration &Konfiguracja indeksowania All Wszystko &Show missing helpers Pokaż &brakujących pomocników PgDown PgDown Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S Shift+Home, Ctrl+S, Ctrl+Q, Ctrl+S PgUp PgUp &Full Screen Pełen &Ekran F11 F11 Full Screen Pełen ekran &Erase search history &Usuń historię szukania sortByDateAsc sortByDateAsc Sort by dates from oldest to newest Sortuj po dacie: od najstarszego sortByDateDesc sortByDateDesc Sort by dates from newest to oldest Sortuj po dacie: od najnowszego Show Query Details Pokaż szczegóły zapytania Show results as table Pokaż wyniki jako tabelę &Rebuild index &Odnów indeks &Show indexed types Pokaż zaindeksowane &typy Shift+PgUp Przesuń+PgUp &Indexing schedule &Plan indeksowania E&xternal index dialog Zewnętrzny indeks &Index configuration &Konfiguracja indeksu &GUI configuration Konfiguracja &GUI &Results &Wyniki Sort by date, oldest first Sortuj po dacie: od najstarszego Sort by date, newest first Sortuj po dacie: od najnowszego Show as table Pokaż jako tabela Show results in a spreadsheet-like table Pokaż wyniki jako arkusz Save as CSV (spreadsheet) file Zapisz jako plik CSV (arkusz) Saves the result into a file which you can load in a spreadsheet Zapisz wyniki do pliku czytelnego przez arkusz Next Page Następna strona Previous Page Poprzednia strona First Page Pierwsza strona Query Fragments Fragmenty zapytania With failed files retrying Z nieudanymi plikami próbnymi Next update will retry previously failed files Następna aktualizacja ponownie spróbuje poprzednio nieudane pliki Save last query Zapisz ostatnie zapytanie Load saved query Załaduj zapisane zapytanie Special Indexing Indeksowanie specjalne Indexing with special options Indeksowanie ze specjalnymi opcjami Indexing &schedule &Indeksowanie harmonogramu Enable synonyms Włącz synonimy &View &Widok Missing &helpers Brakujący &pomocnik Indexed &MIME types Zindeksowane typy &MIME Index &statistics &Statystyki indeksu Webcache Editor Edytor webcache Trigger incremental pass Wyzwalaj przyrostowe przejście E&xport simple search history &Eksportuj prostą historię wyszukiwania Use default dark mode Użyj domyślnego trybu ciemnego Dark mode Tryb ciemny &Query &Zapytanie Increase results text font size Zwiększ rozmiar czcionki wyników tekstu. Increase Font Size Zwiększ rozmiar czcionki Decrease results text font size Zmniejsz rozmiar czcionki wyników tekstu. Decrease Font Size Zmniejsz rozmiar czcionki Start real time indexer Uruchom indeksator czasu rzeczywistego. Query Language Filters Filtry języka zapytań Filter dates Po dacie Assisted complex search Wspomagane złożone wyszukiwanie Filter birth dates Filtruj daty urodzenia Switch Configuration... Konfiguracja przełącznika... Choose another configuration to run on, replacing this process Wybierz inną konfigurację do uruchomienia, zastępując ten proces. &User manual (local, one HTML page) "Instrukcja obsługi (lokalna, jedna strona HTML)" &Online manual (Recoll Web site) "Podręcznik online (strona internetowa Recoll)" Path translations Tłumaczenia ścieżek With failed files retrying RclTrayIcon Restore Przywróć Quit Wyjdź RecollModel Abstract Abstrakcja Author Autor Document size Rozmiar dokumentu Document date Data dokumentu File size Rozmiar pliku File name Nazwa pliku File date Data pliku Ipath IŚcieżka Keywords Słowa klucze Mime type Typ Mime Original character set Oryginalny zestaw znaków Relevancy rating Trafność Title Tytuł URL Adres URL Mtime Czas modyfikacji Date Data Date and time Data i czas MIME type Typ MIME Can't sort by inverse relevance Można't sortować według odwrotnej istotności ResList Result list Lista wyników Unavailable document Dokument niedostępny Previous Poprzedni Next Następny <p><b>No results found</b><br> <p><b>Nie znaleziono żadnych wyników</b><br> &Preview &Poprzedni Copy &URL Kopiuj &URL Find &similar documents Znajdź &podobne dokumenty Query details Szczegóły zapytania (show query) (Pokaż zapytanie) Copy &File Name &Kopiuj nazwę pliku filtered przefiltrowane sorted posortowane Document history Historia dokumentu Preview Poprzedni Open Otwórz <p><i>Alternate spellings (accents suppressed): </i> <p><i>Alternatywne pisownie (akcenty zablokowane): </i> &Write to File Zapisz &do pliku Preview P&arent document/folder Podgląd rodzica dokumentu|katalogu &Open Parent document/folder &Otwórz dokument|katalog rodzica &Open &Otwórz Documents Dokumenty out of at least z co najmniej for dla <p><i>Alternate spellings: </i> <p><i>Alternatywne pisownie: </i> Open &Snippets window Otwórz okno &snipetów Duplicate documents Duplikaty dokumentów These Urls ( | ipath) share the same content: Te URLe ( | ipath) mają tą samą zawartość: Result count (est.) Liczba wyników (oszacowana) Snippets Snipety This spelling guess was added to the search: Ta propozycja pisowni została dodana do wyszukiwania: These spelling guesses were added to the search: Te domyślne poprawki zostały dodane do wyszukiwania: ResTable &Reset sort &Reset sortowania &Delete column &Usuń kolumnę Add " Dodaj " " column " kolumna Save table to CSV file Zapisz tabelę jako plik CSV Can't open/create file: Nie można otworzyć|utworzyć pliku: &Preview &Poprzedni &Open &Otwórz Copy &File Name &Kopiuj nazwę pliku Copy &URL Kopiuj &URL &Write to File Zapisz &do pliku Find &similar documents Znajdź &podobne dokumenty Preview P&arent document/folder Podgląd rodzica dokumentu|katalogu &Open Parent document/folder &Otwórz dokument|katalog rodzica &Save as CSV &Zapisz jako CSV Add "%1" column Dodaj "%1" kolumnę Result Table Tabela wyników Open Otwórz Open and Quit Otwórz i wyjdź Preview Poprzedni Show Snippets Pokaż Snippety Open current result document Otwórz bieżący wynik Open current result and quit Otwórz bieżący wynik i wyjdź Show snippets Pokaż fragmenty Show header Pokaż nagłówek Show vertical header Pokaż pionowy nagłówek Copy current result text to clipboard Skopiuj bieżący wynik do schowka Use Shift+click to display the text instead. Użyj kombinacji klawiszy Shift + kliknięcie, aby wyświetlić tekst. %1 bytes copied to clipboard Skopiowano %1 bajtów do schowka. Copy result text and quit Skopiuj tekst wynikowy i zakończ. ResTableDetailArea &Preview &Poprzedni &Open &Otwórz Copy &File Name &Kopiuj nazwę pliku Copy &URL Kopiuj &URL &Write to File Zapisz &do pliku Find &similar documents Znajdź &podobne dokumenty Preview P&arent document/folder Podgląd rodzica dokumentu|katalogu &Open Parent document/folder &Otwórz dokument|katalog rodzica ResultPopup &Preview &Poprzedni &Open &Otwórz Copy &File Name &Kopiuj nazwę pliku Copy &URL Kopiuj &URL &Write to File Zapisz &do pliku Save selection to files Zapisz zaznaczenie do pliku Preview P&arent document/folder Podgląd rodzica dokumentu|katalogu &Open Parent document/folder &Otwórz dokument|katalog rodzica Find &similar documents Znajdź &podobne dokumenty Open &Snippets window Otwórz okno &snipetów Show subdocuments / attachments Pokaż poddokumenty|załączniki Open With Otwórz za pomocą Run Script Uruchom skrypt SSearch Any term Któryś termin All terms Każdy termin File name Nazwa pliku Completions Ukończenia Select an item: Wybierz element: Too many completions Zbyt wiele uzupełnień Query language Język zapytań Bad query string Błędne zapytanie Out of memory Brak pamięci Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> No actual parentheses allowed.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Wprowadź wyrażenie języka zapytania. Arkusz oszustwa:<br> <i>term1 term2</i> : 'term1' i 'term2' w dowolnym polu.<br> <i>field:term1</i> : 'term1' w polu ''<br> Standardowe nazwy pola/synonimy:<br> tytuł/przedmiot/podpis, autor/od odbiorcy/odbiorcy, nazwa pliku, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date.<br> Dwa interwały dat: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> Nie jest dozwolony żaden rzeczywisty nawias.<br> <i>"term1 term2"</i> : fraza (musi występować dokładnie). Możliwe modyfikatory:<br> <i>"term1 term2"p</i> : niezamówione wyszukiwanie zbliżeniowe z domyślną odległością.<br> Użyj <b>Pokaż link Zapytania</b> w razie wątpliwości co do wyniku i zobacz instrukcję (&<unk> ) 1>), aby uzyskać więcej informacji. Enter file name wildcard expression. Wprowadź wieloznakowe (wildcard) wyrażenie nazwy pliku Enter search terms here. Type ESC SPC for completions of current term. Wprowadź tutaj szkane terminy. Wpisz ESC SPC by uzupełnić bieżący termin. Enter query language expression. Cheat sheet:<br> <i>term1 term2</i> : 'term1' and 'term2' in any field.<br> <i>field:term1</i> : 'term1' in field 'field'.<br> Standard field names/synonyms:<br> title/subject/caption, author/from, recipient/to, filename, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, date, size.<br> Two date interval exemples: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> You can use parentheses to make things clearer.<br> <i>"term1 term2"</i> : phrase (must occur exactly). Possible modifiers:<br> <i>"term1 term2"p</i> : unordered proximity search with default distance.<br> Use <b>Show Query</b> link when in doubt about result and see manual (&lt;F1>) for more detail. Wprowadź wyrażenie języka zapytania. Arkusz oszustwa:<br> <i>term1 term2</i> : 'term1' i 'term2' w dowolnym polu.<br> <i>field:term1</i> : 'term1' w polu ''<br> Standardowe nazwy pola/synonimy:<br> tytuł/przedmiot/podpis, autor/od odbiorcy/odbiorcy, nazwa pliku, ext.<br> Pseudo-fields: dir, mime/format, type/rclcat, data, rozmiar.<br> Dwa interwały daty: 2009-03-01/2009-05-20 2009-03-01/P2M.<br> <i>term1 term2 OR term3</i> : term1 AND (term2 OR term3).<br> Możesz użyć nawiasów, aby sprawy były bardziej przejrzyste.<br> <i>"term1 term2"</i> : fraza (musi występować dokładnie). Możliwe modyfikatory:<br> <i>"term1 term2"p</i> : niezamówione wyszukiwanie zbliżeniowe z domyślną odległością.<br> Użyj <b>Pokaż link Zapytania</b> w razie wątpliwości co do wyniku i zobacz instrukcję (&<unk> ) 1>), aby uzyskać więcej informacji. Stemming languages for stored query: Zapamiętywanie języków dla zapamiętanego zapytania: differ from current preferences (kept) różnią się od aktualnych preferencji (zachowanych) Auto suffixes for stored query: Automatyczne przyrostki dla zapisanego zapytania: External indexes for stored query: Zewnętrzne indeksy dla zapisanego zapytania: Autophrase is set but it was unset for stored query Autofraza jest ustawiona, ale była nieustawiona dla przechowywanych zapytań Autophrase is unset but it was set for stored query Autofraza jest nieustawiona, ale została ustawiona dla przechowywanych zapytań Enter search terms here. Wprowadź wyszukiwane frazy tutaj. <html><head><style> <html><head><style> table, th, td { table, th, td { border: 1px solid black; granica: 1px w postaci litej czarnej; border-collapse: collapse; załamanie granicy: załamanie się; } } th,td { th,td { text-align: center; text-align: center; </style></head><body> </style></head><body> <p>Query language cheat-sheet. In doubt: click <b>Show Query</b>.&nbsp; <p>Zestawienie języka zapytania. W wątpliwości: kliknij <b>Pokaż zapytanie</b>.&nbsp; You should really look at the manual (F1)</p> Naprawdę powinieneś spojrzeć na podręcznik (F1)</p> <table border='1' cellspacing='0'> <table border='1' cellspacing='0'> <tr><th>What</th><th>Examples</th> <tr><th>Co</th><th>Przykłady</th> <tr><td>And</td><td>one two&nbsp;&nbsp;&nbsp;one AND two&nbsp;&nbsp;&nbsp;one && two</td></tr> <tr><td>I</td><td>jeden drugi&nbsp;&nbsp;&nbsp;jeden ORAZ dwa&nbsp;&nbsp;&nbsp;jeden && dwa</td></tr> <tr><td>Or</td><td>one OR two&nbsp;&nbsp;&nbsp;one || two</td></tr> <tr><td>Lub</td><td>jeden LUB dwa&nbsp;&nbsp;&nbsp;jeden || dwa</td></tr> <tr><td>Complex boolean. OR has priority, use parentheses&nbsp; <tr><td>Złożony boolean. LUB ma priorytet, użyj nawiasów&nbsp; where needed</td><td>(one AND two) OR three</td></tr> w razie potrzeby</td><td>(jeden i dwa) LUB trzy</td></tr> <tr><td>Not</td><td>-term</td></tr> <tr><td>Nie</td><td>termin</td></tr> <tr><td>Phrase</td><td>"pride and prejudice"</td></tr> <tr><td>Fraza</td><td>"duma i uprzedzenie"</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Ordered proximity (slack=1)</td><td>"pride prejudice"o1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered proximity (slack=1)</td><td>"prejudice pride"po1</td></tr> <tr><td>Unordered prox. (default slack=10)</td><td>"prejudice&nbsp;pride"p</td></tr> <tr><td>Nieuporządkowany proks (domyślny slack=10)</td><td>"Rezerwuj&nbsp;dumę"p</td></tr> <tr><td>No stem expansion: capitalize</td><td>Floor</td></tr> <tr><td>Bez rozszerzenia łodygi: kapitalizuj</td><td>Piętro</td></tr> <tr><td>Field-specific</td><td>author:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>Określony polem</td><td>autor:austen&nbsp;&nbsp;title:prejudice</td></tr> <tr><td>AND inside field (no order)</td><td>author:jane,austen</td></tr> <tr><td>I wewnątrz pola (bez zamówienia)</td><td>autor:jane,austen</td></tr> <tr><td>OR inside field</td><td>author:austen/bronte</td></tr> <tr><td>LUB wewnątrz pola</td><td>autor:austen/bronte</td></tr> <tr><td>Field names</td><td>title/subject/caption&nbsp;&nbsp;author/from<br>recipient/to&nbsp;&nbsp;filename&nbsp;&nbsp;ext</td></tr> <tr><td>Nazwy pól</td><td>tytuł/temat/podpis&nbsp;&nbsp;autor/od<br>odbiorca/do&nbsp;&nbsp;nazwa pliku&nbsp;&nbsp;ext</td></tr> <tr><td>Directory path filter</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>Filtr ścieżki katalogu</td><td>dir:/home/me&nbsp;&nbsp;dir:doc</td></tr> <tr><td>MIME type filter</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Filtr typu MIME</td><td>mime:text/plain mime:video/*</td></tr> <tr><td>Date intervals</td><td>date:2018-01-01/2018-31-12<br> <tr><td>Przedziały daty</td><td>data:2018-01-01/2018-31-12<br> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> date:2018&nbsp;&nbsp;date:2018-01-01/P12M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> <tr><td>Size</td><td>size&gt;100k size&lt;1M</td></tr> </table></body></html> </table></body></html> Can't open index Można't otworzyć indeks Could not restore external indexes for stored query:<br> Nie można przywrócić zewnętrznych indeksów dla zapisanego zapytania:<br> ??? ??? Using current preferences. Używanie aktualnych preferencji. Simple search Proste wyszukiwanie History Historia <p>Query language cheat-sheet. In doubt: click <b>Show Query Details</b>.&nbsp; Arkusz oszustw języka zapytań. W razie wątpliwości: kliknij <b>Pokaż szczegóły zapytania</b>. &nbsp; <tr><td>Capitalize to suppress stem expansion</td><td>Floor</td></tr> <tr><td>Zastosuj wielką literę, aby zablokować rozwinięcie formy podstawowej</td><td>Piętro</td></tr> differ from current preferences (kept) SSearchBase SSearchBase SSearchBase Clear Wyczyść Ctrl+S Ctrl + S Erase search entry Usuń szukany wpis Search Szukaj Start query Start zapytania Enter search terms here. Type ESC SPC for completions of current term. Wprowadź tutaj szkane terminy. Wpisz ESC SPC by uzupełnić bieżący termin. Choose search type. Wybierz typ szukania. Show query history Pokaż historię zapytań Enter search terms here. Wprowadź wyszukiwane frazy tutaj. Main menu Menu główne SearchClauseW SearchClauseW Szukaj ClauseW Any of these Każdy z tych objawów All of these Wszystkie te None of these Żadne z tych This phrase To zdanie Terms in proximity Terminy w pobliżu File name matching Nazwa pliku pasująca Select the type of query that will be performed with the words Wybierz typ zapytania, który będzie użyty z wyrazami Number of additional words that may be interspersed with the chosen ones Liczba dodatkowych wyrazów, które mogą być przeplatane z wybranymi In field W polu No field Bez pola Any Któryś All Każdy None Żaden Phrase Fraza Proximity Sąsiedztwo File name Nazwa pliku Snippets Snippets Snipety X X Find: Znajdź: Next Następny Prev Poprzedni SnippetsW Search Szukaj <p>Sorry, no exact match was found within limits. Probably the document is very big and the snippets generator got lost in a maze...</p> <p>Przepraszamy, nie znaleziono dokładnego dopasowania w granicach. Prawdopodobnie dokument jest bardzo duży i generator fragmentów zgubił się w labiryncie...</p> Sort By Relevance Sortuj według trafności Sort By Page Sortuj według Strony Snippets Window Okno snippetów Find Znajdź Find (alt) Znajdź (alt) Find Next Znajdź następny Find Previous Znajdź Poprzedni Hide Ukryj Find next Znajdź następne Find previous Znajdź poprzedni Close window Zamknij okno Increase font size Zwiększ rozmiar czcionki. Decrease font size Zmniejsz rozmiar czcionki SortForm Date Data Mime type Typ Mime SortFormBase Sort Criteria Kryteria sortowania Sort the Sortuj most relevant results by: najistotniejsze wyniki przez: Descending Malejąco Close Zamknij Apply Zastosuj SpecIdxW Special Indexing Indeksowanie specjalne Do not retry previously failed files. Nie ponawiaj poprzednio nieudanych plików. Else only modified or failed files will be processed. Inne pliki zmodyfikowane lub nieudane zostaną przetworzone. Erase selected files data before indexing. Wyczyść wybrane pliki przed indeksowaniem. Directory to recursively index Katalog do indeksu rekursywnego Browse Przeglądaj Start directory (else use regular topdirs): Katalog startowy (w przeciwnym razie użyj regularnych topdir): Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Pozostaw puste, aby wybrać wszystkie pliki. Możesz użyć wielu wzorców oddzielonych spacjami typu powłoki.<br>Wzory z osadzonymi spacjami powinny być cytowane z podwójnymi cudzysłowami.<br>Może być używane tylko wtedy, gdy ustawiony jest cel początkowy. Selection patterns: Wzory wyboru: Top indexed entity Najczęściej indeksowany obiekt Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Katalog do rekurencyjnego indeksu. Musi to znajdować się wewnątrz regularnego indeksowanego obszaru<br> zgodnie z definicją w pliku konfiguracyjnym (topdirs). Retry previously failed files. Ponów poprzednio nieudane pliki. Start directory. Must be part of the indexed tree. We use topdirs if empty. Katalog startowy. Musi być częścią zindeksowanego drzewa. Jeśli puste, używamy topdirów. Start directory. Must be part of the indexed tree. Use full indexed area if empty. Katalog startowy. Musi być częścią indeksowanego drzewa. Jeśli puste, należy użyć pełnego indeksowanego obszaru. Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). Plik wyjściowy diagnostyki. Zostanie ucięty i otrzyma diagnostykę indeksowania (przyczyny niezaindeksowania plików). Diagnostics file Plik diagnostyczny SpellBase Term Explorer Przegląd terminów &Expand &Rozszerz Alt+E Alt+E &Close &Zamknij Alt+C Alt+C Term Termin No db info. Brak informacji bd. Doc. / Tot. Dok. / Razem Match Dopasowanie Case Wielkość znaków (Case) Accents Akcenty SpellW Wildcards Wieloznaczniki (wildcards) Regexp Wyrażenie regułowe (regexp) Spelling/Phonetic Pisownia/Fonetyczność Aspell init failed. Aspell not installed? Nieudany start Aspell. Nie zainstalowano Aspell? Aspell expansion error. Błąd rozszerzenia Aspell. Stem expansion Roszerzenie rdzenia (Stem expansion) error retrieving stemming languages Błąd pobierania "reguł ciosania" (ang. stemming languages) No expansion found Nieznalezione rozszerzenie Term Termin Doc. / Tot. Dok. / Razem Index: %1 documents, average length %2 terms Indeks: %1 dokumentów, średnia długość %2 wyrażeń Index: %1 documents, average length %2 terms.%3 results Indeks: %1 dokumenty, średnia długość %2 terminów.%3 wyników %1 results %1 wyników List was truncated alphabetically, some frequent Lista obcięta alfabetycznie, część częsta terms may be missing. Try using a longer root. Terminy mogą zginąć. Użyj dłuższego rdzenia Show index statistics Pokaż statystyki indeksowania Number of documents Liczba dokumentów Average terms per document Średnia terminów na dokument Smallest document length Najmniejsza długość dokumentu Longest document length Największa długość dokumentu Database directory size Rozmiar katalogu bazy danych MIME types: Typy MIME: Item Element Value Wartość Smallest document length (terms) Najmniejsza długość dokumentu (terminy) Longest document length (terms) Najdłuższa długość dokumentu (terminy) Results from last indexing: Wyniki z ostatniego indeksowania: Documents created/updated Dokumenty utworzone/zaktualizowane Files tested Pliki przetestowane Unindexed files Niedeksfekowane pliki List files which could not be indexed (slow) Lista plików, które nie mogą być indeksowane (wolne) Spell expansion error. Błąd rozszerzenia zaklęcia. Spell expansion error. Błąd rozszerzania pisowni. Documents created/updated Files tested Unindexed files UIPrefsDialog The selected directory does not appear to be a Xapian index Wybrany katalog nie wygląda jak indeks Xapian This is the main/local index! To jest główny|lokalny indeks! The selected directory is already in the index list Wybrany słownik już należy do indeksu Select xapian index directory (ie: /home/buddy/.recoll/xapiandb) Wybierz katalog indeksu xapian (np. /home/buddy/.recoll/xapiandb) error retrieving stemming languages Błąd pobierania "reguł ciosania" (ang. stemming languages) Choose Wybierz Result list paragraph format (erase all to reset to default) Format paragrafu listy wyników (usuń wszystko by wróćić do domyślnych) Result list header (default is empty) Nagłówek listy wyników (domyślnie pusty) Select recoll config directory or xapian index directory (e.g.: /home/me/.recoll or /home/me/.recoll/xapiandb) Wybierz katalog konfiguracji recoll lub katalog indeksu xapian (np.: /home/ja/.recoll lub /home/ja/.recoll/xapiandb) The selected directory looks like a Recoll configuration directory but the configuration could not be read Wybrany katalog wygląda jak katalog konfiguracji Recoll, jednakże kofiguracja nie może być przeczytana At most one index should be selected Co najwyżej jeden indeks powinnien być wyberany Cant add index with different case/diacritics stripping option Nie można dodać indeksu z opcją różnej wielkości-liter/znakach-diakrytycznych Default QtWebkit font Default QtWebkit font Any term Któryś termin All terms Każdy termin File name Nazwa pliku Query language Język zapytań Value from previous program exit Wartość z poprzedniego zakończenia programu Context Kontekst Description Opis Shortcut Skrót Default Domyślny Choose QSS File Wybierz plik QSS Can't add index with different case/diacritics stripping option. Nie można dodać indeksu z inną opcją usuwania wielkości liter/znaków diakrytycznych. Light Światło Dark Ciemny System System UIPrefsDialogBase User interface Wygląd Number of entries in a result page Liczba wyników na stronie Result list font Czcionka listy wyników Helvetica-10 Helvetica-10 Opens a dialog to select the result list font Otwiera okno wyboru czcionek Reset Reset Resets the result list font to the system default Reset czcionki wyników do domyślnej Auto-start simple search on whitespace entry. Proste szukanie gdy użyto biłych znaków we wpisie. Start with advanced search dialog open. Rozpocznij oknem zaawansowanego szukania. Start with sort dialog open. Rozpocznij z otwartym oknem sortowania. Search parameters Parametry szukania Stemming language Język ciosania Dynamically build abstracts Buduj streszczenia dynamicznie Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Mam budować streszczenie dla wyników po przez użycie kontekstu teminów zapytania? Może zwalniać dla dużych dokumentów. Replace abstracts from documents Zamień streszczenia z dokumentów Do we synthetize an abstract even if the document seemed to have one? Tworzyć sztuczne streszczenie nawet jeśli dokument ma własne? Synthetic abstract size (characters) Rozmiar sztucznego streszczenia (w znakach) Synthetic abstract context words Kontekstowe wyrazy sztucznego streszczenia External Indexes Zewnętrzne indeksy Add index Dodaj indeks Select the xapiandb directory for the index you want to add, then click Add Index Wybierz katalog xapiandb dla indeksu, który chcesz dodać, a następnie kliknij przycisk Dodaj indeks Browse Przeglądaj &OK &Ok Apply changes Zastosuj zmiany &Cancel &Anuluj Discard changes Porzuć zmiany Result paragraph<br>format string Wynik paragrafu<br>w formacie ciągu Automatically add phrase to simple searches Automatycznie dodaj frazę do szukania prostego A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Wyszukanie dla [rolling stones] (2 terminy) zostanie zamienione na [rolling or stones or (rolling phrase 2 stones)]. To powinno dać pierwszeństwo wynikom, dokładnie tak jak zostały wpisane. User preferences Ustawienia Use desktop preferences to choose document editor. Użyj ustawień pulpitu aby wybrać edytor dokumentów. External indexes Indeksy zewnętrzne Toggle selected Odwróc zaznaczenie Activate All Aktywuj wszystko Deactivate All Deaktywuj wszystko Remove selected Usuń zaznaczenie Remove from list. This has no effect on the disk index. Usuń z listy. Brak skutku dla indeksu na dysku. Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Określa format dla każdego punktu listy wyników. Użyj formatu qt html i zamienników podobnych do wydruku:<br>%A Abstract<br> %D Date<br> %I Ikona nazwa obrazu<br> %K Słowa kluczowe (jeśli istnieje)<br> %L Podgląd i edycja linków<br> %M Typ Mime<br> %N Numer wyniku<br> %R Procent istotności<br> %S Rozmiar informacji<br> %T Tytuł<br> %U Url<br> Remember sort activation state. Pamiętaj stan sortowania. Maximum text size highlighted for preview (megabytes) Maks. rozmiar tekstu dla wyróżnienia w podglądzie (MB) Texts over this size will not be highlighted in preview (too slow). Teksty powyżej tego rozmiaru będą ukryte w podglądzie (zbyt wolne). Highlight color for query terms Podświetl terminy z zapytania Prefer Html to plain text for preview. Użyj HTML (zamiast czysty tekst) dla podglądu. If checked, results with the same content under different names will only be shown once. Wyświetl tylko raz gdy tak sama zawartość (choć różne nazwy) Hide duplicate results. Ukryj duplikaty w wynikach. Choose editor applications Wybierz edytor aplikacji Display category filter as toolbar instead of button panel (needs restart). Wyświetl filtr kategorii jako pasek zamiast panelu (wymagany restart). The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Wyrazy z listy zostaną automatycznie zmienione w klauzule ext:xxx we wpisach języka zapytań. Query language magic file name suffixes. Magiczne przyrostki nazw plików języka zapytań Enable Włącz ViewAction Changing actions with different current values Zmiana akcji z różnymi bieżącymi wartościami Mime type Typ Mime Command Komenda MIME type Typ Mime Desktop Default Domyślnie ustawienia pulpitu Changing entries with different current values Zmiana wpisów o różne obecne wartości ViewActionBase File type Typ pliku Action Akcja Select one or several file types, then click Change Action to modify the program used to open them Wybierz jeden lub kilka typów plików, następnie kliknij przycisk Zmień Akcję, aby zmodyfikować program używany do ich otwarcia Change Action Zmień akcję Close Zamknij Native Viewers Systemowy czytnik Select one or several mime types then click "Change Action"<br>You can also close this dialog and check "Use desktop preferences"<br>in the main panel to ignore this list and use your desktop defaults. Wybierz jeden lub kilka typów mime a następnie kliknij "Zmień działanie"<br>Możesz również zamknąć to okno dialogowe i zaznaczyć "Użyj ustawień pulpitu"<br>w panelu głównym, aby zignorować tę listę i użyć domyślnych ustawień pulpitu. Select one or several mime types then use the controls in the bottom frame to change how they are processed. Wybierz jedno lub kilka typów MIME po czym określ jak mają być przetwarzane używając kontrolek na dole ramki Use Desktop preferences by default Użyj domyślnie ustawień Pulpitu Select one or several file types, then use the controls in the frame below to change how they are processed Wybierz jeden lub kilka typów pliku, następnie wskaż w ramce poniżej jak mają zostać przetworzone Exception to Desktop preferences Wyjątki dla ustawień Pulpitu Action (empty -> recoll default) Czyń (pusty -> recoll domyślnie) Apply to current selection Użyj dla obecnego wyboru Recoll action: Recoll zachowanie: current value obecna wartość Select same Wybierz to samo <b>New Values:</b> <b>Nowa wartość:</b> The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Wartość jest poleceniem do wykonania w wierszu poleceń. Podstawienia: %s: ciąg wyszukiwania; %p: numer strony; <br>%f: nazwa pliku dokumentu. F1 dla więcej pomocy. Webcache Webcache editor Edytor webcache Search regexp Szukaj regexp TextLabel EtykietaTekstu WebcacheEdit Copy URL Kopiuj adres URL Unknown indexer state. Can't edit webcache file. Nieznany stan indeksatora. Można't edytować plik pamięci podręcznej. Indexer is running. Can't edit webcache file. Indekser jest uruchomiony. Można't edytować plik webcache Delete selection Usuń zaznaczenie Webcache was modified, you will need to run the indexer after closing this window. Pamięć podręczna została zmodyfikowana, musisz uruchomić indeks po zamknięciu tego okna. Save to File Zapisz do pliku File creation failed: Tworzenie pliku nie powiodło się: Maximum size %1 (Index config.). Current size %2. Write position %3. Maksymalny rozmiar %1 (Konfiguracja indeksu). Obecny rozmiar %2. Pozycja zapisu %3. WebcacheModel MIME MIME Url Adres URL Date Data Size Rozmiar URL Adres URL WinSchedToolW Error Błąd Configuration not initialized Konfiguracja nie została zainicjowana <h3>Recoll indexing batch scheduling</h3><p>We use the standard Windows task scheduler for this. The program will be started when you click the button below.</p><p>You can use either the full interface (<i>Create task</i> in the menu on the right), or the simplified <i>Create Basic task</i> wizard. In both cases Copy/Paste the batch file path listed below as the <i>Action</i> to be performed.</p> <h3>Ponowne indeksowanie wsadowego harmonogramu</h3><p>Używamy standardowego harmonogramu zadań systemu Windows. Program zostanie uruchomiony po kliknięciu poniższego przycisku.</p><p>Możesz użyć pełnego interfejsu (<i>Utwórz zadanie</i> w menu po prawej stronie), lub uproszczony kreator <i>Utwórz zadanie podstawowe</i> . W obu przypadkach Kopiuj/Wklej ścieżkę pliku wsadowego wymienioną poniżej jako czynność <i></i> do wykonania.</p> Command already started Polecenie już rozpoczęte Recoll Batch indexing Indeksowanie partii recoll Start Windows Task Scheduler tool Uruchom narzędzie Harmonogramu Zadań Windows Could not create batch file Nie można utworzyć pliku wsadowego. confgui::ConfBeaglePanelW Steal Beagle indexing queue Kolejka indeksowania kradzieży beagli Beagle MUST NOT be running. Enables processing the beagle queue to index Firefox web history.<br>(you should also install the Firefox Beagle plugin) Beagle NIE MUSZĄ być uruchomione. Umożliwia przetwarzanie kolejki beagle w celu indeksowania historii sieci Firefoks.<br>(należy również zainstalować wtyczkę Firefox Beagle) Web cache directory name Nazwa katalogu pamięci podręcznej The name for a directory where to store the cache for visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Nazwa katalogu, w którym chcesz przechowywać pamięć podręczną odwiedzanych stron internetowych.<br>Ścieżka nie jest bezwzględna w stosunku do katalogu konfiguracyjnego. Max. size for the web cache (MB) Max. rozmiar pamięci podręcznej (MB) Entries will be recycled once the size is reached Wpisy będą odnowione gdy osiągnie rozmiar Web page store directory name Nazwa katalogu dla trzymania stron web The name for a directory where to store the copies of visited web pages.<br>A non-absolute path is taken relative to the configuration directory. Nazwa katalogu, w którym można przechowywać kopie odwiedzanych stron internetowych.<br>Ścieżka nie jest bezwzględna w stosunku do katalogu konfiguracyjnego. Max. size for the web store (MB) Maks. rozmiar dla schowka webowego (MB) Process the WEB history queue Przejdź do kolejki historii web Enables indexing Firefox visited pages.<br>(you need also install the Firefox Recoll plugin) Włącza indeksowanie odwiedzonych stron Firefoksu.<br>(musisz również zainstalować wtyczkę Firefoksa Recoll) Entries will be recycled once the size is reached.<br>Only increasing the size really makes sense because reducing the value will not truncate an existing file (only waste space at the end). Wpisy zostaną poddane recyklingowi po osiągnięciu rozmiaru.<br>Tylko zwiększenie rozmiaru ma sens, ponieważ zmniejszenie wartości nie spowoduje obcięcia istniejącego pliku (tylko miejsce na odpadach). confgui::ConfIndexW Can't write configuration file Nie można pisać w pliku konfiguracji Recoll - Index Settings: Recoll - Ustawienia indeksu: confgui::ConfParamFNW Browse Przeglądaj Choose Wybierz confgui::ConfParamSLW + + - - Add entry Dodaj wpis Delete selected entries Usuń wybrane wpisy ~ ~ Edit selected entries Edytuj wybrane wpisy confgui::ConfSearchPanelW Automatic diacritics sensitivity Automatyczna czułość na diakrytyki <p>Automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the <i>D</i> modifier to specify diacritics sensitivity. <p>Automatyczne wyzwalanie wrażliwości diakrytycznej jeśli wyszukiwane hasło ma znaki akcentowane (nie w unac_except_trans). W innym przypadku musisz użyć języka zapytania i modyfikatora <i>D</i> , aby określić czułość diakrytyczną. Automatic character case sensitivity Automatyczna czułość wielkości znaków <p>Automatically trigger character case sensitivity if the entry has upper-case characters in any but the first position. Else you need to use the query language and the <i>C</i> modifier to specify character-case sensitivity. <p>Automatyczne wyzwalanie czułości liter, jeśli wpis ma wielkie litery w jednej z pozycji oprócz pierwszej pozycji. W innym przypadku musisz użyć języka zapytania i modyfikatora <i>C</i> , aby określić wielkość liter. Maximum term expansion count Maksymalna liczba rozszerzeń terminu <p>Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10 000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. <p>Maximum expansion count for a single term (np.: when use wildcards). Wartość domyślna 10 000 jest rozsądna i pozwoli uniknąć zapytań, które pojawiają się w stanie zamrożonym, gdy silnik porusza się na liście terminów. Maximum Xapian clauses count Maksymalna liczba klauzuli Xapian <p>Maximum number of elementary clauses we add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. <p>Struktura danych sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sdd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sd_sdd W niektórych przypadkach wynik czasowej ekspansji może być mnożnikowy i chcemy uniknąć wykorzystywania nadmiernej pamięci. Domyślna wartość 100 000 powinna być w większości przypadków wystarczająco wysoka i kompatybilna z aktualnymi typowymi konfiguracjami sprzętu. confgui::ConfSubPanelW Global Globalnie Max. compressed file size (KB) Maks. rozmiar skompresowanego pliku (KB) This value sets a threshold beyond which compressedfiles will not be processed. Set to -1 for no limit, to 0 for no decompression ever. Wartość progowa od której skompresowane pliki przestają być przetwarzane. Brak limitu to -1, 0 wyłącza przetwarzanie plików skompresowanych. Max. text file size (MB) Maks. rozmiar plików tekstowych (MB) This value sets a threshold beyond which text files will not be processed. Set to -1 for no limit. This is for excluding monster log files from the index. Wartość progowa po której pliki tekstowe przestają być przetwarzane. Brak limitu to -1. Używaj do wykluczenia gigantycznych plików dziennika systemowego (logs). Text file page size (KB) Rozmiar strony pliku tekstowego (KB) If this value is set (not equal to -1), text files will be split in chunks of this size for indexing. This will help searching very big text files (ie: log files). Indeksując dzieli plik tekstowy na podane kawałki (jeśli różne od -1). Pomocne przy szukaniu w wielkich plikach (np.: dzienniki systemowe). Max. filter exec. time (S) Maks. czas filtrowania (s) External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loopSet to -1 for no limit. Filtry zewnętrzne pracujące dłużej niż to zostanie przerwane. Dotyczy to rzadkiego przypadku (np. postscript), w którym dokument może spowodować dodanie filtra do pętli do -1 dla braku limitu. External filters working longer than this will be aborted. This is for the rare case (ie: postscript) where a document could cause a filter to loop. Set to -1 for no limit. Przerywa po tym czasie zewnętrzne filtrowanie. Dla rzadkich przypadków (np.: postscript) kiedy dokument może spowodować zapętlenie filtrowania. Brak limitu to -1. Only mime types Tylko typy mime An exclusive list of indexed mime types.<br>Nothing else will be indexed. Normally empty and inactive Lista ekskluzywnych typów indeksowanych mime.<br>Nic innego nie zostanie zindeksowane. Zwykle puste i nieaktywne Exclude mime types Wyklucz typy mime Mime types not to be indexed Typy Mime nie mają być indeksowane Max. filter exec. time (s) Maks. czas wykonania filtra (s) confgui::ConfTabsW Apply Zastosuj confgui::ConfTopPanelW Top directories Szczytowe katalogi The list of directories where recursive indexing starts. Default: your home. Lista katalogów rekursywnego indeksowania. Domyślnie: Twój katalog domowy. Skipped paths Wykluczone ścieżki These are names of directories which indexing will not enter.<br> May contain wildcards. Must match the paths seen by the indexer (ie: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Są to nazwy katalogów, które nie zostaną wprowadzone.<br> Może zawierać karty wieloznaczne. Musi odpowiadać ścieżkom obserwowanym przez indeksatora (np. jeśli topdirs zawiera '/home/me' i '/home' jest w rzeczywistości linkiem do '/usr/home', poprawny wpis ścieżki pominiętej będzie '/home/me/tmp*', nie '/usr/home/me/tmp*') Stemming languages Reguły ciosania (ang. stemming languages) The languages for which stemming expansion<br>dictionaries will be built. Języki, dla których zostaną zbudowane dodatkowe<br>słowniki. Log file name Nazwa pliku dziennika (logs) The file where the messages will be written.<br>Use 'stderr' for terminal output Plik w którym będą zapisywane wiadomości.<br>Użyj 'stderr' dla terminali wyjściowych Log verbosity level Poziom stężenia komunikatu This value adjusts the amount of messages,<br>from only errors to a lot of debugging data. Ta wartość dostosowuje ilość wiadomości,<br>od tylko błędów do wielu danych debugowania. Index flush megabytes interval Interwał (megabajty) opróżniania indeksowania This value adjust the amount of data which is indexed between flushes to disk.<br>This helps control the indexer memory usage. Default 10MB Ta wartość dostosowuje ilość danych, które są indeksowane między spłukiwaniami na dysku.<br>Pomaga to kontrolować użycie pamięci indeksatora. Domyślnie 10MB Max disk occupation (%) Maks. zużycie dysku (%) This is the percentage of disk occupation where indexing will fail and stop (to avoid filling up your disk).<br>0 means no limit (this is the default). Jest to procent zajęć dysku, gdzie indeksowanie nie powiedzie się i zatrzyma (aby uniknąć wypełniania dysku).<br>0 oznacza brak limitu (domyślnie). No aspell usage Brak użycia Aspell Aspell language Język Aspell The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works.To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Język słownika aspektu powinien wyglądać jak 'en' lub 'fr' . .<br>Jeśli ta wartość nie jest ustawiona, środowisko NLS zostanie użyte do jej obliczenia, co zwykle działa. o dostrzec to, co jest zainstalowane w systemie, wpisz 'aspell config' i szukaj . w plikach w katalogu 'data-dir'. Database directory name Nazwa katalogu bazy danych The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Nazwa katalogu, w którym ma być przechowywany indeks<br>Ścieżka niebezwzględna jest przyjmowana w stosunku do katalogu konfiguracyjnego. Domyślnym jest 'xapiandb'. Use system's 'file' command Użyj polecenia systemu's 'plik' Use the system's 'file' command if internal<br>mime type identification fails. Use the system's 'file' command if internal<br>mime type identification fails. Disables use of aspell to generate spelling approximation in the term explorer tool.<br> Useful if aspell is absent or does not work. Wyłącza używanie aspektu do generowania przybliżenia pisowni w narzędziu eksploratora terminu.<br> Przydatne jeśli aspekt jest nieobecny lub nie działa. The language for the aspell dictionary. This should look like 'en' or 'fr' ...<br>If this value is not set, the NLS environment will be used to compute it, which usually works. To get an idea of what is installed on your system, type 'aspell config' and look for .dat files inside the 'data-dir' directory. Język słownika aspektu powinien wyglądać jak 'en' lub 'fr' . .<br>Jeśli ta wartość nie jest ustawiona, środowisko NLS zostanie użyte do jej obliczenia, co zwykle działa. Aby dowiedzieć się, co jest zainstalowane w systemie, wpisz 'aspell config' i szukaj . w plikach w katalogu 'data-dir'. The name for a directory where to store the index<br>A non-absolute path is taken relative to the configuration directory. The default is 'xapiandb'. Nazwa katalogu, w którym ma być przechowywany indeks<br>Ścieżka niebezwzględna jest przyjmowana w stosunku do katalogu konfiguracyjnego. Domyślnym jest 'xapiandb'. Unac exceptions Wyjątki niezwiązane <p>These are exceptions to the unac mechanism which, by default, removes all diacritics, and performs canonic decomposition. You can override unaccenting for some characters, depending on your language, and specify additional decompositions, e.g. for ligatures. In each space-separated entry, the first character is the source one, and the rest is the translation. <p>Są to wyjątki od mechanizmu unac, który domyślnie usuwa wszystkie diakrytyki i wykonuje dekompozycję kanoniczną. Możesz nadpisać nieakcentowanie niektórych znaków, w zależności od języka i określić dodatkowe rozkłady znaków. . dla ligatur. W każdym oddzielonym spacją wpis pierwszy znak jest jednym źródłowym, a reszta jest tłumaczeniem. These are pathnames of directories which indexing will not enter.<br>Path elements may contain wildcards. The entries must match the paths seen by the indexer (e.g.: if topdirs includes '/home/me' and '/home' is actually a link to '/usr/home', a correct skippedPath entry would be '/home/me/tmp*', not '/usr/home/me/tmp*') Są to nazwy ścieżek katalogów, których indeksowanie nie wprowadzi.<br>Elementy ścieżki mogą zawierać karty wieloznaczne. Wpisy muszą odpowiadać ścieżkom obserwowanym przez indeksatora (np. jeśli topdirs zawiera '/home/me' i '/home' jest w rzeczywistości linkiem do '/usr/home', poprawny wpis ścieżki pominiętej będzie '/home/me/tmp*', nie '/usr/home/me/tmp*') Max disk occupation (%, 0 means no limit) Maksymalne zajęcie dysku (%, 0 oznacza brak limitu) This is the percentage of disk usage - total disk usage, not index size - at which indexing will fail and stop.<br>The default value of 0 removes any limit. Jest to procent wykorzystania dysku - całkowite użycie dysku, a nie rozmiar indeksu - przy którym indeksowanie nie będzie udane i zatrzymane.<br>The default value of 0 removes any limit. uiPrefsDialogBase User preferences Ustawienia User interface Wygląd Number of entries in a result page Liczba wyników na stronie If checked, results with the same content under different names will only be shown once. Wyświetl tylko raz gdy tak sama zawartość (choć różne nazwy) Hide duplicate results. Ukryj duplikaty w wynikach. Highlight color for query terms Podświetl terminy z zapytania Result list font Czcionka listy wyników Opens a dialog to select the result list font Otwiera okno wyboru czcionek Helvetica-10 Helvetica-10 Resets the result list font to the system default Reset czcionki wyników do domyślnej Reset Reset Defines the format for each result list paragraph. Use qt html format and printf-like replacements:<br>%A Abstract<br> %D Date<br> %I Icon image name<br> %K Keywords (if any)<br> %L Preview and Edit links<br> %M Mime type<br> %N Result number<br> %R Relevance percentage<br> %S Size information<br> %T Title<br> %U Url<br> Określa format dla każdego punktu listy wyników. Użyj formatu qt html i zamienników podobnych do wydruku:<br>%A Abstract<br> %D Date<br> %I Ikona nazwa obrazu<br> %K Słowa kluczowe (jeśli istnieje)<br> %L Podgląd i edycja linków<br> %M Typ Mime<br> %N Numer wyniku<br> %R Procent istotności<br> %S Rozmiar informacji<br> %T Tytuł<br> %U Url<br> Result paragraph<br>format string Wynik paragrafu<br>w formacie ciągu Texts over this size will not be highlighted in preview (too slow). Teksty powyżej tego rozmiaru będą ukryte w podglądzie (zbyt wolne). Maximum text size highlighted for preview (megabytes) Maks. rozmiar tekstu dla wyróżnienia w podglądzie (MB) Use desktop preferences to choose document editor. Użyj ustawień pulpitu aby wybrać edytor dokumentów. Choose editor applications Wybierz edytor aplikacji Display category filter as toolbar instead of button panel (needs restart). Wyświetl filtr kategorii jako pasek zamiast panelu (wymagany restart). Auto-start simple search on whitespace entry. Proste szukanie gdy użyto biłych znaków we wpisie. Start with advanced search dialog open. Rozpocznij oknem zaawansowanego szukania. Start with sort dialog open. Rozpocznij z otwartym oknem sortowania. Remember sort activation state. Pamiętaj stan sortowania. Prefer Html to plain text for preview. Użyj HTML (zamiast czysty tekst) dla podglądu. Search parameters Parametry szukania Stemming language Język ciosania A search for [rolling stones] (2 terms) will be changed to [rolling or stones or (rolling phrase 2 stones)]. This should give higher precedence to the results where the search terms appear exactly as entered. Wyszukanie dla [rolling stones] (2 terminy) zostanie zamienione na [rolling or stones or (rolling phrase 2 stones)]. To powinno dać pierwszeństwo wynikom, dokładnie tak jak zostały wpisane. Automatically add phrase to simple searches Automatycznie dodaj frazę do szukania prostego Do we try to build abstracts for result list entries by using the context of query terms ? May be slow for big documents. Mam budować streszczenie dla wyników po przez użycie kontekstu teminów zapytania? Może zwalniać dla dużych dokumentów. Dynamically build abstracts Buduj streszczenia dynamicznie Do we synthetize an abstract even if the document seemed to have one? Tworzyć sztuczne streszczenie nawet jeśli dokument ma własne? Replace abstracts from documents Zamień streszczenia z dokumentów Synthetic abstract size (characters) Rozmiar sztucznego streszczenia (w znakach) Synthetic abstract context words Kontekstowe wyrazy sztucznego streszczenia The words in the list will be automatically turned to ext:xxx clauses in the query language entry. Wyrazy z listy zostaną automatycznie zmienione w klauzule ext:xxx we wpisach języka zapytań. Query language magic file name suffixes. Magiczne przyrostki nazw plików języka zapytań Enable Włącz External Indexes Zewnętrzne indeksy Toggle selected Odwróc zaznaczenie Activate All Aktywuj wszystko Deactivate All Deaktywuj wszystko Remove from list. This has no effect on the disk index. Usuń z listy. Brak skutku dla indeksu na dysku. Remove selected Usuń zaznaczenie Click to add another index directory to the list Kliknij, aby dodać inny katalog indeksu do listy Add index Dodaj indeks Apply changes Zastosuj zmiany &OK &Ok Discard changes Porzuć zmiany &Cancel &Anuluj Abstract snippet separator Oddzielacz snipetu streszczenia Use <PRE> tags instead of <BR>to display plain text as html. Użyj <PRE> tagów zamiast <BR>, aby wyświetlić zwykły tekst jako html. Lines in PRE text are not folded. Using BR loses indentation. Linie w tekście PRE nie są złożone. Korzystanie z BR traci wcięcie. Style sheet Arkusz stylów Opens a dialog to select the style sheet file Otwiera okno wyboru arkusza stylów Choose Wybierz Resets the style sheet to default Reset arkusza stylów do domyślnych Lines in PRE text are not folded. Using BR loses some indentation. Linie w tekście PRE nie są złożone. Korzystanie z BR traci pewne wcięcia. Use <PRE> tags instead of <BR>to display plain text as html in preview. Użyj <PRE> tagów zamiast <BR>, aby wyświetlić zwykły tekst jako html w podglądzie. Result List Lista wyników Edit result paragraph format string Zmień format paragrafu dla wyniku Edit result page html header insert Zmień nagłówek HTML dla strony wyników Date format (strftime(3)) Format daty (strftime(3)) Frequency percentage threshold over which we do not use terms inside autophrase. Frequent terms are a major performance issue with phrases. Skipped terms augment the phrase slack, and reduce the autophrase efficiency. The default value is 2 (percent). Próg częstotliowści procentowej dla której terminy wew. autofrazy nie są używane. Częste terminy są powodem słabej wydajności fraz. Pominięte terminy zwiększają rozlużnienie frazy oraz zmniejszanją wydajność autofrazy. Domyślna wartość to 2 (%). Autophrase term frequency threshold percentage Procentowy próg częstości dla terminu Autofrazy Plain text to HTML line style Styl linii czystego tekstu do HTML Lines in PRE text are not folded. Using BR loses some indentation. PRE + Wrap style may be what you want. Linie w PRE nie są zwijane. Użycie BR zaciera wcięcia. PRE + Zawijaj styl może być tym co szukasz. <BR> <BR> <PRE> <PRE> <PRE> + wrap <PRE> + zawijanie Exceptions Wyjątki Mime types that should not be passed to xdg-open even when "Use desktop preferences" is set.<br> Useful to pass page number and search string options to, e.g. evince. Typy Mime które nie powinny być przekazywane do xdg-open nawet wtedy, gdy "Ustawienia pulpitu" są ustawione.<br> Przydatne do przekazania numeru strony i opcji ciągu znaków, np. zdarzenia. Disable Qt autocompletion in search entry. Wyłącz podpowiedź Qt dla wpisu szukania Search as you type. Szukaj podczas pisania. Paths translations Ścieżki tłumaczeń Click to add another index directory to the list. You can select either a Recoll configuration directory or a Xapian index. Kliknij by dodać kolejny katalog do listy. Możesz wybrać zarówno katalog konfiguracji Recoll jak i indeks Xapian. Snippets window CSS file Okno snippetów CSS Opens a dialog to select the Snippets window CSS style sheet file Otwórz okno by wybrać snipet CSS Resets the Snippets window style Reset stylu okna Decide if document filters are shown as radio buttons, toolbar combobox, or menu. Zdecyduj, czy filtry dokumentów są wyświetlane jako przyciski radiowe, komoboks paska narzędzi lub menu. Document filter choice style: Styl filtra dokumentu: Buttons Panel Panel przycisków Toolbar Combobox Pasek narzędzi Comboboks Menu Menu Show system tray icon. Pokaż ikonę zasobnika systemowego. Close to tray instead of exiting. Blisko zasobnika zamiast wyjść. Start with simple search mode Rozpocznij z prostym trybem wyszukiwania Show warning when opening temporary file. Pokaż ostrzeżenie podczas otwierania pliku tymczasowego. User style to apply to the snippets window.<br> Note: the result page header insert is also included in the snippets window header. Styl użytkownika do zastosowania w oknie snippet.<br> Uwaga: wstawienie nagłówka strony wyników jest również zawarte w nagłówku okna snippet. Synonyms file Plik synonimów Highlight CSS style for query terms Podświetl styl CSS dla terminów zapytania Recoll - User Preferences Recoll - Ustawienia użytkownika Set path translations for the selected index or for the main one if no selection exists. Ustaw tłumaczenia ścieżki dla wybranego indeksu lub głównego jeśli nie ma wyboru. Activate links in preview. Aktywuj linki w podglądzie. Make links inside the preview window clickable, and start an external browser when they are clicked. Utwórz linki wewnątrz okna podglądu i uruchom zewnętrzną przeglądarkę po kliknięciu. Query terms highlighting in results. <br>Maybe try something like "color:red;background:yellow" for something more lively than the default blue... Zapytaj terminy podświetlające wyniki. <br>Może spróbuj coś takiego "kolor:red;tło:żółty" dla czegoś bardziej ożywionego niż domyślny niebieski... Start search on completer popup activation. Rozpocznij wyszukiwanie na aktywacji kompletnego okienka. Maximum number of snippets displayed in the snippets window Maksymalna liczba snippetów wyświetlanych w oknie fragmentów Sort snippets by page number (default: by weight). Sortuj fragmenty według numeru strony (domyślnie: według wagi). Suppress all beeps. Usuń wszystkie sygnały. Application Qt style sheet Arkusz stylów aplikacji Qt Limit the size of the search history. Use 0 to disable, -1 for unlimited. Ogranicz rozmiar historii wyszukiwania. Użyj 0 aby wyłączyć, -1 dla nieograniczonych. Maximum size of search history (0: disable, -1: unlimited): Maksymalny rozmiar historii wyszukiwania (0: wyłączony, -1: nieograniczony): Generate desktop notifications. Wygeneruj powiadomienia pulpitu. Misc Różne Work around QTBUG-78923 by inserting space before anchor text Pracuj wokół QTBUG-78923 wstawiając spację przed kotwicą tekstu Display a Snippets link even if the document has no pages (needs restart). Wyświetl link Snippets nawet jeśli dokument nie ma żadnych stron (wymaga ponownego uruchomienia). Maximum text size highlighted for preview (kilobytes) Maksymalny rozmiar tekstu podświetlony do podglądu (kilobajty) Start with simple search mode: Rozpocznij z prostym trybem wyszukiwania: Hide toolbars. Ukryj paski narzędzi. Hide status bar. Ukryj pasek stanu. Hide Clear and Search buttons. Ukryj przyciski Wyczyść i Szukaj. Hide menu bar (show button instead). Ukryj pasek menu (zamiast tego pokaż przycisk). Hide simple search type (show in menu only). Ukryj prosty typ wyszukiwania (pokaż tylko w menu). Shortcuts Skróty Hide result table header. Ukryj nagłówek tabeli wyników. Show result table row headers. Pokaż nagłówki tabeli wyników. Reset shortcuts defaults Resetuj domyślne skróty Disable the Ctrl+[0-9]/[a-z] shortcuts for jumping to table rows. Wyłącz skróty Ctrl+[0-9]/[a-z] do skakania do wierszy tabeli. Use F1 to access the manual Użyj F1 aby uzyskać dostęp do podręcznika Hide some user interface elements. Ukryj niektóre elementy interfejsu użytkownika. Hide: Ukryj: Toolbars Paski narzędzi Status bar Pasek stanu Show button instead. Pokaż przycisk zamiast. Menu bar Pasek menu Show choice in menu only. Pokaż tylko wybór w menu. Simple search type Prosty typ wyszukiwania Clear/Search buttons Przyciski Wyczyść/Szukaj Disable the Ctrl+[0-9]/Shift+[a-z] shortcuts for jumping to table rows. Wyłącz skróty klawiszowe Ctrl+[0-9]/Shift+[a-z] do przeskakiwania do wierszy tabeli. None (default) Brak (domyślnie) Uses the default dark mode style sheet Używa domyślnego arkusza stylów w trybie ciemnym. Dark mode Tryb ciemny Choose QSS File Wybierz plik QSS To display document text instead of metadata in result table detail area, use: Aby wyświetlić tekst dokumentu zamiast metadanych w obszarze szczegółów tabeli wyników, użyj: left mouse click kliknięcie lewym przyciskiem myszy Shift+click Shift+kliknij Opens a dialog to select the style sheet file.<br>Look at /usr/share/recoll/examples/recoll[-dark].qss for an example. Otwiera okno dialogowe w celu wyboru pliku arkusza stylów.<br>Sprawdź przykład w pliku /usr/share/recoll/examples/recoll[-dark].qss. Result Table Tabela wyników Do not display metadata when hovering over rows. Nie wyświetlaj metadanych podczas najechania kursorem na wiersze. Work around Tamil QTBUG-78923 by inserting space before anchor text Rozwiązanie problemu Tamil QTBUG-78923 poprzez wstawienie spacji przed tekstem kotwicy. The bug causes a strange circle characters to be displayed inside highlighted Tamil words. The workaround inserts an additional space character which appears to fix the problem. Błąd powoduje wyświetlanie dziwnych okrągłych znaków wewnątrz wyróżnionych słów w języku tamilskim. Rozwiązanie tymczasowe polega na wstawieniu dodatkowego znaku spacji, co wydaje się naprawić problem. Depth of side filter directory tree Głębokość drzewa katalogów filtru bocznego Zoom factor for the user interface. Useful if the default is not right for your screen resolution. Współczynnik przybliżenia interfejsu użytkownika. Przydatny, jeśli domyślny nie jest odpowiedni dla rozdzielczości ekranu. Display scale (default 1.0): Skala wyświetlania (domyślnie 1.0): Automatic spelling approximation. Automatyczne przybliżanie pisowni. Max spelling distance Maksymalna odległość literowa Add common spelling approximations for rare terms. Dodaj powszechne przybliżenia pisowni dla rzadkich terminów. Maximum number of history entries in completer list Maksymalna liczba wpisów w historii na liście uzupełniania. Number of history entries in completer: Liczba wpisów historii w uzupełnianiu: Displays the total number of occurences of the term in the index Wyświetla całkowitą liczbę wystąpień terminu w indeksie. Show hit counts in completer popup. Pokaż liczbę trafień w oknie uzupełniania. Prefer HTML to plain text for preview. Preferuj HTML zamiast zwykłego tekstu do podglądu. See Qt QDateTimeEdit documentation. E.g. yyyy-MM-dd. Leave empty to use the default Qt/System format. Zobacz dokumentację Qt QDateTimeEdit. Na przykład yyyy-MM-dd. Pozostaw puste, aby użyć domyślnego formatu Qt/System. Side filter dates format (change needs restart) Format daty filtrów bocznych (zmiana wymaga ponownego uruchomienia) If set, starting a new instance on the same index will raise an existing one. Jeśli ustawione, uruchomienie nowej instancji na tym samym indeksie spowoduje podniesienie istniejącej. Single application Pojedyncza aplikacja Set to 0 to disable and speed up startup by avoiding tree computation. Ustaw na 0, aby wyłączyć i przyspieszyć uruchamianie poprzez unikanie obliczeń drzewa. The completion only changes the entry when activated. Uzupełnienie zmienia wpis tylko po aktywowaniu. Completion: no automatic line editing. Ukończenie: brak automatycznego edytowania linii. Interface language (needs restart): Język interfejsu (wymaga restartu): Note: most translations are incomplete. Leave empty to use the system environment. Uwaga: większość tłumaczeń jest niekompletna. Pozostaw puste, aby użyć środowiska systemowego. Preview Poprzedni Set to 0 to disable details/summary feature Ustaw na 0, aby wyłączyć funkcję szczegóły/podsumowanie. Fields display: max field length before using summary: Pola wyświetlania: maksymalna długość pola przed użyciem podsumowania: Number of lines to be shown over a search term found by preview search. Liczba wierszy do wyświetlenia nad wyszukanym terminem w podglądzie wyszukiwania. Search term line offset: Przesunięcie linii wyszukiwania: Wild card characters *?[] will processed as punctuation instead of being expanded Znaki wieloznaczne *?[] będą traktowane jako interpunkcja zamiast być rozwiniętymi. Ignore wild card characters in ALL terms and ANY terms modes Ignoruj znaki wieloznaczne w trybach WSZYSTKIE wyrazy i DOWOLNE wyrazy. Color scheme Schemat kolorów When displaying HTML in dark mode, try to use a dark background (and light color).<br>This conflicts with many documents which will override our light setting with their own CSS (dark) foreground color, resulting in an unreadable document, so it is off by default. Podczas wyświetlania HTML w trybie ciemnym, spróbuj użyć ciemnego tła (i jasnego koloru). To koliduje z wieloma dokumentami, które nadpiszą nasze ustawienia jasnego tła ich własnym CSS (ciemnym) kolorem tekstu, co skutkuje nieczytelnym dokumentem, dlatego jest to domyślnie wyłączone. Use dark background when displaying HTML in dark mode. Użyj ciemnego tła podczas wyświetlania HTML w trybie ciemnym. recoll-1.43.12/qtgui/spell_w.h0000644000175000017500000000371015121730573015420 0ustar dockesdockes/* Copyright (C) 2006 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _SPELL_W_H_INCLUDED_ #define _SPELL_W_H_INCLUDED_ #include #include #include #include "ui_spell.h" class SpellW : public QWidget, public Ui::SpellBase { Q_OBJECT public: SpellW(QWidget* parent = 0) : QWidget(parent), m_prevmode(TYPECMB_NONE) { setupUi(this); init(); } virtual bool eventFilter(QObject *target, QEvent *event ); enum comboboxchoice {TYPECMB_NONE, TYPECMB_WILD, TYPECMB_REG, TYPECMB_STEM, TYPECMB_SPELL, TYPECMB_STATS, TYPECMB_FAILED}; public slots: virtual void doExpand(); virtual void wordChanged(const QString&); virtual void textDoubleClicked(); virtual void textDoubleClicked(int, int); virtual void setMode(SpellW::comboboxchoice); private slots: virtual void onModeChanged(int); signals: void wordSelect(QString); private: // combobox index to expansion type std::vector m_c2t; comboboxchoice m_prevmode; void init(); void copy(); void showStats(); void showFailed(); int cmbIdx(comboboxchoice mode); void setModeCommon(comboboxchoice mode); }; #endif /* _SPELL_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/specialindex.h0000644000175000017500000000335614753313624016435 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _SPECIDX_W_H_INCLUDED_ #define _SPECIDX_W_H_INCLUDED_ #include #include #include "ui_specialindex.h" class QPushButton; class SpecIdxW : public QDialog, public Ui::SpecIdxW { Q_OBJECT public: SpecIdxW(QWidget * parent = 0) : QDialog(parent) { setupUi(this); selPatsLE->setEnabled(false); connect(targBrowsePB, SIGNAL(clicked()), this, SLOT(onTargBrowsePB_clicked())); connect(targLE, SIGNAL(textChanged(const QString&)), this, SLOT(onTargLE_textChanged(const QString&))); connect(diagsBrowsePB, SIGNAL(clicked()), this, SLOT(onDiagsBrowsePB_clicked())); } bool noRetryFailed(); bool eraseFirst(); std::vector selpatterns(); std::string toptarg(); std::string diagsfile(); public slots: void onTargLE_textChanged(const QString&); void onTargBrowsePB_clicked(); void onDiagsBrowsePB_clicked(); }; #endif /* _SPECIDX_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/ptrans.ui0000644000175000017500000000744615121730573015462 0ustar dockesdockes PTransEditBase 0 0 649 362 Path Translations Select one or several file types, then use the controls in the frame below to change how they are processed QFrame::StyledPanel QFrame::Sunken QAbstractItemView::NoEditTriggers QAbstractItemView::ExtendedSelection QAbstractItemView::SelectRows true true 2 true false 300 20 false true false Add false Delete Qt::Horizontal 40 20 Cancel Save recoll-1.43.12/qtgui/preview_w.h0000644000175000017500000001604715121730573015771 0ustar dockesdockes/* Copyright (C) 2006-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _PREVIEW_W_H_INCLUDED_ #define _PREVIEW_W_H_INCLUDED_ #include "autoconfig.h" #include #include #include #include #include #include #include #if defined(USING_WEBENGINE) && !defined(PREVIEW_FORCETEXTBROWSER) # include # include # define PREVIEW_PARENTCLASS QWebEngineView # define PREVIEW_WEBENGINE #elif defined(USING_WEBKIT) && !defined(PREVIEW_FORCETEXTBROWSER) # include # include # define PREVIEW_PARENTCLASS QWebView # define PREVIEW_WEBKIT #else # include # define PREVIEW_PARENTCLASS QTextBrowser # define PREVIEW_TEXTBROWSER #endif #include "ui_preview.h" #include "rcldoc.h" #include "hldata.h" #include "internfile.h" class QTabWidget; class QLabel; class QPushButton; class QCheckBox; class Preview; class PlainToRichQtPreview; class QUrl; class RclMain; class LoadThread; class QTimer; class QEventLoop; class QProgressDialog; class PreviewTextEdit : public PREVIEW_PARENTCLASS { Q_OBJECT public: PreviewTextEdit(QWidget* parent, const char* name, Preview *pv); void moveToAnchor(const QString& name); enum DspType {PTE_DSPTXT, PTE_DSPFLDS, PTE_DSPIMG}; public slots: virtual void displayFields(); virtual void displayText(); virtual void displayImage(); virtual void print(); virtual void createPopupMenu(const QPoint& pos); void onAnchorClicked(const QUrl& url); void reloadAsPlainText(); void reloadAsHTML(); void redisplay(); friend class Preview; protected: void mouseDoubleClickEvent(QMouseEvent *); private: Preview *m_preview; std::shared_ptr m_plaintorich; bool m_dspflds; std::string m_url; // filename for this tab std::string m_ipath; // Internal doc path inside file int m_docnum; // Index of doc in db search results. // doc out of internfile (previous fields come from the index) with main text erased (for // space). Rcl::Doc m_fdoc; // The input doc out of the index/query list Rcl::Doc m_dbdoc; // Saved rich (or plain actually) text: the textedit seems to sometimes (but not always) return // its text stripped of tags, so this is needed (for printing for example) QString m_richtxt; Qt::TextFormat m_format; // If displaying image, file name. This can be a temporary file. The TempFile itself is kept // inside main.cpp (because that's where signal cleanup happens), but we use its name to ask for // release when the tab is closed. std::string m_imgfilename; QImage m_image; // What are we currently displaying: text/fields/image DspType m_curdsp{PTE_DSPTXT}; #ifdef PREVIEW_WEBENGINE std::string m_datafilename; bool webengineShowContent(); #endif }; class QShortcut; class Preview : public QWidget, public Ui::Preview { Q_OBJECT public: Preview(RclMain *m, int sid, // Search Id const HighlightData& hdata) // Search terms etc. for highlighting : m_rclmain(m), m_searchId(sid), m_hData(hdata) { setupUi(this); init(); } virtual void closeEvent(QCloseEvent *e); virtual bool eventFilter(QObject *target, QEvent *event); /** * Arrange for the document to be displayed either by exposing the tab * if already loaded, or by creating a new tab and loading it. * @para docnum is used to link back to the result list (to highlight * paragraph when tab exposed etc. */ virtual bool makeDocCurrent(Rcl::Doc& idoc, int docnum, bool sametab = false); void emitWordSelect(QString); friend class PreviewTextEdit; /** List shortcuts so that the prefs can be edited before any preview is created */ static void listShortcuts(); public slots: // Search stuff virtual void searchTextChanged(const QString& text); virtual void doSearch(const QString& str, bool next, bool reverse, bool wo = false); virtual void nextPressed(); virtual void prevPressed(); // Tabs management virtual void currentChanged(int); virtual void closeCurrentTab(); virtual void closeTab(int index); virtual void emitShowNext(); virtual void emitShowPrev(); virtual void emitSaveDocToFile(); virtual void emitEditRequested(); virtual void togglePlainPre(); virtual void onNewShortcuts(); // Other virtual void zoomIn(); virtual void zoomOut(); virtual void onUiPrefsChanged(); signals: void previewClosed(Preview *); void wordSelect(QString); void showNext(Preview *w, int sid, int docnum); void showPrev(Preview *w, int sid, int docnum); void previewExposed(Preview *w, int sid, int docnum); void printCurrentPreviewRequest(); void saveDocToFile(Rcl::Doc); void editRequested(Rcl::Doc); private: RclMain *m_rclmain; // Identifier of search in main window. This is used to check that // we make sense when requesting the next document when browsing // successive search results in a tab. int m_searchId; bool m_dynSearchActive{false}; // Index value the search text comes from. -1 if text was edited int m_searchTextFromIndex{0}; bool m_canBeep{true}; bool m_loading{false}; HighlightData m_hData; bool m_justCreated{true}; // First tab create is different QFont m_font; QShortcut *m_closewinsc{nullptr}; QShortcut *m_nextdocsc{nullptr}; QShortcut *m_prevdocsc{nullptr}; QShortcut *m_closetabsc{nullptr}; QShortcut *m_printtabsc{nullptr}; void init(); virtual void setCurTabProps(const Rcl::Doc& doc, int docnum); virtual PreviewTextEdit *editor(int); virtual PreviewTextEdit *currentEditor(); virtual PreviewTextEdit *addEditorTab(); virtual bool loadDocInCurrentTab(Rcl::Doc& idoc, int dnm); void displayLoadError(FileInterner::ErrorPossibleCause explain, bool canGetRawText); bool runLoadThread(LoadThread& lthr, QTimer& tT, QEventLoop& loop, QProgressDialog& progress, bool canGetRawText); // doSearch() when walking hit locations (as opposed to incremental text entry) void walkAnchors(PreviewTextEdit *edit, bool reverse); void initSTermWalk(); }; #endif /* _PREVIEW_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/meson.build0000644000175000017500000000610415121730573015744 0ustar dockesdockes# Meson file to build the QT Recoll GUI # We are using a custom target to run qmake and make as I don't want to have to duplicate the .pro # into a meson build as it is used on Windows and MacOS, with special constraints. # Meson is used to build the .pro from a .pro.in as per recoll configuration, then the custom target # is defined. Makes use of a small script located in the qtgui directory. qtgui_conf = configuration_data() qtgui_conf.set('srcdir', meson.current_source_dir()) qtgui_conf.set('QMAKE_ENABLE_WEBKIT', '#') qtgui_conf.set('QMAKE_ENABLE_WEBENGINE', '#') if get_option('webengine') qtgui_conf.set('QMAKE_ENABLE_WEBENGINE', '') else if get_option('webkit') qtgui_conf.set('QMAKE_ENABLE_WEBKIT', '') endif endif if get_option('qtzeitgeist') qtgui_conf.set('QMAKE_ENABLE_ZEITGEIST', '') else qtgui_conf.set('QMAKE_ENABLE_ZEITGEIST', '#') endif if not get_option('guidebug') qtgui_conf.set('QMAKE_ENABLE_GUIDEBUG', '#') else qtgui_conf.set('QMAKE_ENABLE_GUIDEBUG', '') endif if get_option('noqtsingleapp') qtgui_conf.set('QMAKE_ENABLE_SINGLEAPP', '#') else qtgui_conf.set('QMAKE_ENABLE_SINGLEAPP', '') endif qtgui_conf.set('LIBRECOLL_FOR_QMAKE', librecoll.full_path()) # Tell qmake that we are running an unix-type build, not a macx qcreator one qtgui_conf.set('MESONRAN', 'MESONRAN') # Tried xapian.get_pkgconfig_variable('libs')/'--libs'/'Libs' with no success pkgc = find_program('pkg-config') libstr = run_command(pkgc, ['--libs', 'xapian-core'], check: true).stdout().strip() qtgui_conf.set('XAPIAN_LIBS', libstr) qtgui_conf.set('LIBICONV', '') libstr = run_command(pkgc, ['--libs', 'libxslt'], check: true).stdout().strip() qtgui_conf.set('XSLT_LIBS', libstr) qtgui_conf.set('LIBQZEITGEIST', '') pro_file = configure_file( output: 'recoll.pro', input: 'recoll.pro.in', configuration: qtgui_conf, ) qmkmk = find_program(meson.current_source_dir() / 'qmkmk.sh') infile = pro_file outfile = 'recoll' prefixoption = 'PREFIX=' + get_option('prefix') recoll = custom_target( 'recoll', output: outfile, input: infile, command: [qmkmk, '@INPUT@', prefixoption], depends: librecoll, install: true, install_dir: 'bin', ) install_subdir( 'mtpics', install_dir: get_option('datadir') / 'recoll' / 'images', strip_directory: true, exclude_files: ['License_sidux.txt', 'README', 'aptosid-manual-copyright.txt',], ) install_subdir( meson.current_build_dir() / '.qm', install_dir: get_option('datadir') / 'recoll' / 'translations', strip_directory: true, ) install_data( '../desktop/recoll-searchgui.desktop', install_dir: get_option('datadir') / 'applications', ) install_data( '../desktop/recoll.png', install_dir: get_option('datadir') / 'icons/hicolor/48x48/apps', ) install_data( '../desktop/recoll.png', install_dir: get_option('datadir') / 'pixmaps', ) install_data( '../desktop/recoll.svg', install_dir: get_option('datadir') / 'icons/hicolor/scalable/apps', ) install_data( '../desktop/org.recoll.recoll.appdata.xml', install_dir: get_option('datadir') / 'metainfo', ) recoll-1.43.12/qtgui/rclm_idx.cpp0000644000175000017500000004753715124755060016127 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include "safeunistd.h" #ifdef _WIN32 // getpid() #include #endif // _WIN32 #include #include #include "execmd.h" #include "log.h" #include "transcode.h" #include "indexer.h" #include "rclmain_w.h" #include "specialindex.h" #include "readfile.h" #include "snippets_w.h" #include "idxstatus.h" #include "conftree.h" using namespace std; static std::string recollindex; // This is called from periodic100 if we started an indexer, or from // the rclmain idxstatus file watcher, every time the file changes. // Returns true if a real time indexer is currently monitoring, false else. bool RclMain::updateIdxStatus() { bool ret{false}; DbIxStatus status; readIdxStatus(theconfig, status); QString msg = tr("Indexing in progress: "); QString phs; switch (status.phase) { case DbIxStatus::DBIXS_NONE:phs=tr("None");break; case DbIxStatus::DBIXS_FILES: phs=tr("Updating");break; case DbIxStatus::DBIXS_FLUSH: phs=tr("Flushing");break; case DbIxStatus::DBIXS_PURGE: phs=tr("Purge");break; case DbIxStatus::DBIXS_STEMDB: phs=tr("Stemdb");break; case DbIxStatus::DBIXS_CLOSING:phs=tr("Closing");break; case DbIxStatus::DBIXS_DONE:phs=tr("Done");break; case DbIxStatus::DBIXS_MONITOR:phs=tr("Monitor"); ret = true;break; default: phs=tr("Unknown");break; } msg += phs + " "; if (status.phase == DbIxStatus::DBIXS_FILES) { QString sdocs = status.docsdone > 1 ?tr("documents") : tr("document"); QString sfiles = status.filesdone > 1 ? tr("files") : tr("file"); QString serrors = status.fileerrors > 1 ? tr("errors") : tr("error"); QString stats; if (status.dbtotdocs > 0) { stats = QString("(%1 ") + sdocs + "/%2 " + sfiles + "/%3 " + serrors + "/%4 " + tr("total files)"); stats = stats.arg(status.docsdone).arg(status.filesdone). arg(status.fileerrors).arg(status.totfiles); } else { stats = QString("(%1 ") + sdocs + "/%2 " + sfiles + "/%3 " + serrors + ") "; stats = stats.arg(status.docsdone).arg(status.filesdone). arg(status.fileerrors); } msg += stats + " "; } string mf;int ecnt = 0; string fcharset = theconfig->getDefCharset(true); // If already UTF-8 let it be, else try to transcode, or url-encode if (!transcode(status.fn, mf, cstr_utf8, cstr_utf8, &ecnt) || ecnt) { if (!transcode(status.fn, mf, fcharset, cstr_utf8, &ecnt) || ecnt) { mf = path_pcencode(status.fn, 0); } } msg += QString::fromUtf8(mf.c_str()); statusBar()->showMessage(msg, 4000); return ret; } // This is called by a periodic timer to check the status of // indexing, a possible need to exit, and cleanup exited viewers // We don't need thread locking, but we're not reentrant either static bool periodic100busy(false); class Periodic100Guard { public: Periodic100Guard() { periodic100busy = true;} ~Periodic100Guard() { periodic100busy = false;} }; void RclMain::periodic100() { if (periodic100busy) return; Periodic100Guard guard; LOGDEB2("Periodic100\n" ); if (recollindex.empty()) { // In many cases (_WIN32, appimage, we are not in the PATH. make recollindex a full path recollindex = path_cat(path_thisexecdir(), "recollindex"); } if (!m_idxreasontmp || !m_idxreasontmp->ok()) { // We just store the pointer and let the tempfile cleaner deal // with delete on exiting TempFile temp(".txt"); m_idxreasontmp = rememberTempFile(temp); } bool isMonitor{false}; if (m_idxproc) { // An indexing process was launched. If its' done, see status. int status; bool exited = m_idxproc->maybereap(&status); if (exited) { QString reasonmsg; if (m_idxreasontmp && m_idxreasontmp->ok()) { string reasons; file_to_string(m_idxreasontmp->filename(), reasons); if (!reasons.empty()) { ConfSimple rsn(reasons); vector sects = rsn.getNames(""); for (const auto& nm : sects) { string val; if (rsn.get(nm, val)) { reasonmsg.append(u8s2qs(string("
") + nm + " : " + val)); } } } } deleteZ(m_idxproc); if (status) { if (m_idxkilled) { QMessageBox::warning(0, "Recoll", tr("Indexing interrupted")); m_idxkilled = false; } else { QString msg(tr("Indexing failed")); if (!reasonmsg.isEmpty()) { msg.append(tr(" with additional message: ")); msg.append(reasonmsg); } QMessageBox::warning(0, "Recoll", msg); } } else { // On the first run, show missing helpers. We only do this once if (m_firstIndexing) showMissingHelpers(); if (!reasonmsg.isEmpty()) { QString msg = tr("Non-fatal indexing message: "); msg.append(reasonmsg); QMessageBox::warning(0, "Recoll", msg); } } string reason; maybeOpenDb(reason, 1); populateSideFilters(SFUR_INDEXCONTENTS); } else { // update/show status even if the status file did not // change (else the status line goes blank during // lengthy operations). isMonitor = updateIdxStatus(); } } // Update the "start/stop indexing" menu entry, can't be done from // the "start/stop indexing" slot itself IndexerState prevstate = m_indexerState; if (m_idxproc) { m_indexerState = IXST_RUNNINGMINE; fileToggleIndexingAction->setText(tr("Stop &Indexing")); fileToggleIndexingAction->setEnabled(true); fileStartMonitorAction->setEnabled(false); fileBumpIndexingAction->setEnabled(isMonitor); fileRebuildIndexAction->setEnabled(false); actionSpecial_Indexing->setEnabled(false); periodictimer->setInterval(200); } else { Pidfile pidfile(theconfig->getPidfile()); pid_t pid = pidfile.open(); fileBumpIndexingAction->setEnabled(false); if (pid == getpid()) { // Locked by me m_indexerState = IXST_NOTRUNNING; fileToggleIndexingAction->setText(tr("Index locked")); fileToggleIndexingAction->setEnabled(false); fileStartMonitorAction->setEnabled(false); fileBumpIndexingAction->setEnabled(false); fileRebuildIndexAction->setEnabled(false); actionSpecial_Indexing->setEnabled(false); periodictimer->setInterval(1000); } else if (pid == 0) { m_indexerState = IXST_NOTRUNNING; fileToggleIndexingAction->setText(tr("Update &Index")); fileToggleIndexingAction->setEnabled(true); fileStartMonitorAction->setEnabled(true); fileBumpIndexingAction->setEnabled(false); fileRebuildIndexAction->setEnabled(true); actionSpecial_Indexing->setEnabled(true); periodictimer->setInterval(1000); } else { // Real time or externally started batch indexer running m_indexerState = IXST_RUNNINGNOTMINE; fileToggleIndexingAction->setText(tr("Stop &Indexing")); fileToggleIndexingAction->setEnabled(true); DbIxStatus status; readIdxStatus(theconfig, status); if (status.hasmonitor) { // Real-time indexer running. We can trigger an // incremental pass fileBumpIndexingAction->setEnabled(true); } fileStartMonitorAction->setEnabled(false); fileRebuildIndexAction->setEnabled(false); actionSpecial_Indexing->setEnabled(false); periodictimer->setInterval(200); } } if ((prevstate == IXST_RUNNINGMINE || prevstate == IXST_RUNNINGNOTMINE) && m_indexerState == IXST_NOTRUNNING) { showTrayMessage(tr("Indexing done")); } // Possibly cleanup the dead viewers for (auto it = m_viewers.begin(); it != m_viewers.end(); ) { int status; if ((*it)->maybereap(&status)) { delete *it; it = m_viewers.erase(it); } else { it++; } } } bool RclMain::checkIdxPaths() { string badpaths; vector args{recollindex, "-c", theconfig->getConfDir(), "-E"}; ExecCmd::backtick(args, badpaths); if (!badpaths.empty()) { int rep = QMessageBox::warning( 0, tr("Bad paths"), tr("Empty or non-existant paths in configuration file. " "Click Ok to start indexing anyway " "(absent data will not be purged from the index):\n") + path2qs(badpaths), QMessageBox::Ok | QMessageBox::Cancel); if (rep == QMessageBox::Cancel) return false; } return true; } // This gets called when the "Update index/Stop indexing" action is // activated. It executes the requested action. The menu // entry will be updated by the indexing status check void RclMain::toggleIndexing() { switch (m_indexerState) { case IXST_RUNNINGMINE: if (m_idxproc) { // Indexing was in progress, request stop. Let the periodic // routine check for the results. if (m_idxproc->requestChildExit()) { m_idxkilled = true; } } break; case IXST_RUNNINGNOTMINE: { #ifdef _WIN32 // No simple way to signal the process. Use the stop file std::fstream ost; if (!path_streamopen(theconfig->getIdxStopFile(), std::fstream::out, ost)) { LOGSYSERR("toggleIndexing", "path_streamopen", theconfig->getIdxStopFile()); } #else Pidfile pidfile(theconfig->getPidfile()); pid_t pid = pidfile.open(); if (pid > 0) kill(pid, SIGTERM); #endif // !_WIN32 } break; case IXST_NOTRUNNING: { // Could also mean that no helpers are missing, but then we won't try to show a message // anyway (which is what firstIndexing is used for) string mhd; m_firstIndexing = !theconfig->getMissingHelperDesc(mhd); if (!checkIdxPaths()) { return; } vector args{"-c", theconfig->getConfDir()}; if (m_idxreasontmp && m_idxreasontmp->ok()) { args.push_back("-R"); args.push_back(m_idxreasontmp->filename()); } m_idxproc = new ExecCmd; m_idxproc->startExec(recollindex, args, false, false); } break; case IXST_UNKNOWN: return; } } void RclMain::startMonitor() { DbIxStatus status; readIdxStatus(theconfig, status); if (nullptr == m_idxproc && m_indexerState == IXST_NOTRUNNING) { if (!checkIdxPaths()) { return; } vector args{"-c", theconfig->getConfDir()}; if (m_idxreasontmp && m_idxreasontmp->ok()) { args.push_back("-R"); args.push_back(m_idxreasontmp->filename()); } args.push_back("-mw"); args.push_back("0"); m_idxproc = new ExecCmd; m_idxproc->startExec(recollindex, args, false, false); } } void RclMain::bumpIndexing() { DbIxStatus status; readIdxStatus(theconfig, status); if (status.hasmonitor) { path_utimes(path_cat(theconfig->getConfDir(), "recoll.conf"), nullptr); } } static void delay(int millisecondsWait) { QEventLoop loop; QTimer t; t.connect(&t, SIGNAL(timeout()), &loop, SLOT(quit())); t.start(millisecondsWait); loop.exec(); } void RclMain::rebuildIndex() { if (!m_idxreasontmp || !m_idxreasontmp->ok()) { // We just store the pointer and let the tempfile cleaner deal // with delete on exiting TempFile temp(".txt"); m_idxreasontmp = rememberTempFile(temp); } if (m_indexerState == IXST_UNKNOWN) { delay(1500); } switch (m_indexerState) { case IXST_UNKNOWN: case IXST_RUNNINGMINE: case IXST_RUNNINGNOTMINE: return; //?? Should not have been called case IXST_NOTRUNNING: { if (m_idxproc) { LOGERR("RclMain::rebuildIndex: current indexer exec not null\n" ); return; } int rep = QMessageBox::Ok; if (path_exists(theconfig->getDbDir())) { rep = QMessageBox::warning( 0, tr("Erasing index"), tr("Reset the index and start from scratch ?"), QMessageBox::Ok | QMessageBox::Cancel); } if (rep == QMessageBox::Ok) { #ifdef _WIN32 // Under windows, it is necessary to close the db here, // else Xapian won't be able to do what it wants with the // (open) files. Of course if there are several GUI // instances, this won't work... Also it's quite difficult // to make sure that there are no more references to the // db because, for example of the Enquire objects inside // Query inside Docsource etc. // // !! At this moment, this does not work if a preview has // !! been opened. Could not find the reason (mysterious // !! Xapian::Database reference somewhere?). The indexing // !! fails, leaving a partial index directory. Then need // !! to restart the GUI to succeed in reindexing. if (rcldb) { resetSearch(); deleteZ(m_snippets); rcldb->close(); } #endif // _WIN32 // Could also mean that no helpers are missing, but then we // won't try to show a message anyway (which is what // firstIndexing is used for) string mhd; m_firstIndexing = !theconfig->getMissingHelperDesc(mhd); if (!checkIdxPaths()) { return; } vector args{"-c", theconfig->getConfDir(), "-z"}; if (m_idxreasontmp && m_idxreasontmp->ok()) { args.push_back("-R"); args.push_back(m_idxreasontmp->filename()); } m_idxproc = new ExecCmd; m_idxproc->startExec(recollindex, args, false, false); } } break; } } void SpecIdxW::onTargBrowsePB_clicked() { QString dir = myGetFileName(true, tr("Top indexed entity"), true); targLE->setText(dir); } void SpecIdxW::onDiagsBrowsePB_clicked() { QString fn = myGetFileName(false, tr("Diagnostics file")); diagsLE->setText(fn); } bool SpecIdxW::noRetryFailed() { return !retryFailedCB->isChecked(); } bool SpecIdxW::eraseFirst() { return eraseBeforeCB->isChecked(); } std::vector SpecIdxW::selpatterns() { vector pats; string text = qs2utf8s(selPatsLE->text()); if (!text.empty()) { stringToStrings(text, pats); } return pats; } std::string SpecIdxW::toptarg() { return qs2utf8s(targLE->text()); } std::string SpecIdxW::diagsfile() { return qs2utf8s(diagsLE->text()); } void SpecIdxW::onTargLE_textChanged(const QString& text) { if (text.isEmpty()) selPatsLE->setEnabled(false); else selPatsLE->setEnabled(true); } static string execToString(const string& cmd, const vector& args) { string command = cmd + " "; for (vector::const_iterator it = args.begin(); it != args.end(); it++) { command += "{" + *it + "} "; } return command; } void RclMain::specialIndex() { LOGDEB("RclMain::specialIndex\n" ); if (!m_idxreasontmp || !m_idxreasontmp->ok()) { // We just store the pointer and let the tempfile cleaner deal // with delete on exiting TempFile temp(".txt"); m_idxreasontmp = rememberTempFile(temp); } switch (m_indexerState) { case IXST_UNKNOWN: case IXST_RUNNINGMINE: case IXST_RUNNINGNOTMINE: return; //?? Should not have been called case IXST_NOTRUNNING: default: break; } if (m_idxproc) { LOGERR("RclMain::rebuildIndex: current indexer exec not null\n" ); return; } if (!specidx) // ?? return; vector args{"-c", theconfig->getConfDir()}; if (m_idxreasontmp && m_idxreasontmp->ok()) { args.push_back("-R"); args.push_back(m_idxreasontmp->filename()); } string top = specidx->toptarg(); if (!top.empty()) { args.push_back("-r"); } string diagsfile = specidx->diagsfile(); if (!diagsfile.empty()) { args.push_back("--diagsfile"); args.push_back(diagsfile); } if (specidx->eraseFirst()) { if (top.empty()) { args.push_back("-Z"); } else { args.push_back("-e"); // -e also needs -i, else we don't reindex, just erase args.push_back("-i"); } } if (!specidx->noRetryFailed()) { args.push_back("-k"); } else { args.push_back("-K"); } vector selpats = specidx->selpatterns(); if (!selpats.empty() && top.empty()) { QMessageBox::warning(0, tr("Selection patterns need topdir"), tr("Selection patterns can only be used with a " "start directory"), QMessageBox::Ok, QMessageBox::NoButton); return; } for (vector::const_iterator it = selpats.begin(); it != selpats.end(); it++) { args.push_back("-p"); args.push_back(*it); } if (!top.empty()) { args.push_back(top); } m_idxproc = new ExecCmd; LOGINFO("specialIndex: exec: " << execToString(recollindex, args) << std::endl); m_idxproc->startExec(recollindex, args, false, false); } void RclMain::updateIdxForDocs(vector& docs) { if (m_idxproc) { QMessageBox::warning(0, tr("Warning"), tr("Can't update index: indexer running"), QMessageBox::Ok, QMessageBox::NoButton); return; } vector paths; if (Rcl::docsToPaths(docs, paths)) { vector args{"-c", theconfig->getConfDir(), "-i",}; if (m_idxreasontmp && m_idxreasontmp->ok()) { args.push_back("-R"); args.push_back(m_idxreasontmp->filename()); } args.insert(args.end(), paths.begin(), paths.end()); m_idxproc = new ExecCmd; m_idxproc->startExec(recollindex, args, false, false); // Call periodic100 to update the menu entries states periodic100(); } else { QMessageBox::warning(0, tr("Warning"), tr("Can't update index: internal error"), QMessageBox::Ok, QMessageBox::NoButton); return; } } recoll-1.43.12/qtgui/spell_w.cpp0000644000175000017500000003727415121730573015767 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "log.h" #include "recoll.h" #include "spell_w.h" #include "guiutils.h" #include "rcldb.h" #include "searchdata.h" #include "rclquery.h" #include "rclhelp.h" #include "wasatorcl.h" #include "execmd.h" #include "indexer.h" #include "fstreewalk.h" using std::list; using std::multimap; using std::string; using std::vector; using std::pair; inline bool wordlessMode(SpellW::comboboxchoice v) { return (v == SpellW::TYPECMB_STATS || v == SpellW::TYPECMB_FAILED); } void SpellW::init() { m_c2t.clear(); expTypeCMB->addItem(tr("Wildcards")); m_c2t.push_back(TYPECMB_WILD); expTypeCMB->addItem(tr("Regexp")); m_c2t.push_back(TYPECMB_REG); expTypeCMB->addItem(tr("Stem expansion")); m_c2t.push_back(TYPECMB_STEM); expTypeCMB->addItem(tr("Spelling/Phonetic")); m_c2t.push_back(TYPECMB_SPELL); expTypeCMB->addItem(tr("Show index statistics")); m_c2t.push_back(TYPECMB_STATS); expTypeCMB->addItem(tr("List files which could not be indexed (slow)")); m_c2t.push_back(TYPECMB_FAILED); // Stemming language combobox stemLangCMB->clear(); vector langs; if (!getStemLangs(langs)) { QMessageBox::warning(0, "Recoll", tr("error retrieving stemming languages")); } for (vector::const_iterator it = langs.begin(); it != langs.end(); it++) { stemLangCMB->addItem(u8s2qs(*it)); } (void)new HelpClient(this); HelpClient::installMap((const char *)this->objectName().toUtf8(), "RCL.SEARCH.GUI.TERMEXPLORER"); // signals and slots connections connect(baseWordLE, SIGNAL(textChanged(const QString&)), this, SLOT(wordChanged(const QString&))); connect(baseWordLE, SIGNAL(returnPressed()), this, SLOT(doExpand())); connect(expandPB, SIGNAL(clicked()), this, SLOT(doExpand())); connect(dismissPB, SIGNAL(clicked()), this, SLOT(close())); connect(expTypeCMB, SIGNAL(activated(int)), this, SLOT(onModeChanged(int))); resTW->setShowGrid(0); #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) resTW->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); #else resTW->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch); #endif resTW->verticalHeader()->setDefaultSectionSize(20); connect(resTW, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(textDoubleClicked(int, int))); resTW->setColumnWidth(0, 200); resTW->setColumnWidth(1, 150); resTW->installEventFilter(this); int idx = cmbIdx((comboboxchoice)prefs.termMatchType); expTypeCMB->setCurrentIndex(idx); onModeChanged(idx); } int SpellW::cmbIdx(comboboxchoice mode) { vector::const_iterator it = std::find(m_c2t.begin(), m_c2t.end(), mode); if (it == m_c2t.end()) it = m_c2t.begin(); return it - m_c2t.begin(); } static const int maxexpand = 10000; /* Expand term according to current mode */ void SpellW::doExpand() { int idx = expTypeCMB->currentIndex(); if (idx < 0 || idx >= int(m_c2t.size())) idx = 0; comboboxchoice mode = m_c2t[idx]; // Can't clear qt4 table widget: resets column headers too resTW->setRowCount(0); if (baseWordLE->text().isEmpty() && !wordlessMode(mode)) return; string reason; if (!maybeOpenDb(reason, false)) { QMessageBox::critical(0, "Recoll", QString(reason.c_str())); LOGDEB("SpellW::doExpand: db error: " << (reason) << "\n" ); return; } int mt; switch(mode) { case TYPECMB_WILD: mt = Rcl::Db::ET_WILD; break; case TYPECMB_REG: mt = Rcl::Db::ET_REGEXP; break; case TYPECMB_STEM: mt = Rcl::Db::ET_STEM; break; default: mt = Rcl::Db::ET_WILD; } if (caseSensCB->isChecked()) { mt |= Rcl::Db::ET_CASESENS; } if (diacSensCB->isChecked()) { mt |= Rcl::Db::ET_DIACSENS; } Rcl::TermMatchResult res; string expr = string((const char *)baseWordLE->text().toUtf8()); Rcl::DbStats dbs; rcldb->dbStats(dbs, false); switch (mode) { case TYPECMB_WILD: default: case TYPECMB_REG: case TYPECMB_STEM: { string l_stemlang = qs2utf8s(stemLangCMB->currentText()); if (!rcldb->termMatch(mt, l_stemlang, expr, res, maxexpand)) { LOGERR("SpellW::doExpand:rcldb::termMatch failed\n" ); return; } statsLBL->setText(tr("Index: %1 documents, average length %2 terms." "%3 results") .arg(dbs.dbdoccount).arg(dbs.dbavgdoclen, 0, 'f', 0) .arg(res.entries.size())); } break; case TYPECMB_SPELL: { LOGDEB("SpellW::doExpand: spelling [" << expr << "]\n" ); vector suggs; if (!rcldb->getSpellingSuggestions(expr, suggs)) { QMessageBox::warning(0, "Recoll", tr("Spell expansion error.")); } for (const auto& it : suggs) { res.entries.push_back(Rcl::TermMatchEntry(it)); } statsLBL->setText(tr("%1 results").arg(res.entries.size())); } break; case TYPECMB_STATS: { showStats(); return; } break; case TYPECMB_FAILED: { showFailed(); return; } break; } if (res.entries.empty()) { resTW->setItem(0, 0, new QTableWidgetItem(tr("No expansion found"))); } else { int row = 0; // maxexpand is static const, thus guaranteed to be >0 if (int(res.entries.size()) >= maxexpand) { resTW->setRowCount(row + 1); resTW->setSpan(row, 0, 1, 2); resTW->setItem(row++, 0, new QTableWidgetItem( tr("List was truncated alphabetically, " "some frequent "))); resTW->setRowCount(row + 1); resTW->setSpan(row, 0, 1, 2); resTW->setItem(row++, 0, new QTableWidgetItem( tr("terms may be missing. " "Try using a longer root."))); resTW->setRowCount(row + 1); resTW->setItem(row++, 0, new QTableWidgetItem("")); } for (vector::iterator it = res.entries.begin(); it != res.entries.end(); it++) { LOGDEB2("SpellW::expand: " << it->wcf << " [" << it->term << "]\n"); char num[40]; if (it->wcf) snprintf(num, sizeof(num), "%d / %d", it->docs, it->wcf); else num[0] = 0; resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(u8s2qs(it->term))); resTW->setItem(row++, 1, new QTableWidgetItem(QString::fromUtf8(num))); } } } void SpellW::showStats() { statsLBL->setText(""); int row = 0; Rcl::DbStats res; if (!rcldb->dbStats(res, false)) { LOGERR("SpellW::doExpand:rcldb::dbStats failed\n" ); return; } resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr("Number of documents"))); resTW->setItem(row++, 1, new QTableWidgetItem( QString::number(res.dbdoccount))); resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr("Average terms per document"))); resTW->setItem(row++, 1, new QTableWidgetItem( QString::number(res.dbavgdoclen, 'f', 0))); resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr("Smallest document length (terms)"))); resTW->setItem(row++, 1, new QTableWidgetItem( QString::number(res.mindoclen))); resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr("Longest document length (terms)"))); resTW->setItem(row++, 1, new QTableWidgetItem( QString::number(res.maxdoclen))); if (!theconfig) return; DbIxStatus st; readIdxStatus(theconfig, st); resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr("Results from last indexing:"))); resTW->setItem(row++, 1, new QTableWidgetItem("")); resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr(" Documents created/updated"))); resTW->setItem(row++, 1, new QTableWidgetItem(QString::number(st.docsdone))); resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr(" Files tested"))); resTW->setItem(row++, 1, new QTableWidgetItem(QString::number(st.filesdone))); resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr(" Unindexed files"))); resTW->setItem(row++, 1, new QTableWidgetItem(QString::number(st.fileerrors))); baseWordLE->setText(path2qs(theconfig->getDbDir())); int64_t dbkbytes = fsTreeBytes(theconfig->getDbDir()) / 1024; if (dbkbytes < 0) { dbkbytes = 0; } resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr("Database directory size"))); resTW->setItem(row++, 1, new QTableWidgetItem( u8s2qs(displayableBytes(dbkbytes*1024)))); vector allmimetypes = theconfig->getAllMimeTypes(); multimap mtbycnt; for (vector::const_iterator it = allmimetypes.begin(); it != allmimetypes.end(); it++) { string reason; string q = string("mime:") + *it; std::shared_ptr sd = wasaStringToRcl(theconfig, "", q, reason); Rcl::Query query(rcldb.get()); if (!query.setQuery(sd)) { LOGERR("Query setup failed: " << (query.getReason()) << "" ); return; } int cnt = query.getResCnt(); mtbycnt.insert(pair(cnt,*it)); } resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(tr("MIME types:"))); resTW->setItem(row++, 1, new QTableWidgetItem("")); for (multimap::const_reverse_iterator it = mtbycnt.rbegin(); it != mtbycnt.rend(); it++) { resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(QString(" ") + u8s2qs(it->second))); resTW->setItem(row++, 1, new QTableWidgetItem( QString::number(it->first))); } } void SpellW::showFailed() { statsLBL->setText(""); int row = 0; Rcl::DbStats res; if (!rcldb->dbStats(res, true)) { LOGERR("SpellW::doExpand:rcldb::dbStats failed\n" ); return; } for (const auto &entry : res.failedurls) { resTW->setRowCount(row+1); resTW->setItem(row, 0, new QTableWidgetItem(u8s2qs(entry))); resTW->setItem(row++, 1, new QTableWidgetItem("")); } } void SpellW::wordChanged(const QString &text) { if (text.isEmpty()) { expandPB->setEnabled(false); resTW->setRowCount(0); } else { expandPB->setEnabled(true); } } void SpellW::textDoubleClicked() {} void SpellW::textDoubleClicked(int row, int) { QTableWidgetItem *item = resTW->item(row, 0); if (item) emit wordSelect(item->text()); } void SpellW::onModeChanged(int idx) { if (idx < 0 || idx > int(m_c2t.size())) return; comboboxchoice mode = m_c2t[idx]; setModeCommon(mode); } void SpellW::setMode(comboboxchoice mode) { expTypeCMB->setCurrentIndex(cmbIdx(mode)); setModeCommon(mode); } void SpellW::setModeCommon(comboboxchoice mode) { if (wordlessMode(m_prevmode)) { baseWordLE->setText(""); } m_prevmode = mode; resTW->setRowCount(0); if (o_index_stripchars) { caseSensCB->setEnabled(false); diacSensCB->setEnabled(false); } else { caseSensCB->setEnabled(true); diacSensCB->setEnabled(true); } if (mode == TYPECMB_STEM) { stemLangCMB->setEnabled(true); diacSensCB->setChecked(false); diacSensCB->setEnabled(false); caseSensCB->setChecked(false); caseSensCB->setEnabled(false); } else { stemLangCMB->setEnabled(false); } if (wordlessMode(mode)) { baseWordLE->setEnabled(false); QStringList labels(tr("Item")); labels.push_back(tr("Value")); resTW->setHorizontalHeaderLabels(labels); diacSensCB->setEnabled(false); caseSensCB->setEnabled(false); doExpand(); } else { baseWordLE->setEnabled(true); QStringList labels(tr("Term")); labels.push_back(tr("Doc. / Tot.")); resTW->setHorizontalHeaderLabels(labels); prefs.termMatchType = mode; } } void SpellW::copy() { QItemSelectionModel * selection = resTW->selectionModel(); QModelIndexList indexes = selection->selectedIndexes(); if(indexes.size() < 1) return; // QModelIndex::operator < sorts first by row, then by column. // this is what we need std::sort(indexes.begin(), indexes.end()); // You need a pair of indexes to find the row changes QModelIndex previous = indexes.first(); indexes.removeFirst(); QString selected_text; QModelIndex current; Q_FOREACH(current, indexes) { QVariant data = resTW->model()->data(previous); QString text = data.toString(); // At this point `text` contains the text in one cell selected_text.append(text); // If you are at the start of the row the row number of the previous index // isn't the same. Text is followed by a row separator, which is a newline. if (current.row() != previous.row()) { selected_text.append(QLatin1Char('\n')); } // Otherwise it's the same row, so append a column separator, which is a tab. else { selected_text.append(QLatin1Char('\t')); } previous = current; } // add last element selected_text.append(resTW->model()->data(current).toString()); selected_text.append(QLatin1Char('\n')); qApp->clipboard()->setText(selected_text, QClipboard::Selection); qApp->clipboard()->setText(selected_text, QClipboard::Clipboard); } bool SpellW::eventFilter(QObject *target, QEvent *event) { if (event->type() != QEvent::KeyPress || (target != resTW && target != resTW->viewport())) return false; QKeyEvent *keyEvent = (QKeyEvent *)event; if(keyEvent->matches(QKeySequence::Copy) ) { copy(); return true; } return false; } recoll-1.43.12/qtgui/specialindex.ui0000644000175000017500000001263314753313624016621 0ustar dockesdockes SpecIdxW Qt::WindowModal 0 0 610 192 Special Indexing Retry previously failed files. Else only modified or failed files will be processed. Erase selected files data before indexing. 8 0 300 0 Directory to recursively index. This must be inside the regular indexed area<br> as defined in the configuration file (topdirs). Browse false Start directory. Must be part of the indexed tree. Use full indexed area if empty. false Leave empty to select all files. You can use multiple space-separated shell-type patterns.<br>Patterns with embedded spaces should be quoted with double quotes.<br>Can only be used if the start target is set. Selection patterns: 8 0 300 0 Browse false Diagnostics output file. Will be truncated and receive indexing diagnostics (reasons for files not being indexed). false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() SpecIdxW accept() 248 254 157 274 buttonBox rejected() SpecIdxW reject() 316 260 286 274 recoll-1.43.12/qtgui/rclzg.cpp0000644000175000017500000000517314753313624015440 0ustar dockesdockes/* Copyright (C) 2012 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifdef USE_ZEITGEIST #include "autoconfig.h" #include "rclzg.h" #include "log.h" #include "pathut.h" #include #include #include #include #include #include #include // Can't see no reason why our logger couldn' static QtZeitgeist::Log zglogger; void zg_send_event(ZgSendType, const Rcl::Doc& doc) { static int needinit = 1; if (needinit) { QtZeitgeist::init(); needinit = 0; } // The subject is about the document QtZeitgeist::DataModel::Subject subject; subject.setUri(QString::fromLocal8Bit(doc.url.c_str())); // TODO: refine these subject.setInterpretation(QtZeitgeist::Interpretation::Subject::NFODocument); if (doc.ipath.empty()) subject.setManifestation(QtZeitgeist::Manifestation::Subject::NFOFileDataObject); else subject.setManifestation(QtZeitgeist::Manifestation::Subject::NFOEmbeddedFileDataObject); subject.setOrigin(QString::fromLocal8Bit(path_getfather(doc.url).c_str())); subject.setMimeType(doc.mimetype.c_str()); string titleOrFilename; doc.getmeta(Rcl::Doc::keytt, &titleOrFilename); if (titleOrFilename.empty()) { doc.getmeta(Rcl::Doc::keyfn, &titleOrFilename); } subject.setText(QString::fromUtf8(titleOrFilename.c_str())); QtZeitgeist::DataModel::Event event; event.setTimestamp(QDateTime::currentDateTime()); event.addSubject(subject); event.setInterpretation(QtZeitgeist::Interpretation::Event::ZGAccessEvent); event.setManifestation(QtZeitgeist::Manifestation::Event::ZGUserActivity); event.setActor("app://recoll.desktop"); QtZeitgeist::DataModel::EventList events; events.push_back(event); LOGDEB("zg_send_event, sending for " << (doc.mimetype) << " " << (doc.url) << "\n" ); zglogger.insertEvents(events); } #endif recoll-1.43.12/qtgui/singleapplication.pri0000644000175000017500000000063315121730573020024 0ustar dockesdockesQT += core network CONFIG += c++11 HEADERS += \ $$PWD/singleapplication/singleapplication.h \ $$PWD/singleapplication/singleapplication_p.h SOURCES += $$PWD/singleapplication/singleapplication.cpp \ $$PWD/singleapplication/singleapplication_p.cpp INCLUDEPATH += $$PWD/singleapplication DEFINES += QAPPLICATION_CLASS=QApplication win32 { msvc:LIBS += Advapi32.lib gcc:LIBS += -ladvapi32 } recoll-1.43.12/qtgui/crontool.h0000644000175000017500000000250214753313624015614 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _CRONTOOL_W_H_INCLUDED_ #define _CRONTOOL_W_H_INCLUDED_ #include "ui_crontool.h" class QPushButton; class CronToolW : public QDialog, public Ui::CronToolW { Q_OBJECT public: CronToolW(QWidget * parent = 0) : QDialog(parent), enableButton(0), disableButton(0) { setupUi(this); init(); } QPushButton *enableButton; QPushButton *disableButton; private slots: void enableCron(); void disableCron(); private: void init(); void changeCron(bool enable); }; #endif /* _CRONTOOL_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/preview_plaintorich.cpp0000644000175000017500000001555415121730573020374 0ustar dockesdockes/* Copyright (C) 2014-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include "preview_plaintorich.h" #include "preview_w.h" #include "recoll.h" #include "plaintorich.h" #include "log.h" #include "guiutils.h" #include "cancelcheck.h" #include "cstr.h" #include "hldata.h" using namespace std; PlainToRichQtPreview::PlainToRichQtPreview() { clear(); } void PlainToRichQtPreview::clear() { m_curanchor = 1; m_lastanchor = 0; m_groupanchors.clear(); m_groupcuranchors.clear(); QSettings settings; m_spacehack = settings.value("anchorSpcHack", 0).toBool(); } bool PlainToRichQtPreview::haveAnchors() { return m_lastanchor != 0; } string PlainToRichQtPreview::header() { std::string hstyle("\n"; int opts = PrefsPack::HHC_NOUSER; if (m_inputhtml && !prefs.previewdarkbg) { opts |= PrefsPack::HHC_NODARK; } std::string fontstyle = prefs.htmlHeaderContents(opts); if (m_inputhtml) { return fontstyle + hstyle; } std::string ret = std::string("") + fontstyle + hstyle + ""; switch (prefs.previewPlainPre) { case PrefsPack::PP_BR: m_eolbr = true; break; case PrefsPack::PP_PRE: m_eolbr = false; ret += std::string("
");
        break;
    case PrefsPack::PP_PREWRAP:
    default:
        m_eolbr = false;
        ret += std::string("
";
    }
    return ret;
}

string PlainToRichQtPreview::startMatch(unsigned int grpidx)
{
    LOGDEB2("startMatch, grpidx " << grpidx << "\n");
    grpidx = static_cast(m_hdata->index_term_groups[grpidx].grpsugidx);
    LOGDEB2("startMatch, ugrpidx " << grpidx << "\n");
    m_groupanchors[grpidx].push_back(++m_lastanchor);
    m_groupcuranchors[grpidx] = 0;
    // We used to create the region as:
    //     term
    // For some reason, when using a QTextBrowser, this caused problems with the display of some
    // Tamil text (qt bug?). Just inserting a space character after the opening  section. Also: having  before the match term causes the same problem (so not a possible fix).  Space
    // does not seem to work any more (2021-04) ?
    //   Zero Width Non Joiner works but is displayed as ? sometimes on windows.
    //  nbsp seems to now work !
    string hackspace = m_spacehack? " " : "";
    string startmarker{
        "" +
        hackspace +
        "" 
    };
    return startmarker;
}

string  PlainToRichQtPreview::endMatch()
{
    return "";
}

string  PlainToRichQtPreview::termAnchorName(int i) const
{
    static const char *termAnchorNameBase = "TRM";
    char acname[sizeof(termAnchorNameBase) + 20];
    snprintf(acname, sizeof(acname), "%s%d", termAnchorNameBase, i);
    return string(acname);
}

string  PlainToRichQtPreview::startChunk()
{
    // QTextBrowser needs 
 to be repeated for each chunk for some reason. This confuses the
    // others
#ifdef PREVIEW_FORCETEXTBROWSER
    return "
";
#else
    return "";
#endif
}

int  PlainToRichQtPreview::nextAnchorNum(int grpidx)
{
    LOGDEB2("nextAnchorNum: group " << grpidx << "\n");
    auto curit = m_groupcuranchors.find(grpidx);
    auto vecit = m_groupanchors.find(grpidx);
    if (grpidx == -1 || curit == m_groupcuranchors.end() || vecit == m_groupanchors.end()) {
        if (m_curanchor >= m_lastanchor)
            m_curanchor = 1;
        else
            m_curanchor++;
        return m_curanchor;
    } else {
        if (curit->second >= vecit->second.size() -1)
            m_groupcuranchors[grpidx] = 0;
        else 
            m_groupcuranchors[grpidx]++;
        m_curanchor = vecit->second[m_groupcuranchors[grpidx]];
        return m_groupcuranchors[grpidx] + 1;
    }
}

int  PlainToRichQtPreview::prevAnchorNum(int grpidx)
{
    auto curit = m_groupcuranchors.find(grpidx);
    auto vecit = m_groupanchors.find(grpidx);
    if (grpidx == -1 || curit == m_groupcuranchors.end() || vecit == m_groupanchors.end()) {
        if (m_curanchor <= 1)
            m_curanchor = m_lastanchor;
        else
            m_curanchor--;
        return m_curanchor;
    } else {
        if (curit->second <= 0)
            m_groupcuranchors[grpidx] = static_cast(vecit->second.size() -1);
        else 
            m_groupcuranchors[grpidx]--;
        m_curanchor = vecit->second[m_groupcuranchors[grpidx]];
        return m_groupcuranchors[grpidx] + 1;
    }
}

int PlainToRichQtPreview::anchorCount(int grpidx)
{
    if (grpidx == -1)
        return m_lastanchor;
    auto vecit = m_groupanchors.find(grpidx);
    if (vecit == m_groupanchors.end()) {
        return 0;
    }
    return vecit->second.size();
}

QString  PlainToRichQtPreview::curAnchorName() const
{
    return u8s2qs(termAnchorName(m_curanchor));
}


ToRichThread::ToRichThread(const string &i, const HighlightData& hd,
                           std::shared_ptr ptr,
                           QStringList& qrichlist,
                           QObject *parent)
    : QThread(parent), m_input(i), m_hdata(hd), m_ptr(ptr), m_output(qrichlist)
{
}

// Insert into editor by chunks so that the top becomes visible
// earlier for big texts. This provokes some artifacts (adds empty line),
// so we can't set it too low.
#define CHUNKL 500*1000

void ToRichThread::run()
{
    list out;
    try {
        m_ptr->plaintorich(m_input, out, m_hdata, CHUNKL);
    } catch (CancelExcept) {
        return;
    }

    // Convert C++ string list to QString list
    for (const auto& chunk : out) {
        m_output.push_back(u8s2qs(chunk));
    }
}
recoll-1.43.12/qtgui/rtitool.cpp0000644000175000017500000001420215121730573016000 0ustar  dockesdockes#ifndef _WIN32
/* Copyright (C) 2005 J.F.Dockes
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the
 *   Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
#include 

#include 

#include 
#include 
#include 
#include 

#include "recoll.h"
#include "rtitool.h"
#include "smallut.h"
#include "pathut.h"
#include "copyfile.h"
#include "readfile.h"
#include "execmd.h"


std::string RTIToolW::getautostartfn()
{
    const static QString settingskey_confignick("/Recoll/prefs/index/confignickname");
    std::string autostartfile;
    std::string confighome;
    auto xdg = getenv("XDG_CONFIG_HOME");
    if (xdg) {
        confighome = xdg;
    } else {
        confighome = path_cat(path_home(), ".config/autostart");
    }
    if (theconfig->isDefaultConfig()) {
        return path_cat(confighome, "recollindex.desktop");
    } 

    if (confignick.empty()) {
        // Not the default configuration. Check if we stored the nickname, else ask for it
        QSettings settings(
            u8s2qs(path_cat(theconfig->getConfDir(), "recollgui.ini")), QSettings::IniFormat);
        QString qnm = settings.value(settingskey_confignick).toString();
        if (qnm.isEmpty()) {
            qnm = QInputDialog::getText(
                this, tr("Configuration name"), tr("Short alphanumeric nickname for this config"));
            if (qnm.isEmpty()) {
                return std::string();
            }
            settings.setValue(settingskey_confignick, qnm);
        }
        confignick = qs2path(qnm);
    }
    return path_cat(confighome, std::string("recollindex-") + confignick + ".desktop");
}

void RTIToolW::init()
{
    connect(this->sesCB, SIGNAL(clicked(bool)), this, SLOT(sesclicked(bool)));
    std::string autostartfile = getautostartfn();
    if (!autostartfile.empty() && path_exists(autostartfile)) {
        sesCB->setChecked(true);
    }
}

void RTIToolW::sesclicked(bool on)
{
    nowCB->setEnabled(on);
    if (!on)
        nowCB->setChecked(false);
}

void RTIToolW::accept()
{
    bool exitdial = false;

    auto autostartfile = getautostartfn();
    if (autostartfile.empty())
        return;

    if (sesCB->isChecked()) {
        // Setting up daemon indexing autostart

        if (path_exists(autostartfile)) {
            QString msg = tr("Replacing: ") + path2qs(autostartfile);
            QMessageBox::Button rep = QMessageBox::question(
                this, tr("Replacing file"), msg, QMessageBox::Ok | QMessageBox::Cancel);
            if (rep != QMessageBox::Ok) {
                return;
            }
        }

        std::string sourcefile = path_cat(theconfig->getDatadir(), "examples");
        sourcefile = path_cat(sourcefile, "recollindex.desktop");
        std::string prototext;
        if (path_exists(sourcefile)) {
            file_to_string(sourcefile, prototext);
        }
        if (prototext.empty()) {
            QMessageBox::warning(0, "Recoll", tr("Could not find ") + path2qs(sourcefile));
            return;
        }
        std::string text;
        pcSubst(prototext , text, {{'c', theconfig->getConfDir()}});
                
        // Try to create .config and autostart anyway. If they exists this will 
        // do nothing. An error will be detected when we try to create the file
        auto dir = path_cat(path_home(), ".config");
        path_makepath(dir, 0700);
        dir = path_cat(dir, "autostart");
        path_makepath(dir, 0700);

        std::string reason;
        if (!stringtofile(text, autostartfile.c_str(), reason)) {
            QString msg = tr("Can't create: ") + path2qs(autostartfile);
            QMessageBox::warning(0, tr("Warning"), msg, QMessageBox::Ok);
            return;
        }

        if (nowCB->isChecked()) {
            ExecCmd cmd;
            std::vector args; 
            int status;

            args.push_back("-m");
            args.push_back("-w");
            args.push_back("0");
            args.push_back("-c");
            args.push_back(theconfig->getConfDir());
            status = cmd.doexec("recollindex", args, 0, 0);
            if (status) {
                QMessageBox::warning(0, tr("Warning"), tr("Could not execute recollindex"), 
                                     QMessageBox::Ok);
                goto out;
            }
        }

        exitdial = true;
    } else {
        // Turning autostart off
        if (path_exists(autostartfile)) {
            QString msg = tr("Deleting: ") + path2qs(autostartfile);
            QMessageBox::Button rep = QMessageBox::question(
                this, tr("Deleting file"), msg, QMessageBox::Ok | QMessageBox::Cancel);
            if (rep == QMessageBox::Ok) {
                exitdial = true;
                unlink(autostartfile.c_str());
                if (theconfig) {
                    Pidfile pidfile(theconfig->getPidfile());
                    pid_t pid;
                    if ((pid = pidfile.open()) != 0) {
                        QMessageBox::Button rep = 
                            QMessageBox::question(
                                this, tr("Removing autostart"), 
                                tr("Autostart file deleted. Kill current process too ?"),
                                QMessageBox::Yes | QMessageBox::No);
                        if (rep == QMessageBox::Yes) {
                            kill(pid, SIGTERM);
                        }
                    }
                }
            }
        } else {
            exitdial = true;
        }
    }

out:
    if (exitdial)
        QDialog::accept();
}

#endif // _WIN32
recoll-1.43.12/qtgui/idxmodel.h0000644000175000017500000000257415121730573015567 0ustar  dockesdockes/* Copyright (C) 2022 J.F.Dockes
 *
 * License: GPL 2.1
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the
 * Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef _IDXMODEL_H
#define _IDXMODEL_H

#include 
#include 
#include 

class IdxTreeModel : public QStandardItemModel {
    Q_OBJECT
public:
    IdxTreeModel(int depth, const std::vector& edbs, QWidget *parent = nullptr)
        : QStandardItemModel(0, 0, (QObject*)parent), m_depth(depth), m_extradbs(edbs) {}
    ~IdxTreeModel() {}
    void populate();
    int getDepth() {return m_depth;}
    const std::vector &getEDbs() {return m_extradbs;}
  private:
    int m_depth;
    std::vector m_extradbs;
};

#endif // _IDXMODEL_H
recoll-1.43.12/qtgui/multisave.cpp0000644000175000017500000001151015121730573016314 0ustar  dockesdockes/* Copyright (C) 2005 J.F.Dockes
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the
 *   Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
#include "autoconfig.h"

#include 

#include 
#include 
#include 
using namespace std;

#include 
#include 
#include 

#include "recoll.h"
#include "multisave.h"
#include "smallut.h"
#include "log.h"
#include "pathut.h"
#include "internfile.h"
#include "rcldoc.h"

const unsigned int maxlen = 200;

void multiSave(QWidget *p, vector& docs)
{
    QFileDialog fdialog(p, QWidget::tr("Create or choose save directory"));
    fdialog.setAcceptMode(QFileDialog::AcceptSave);
    fdialog.setFileMode(QFileDialog::Directory);
    fdialog.setOption(QFileDialog::ShowDirsOnly);
    if (fdialog.exec() == 0) 
    return;
    QStringList dirl = fdialog.selectedFiles();
    if (dirl.size() != 1) {
    // Can't happen ?
    QMessageBox::warning(0, "Recoll",
                 QWidget::tr("Choose exactly one directory"));
    return;
    }
    string dir(qs2path(dirl[0]));
    LOGDEB2("multiSave: got dir " << dir << "\n");

    /* Save doc to files in target directory. Issues:
       - It is quite common to have docs in the array with the same
         file names, e.g. all messages in a folder have the same file
         name (the folder's).
       - There is no warranty that the ipath is going to be acceptable
         as a file name or interesting at all. We don't use it. 
       - We have to make sure the names don't end up too long.

       If collisions occur, we add a numeric infix (e.g. somefile.23.pdf).

       We never overwrite existing files and don't give the user an
       option to do it (they can just as well save to an empty
       directory and use the file manager to accomplish whatever they
       want).

       We don't try hard to protect against race-conditions
       though. The existing file names are read before beginning the
       save sequence, and collisions appearing after this are handled
       by aborting. There is a window between existence check and creation
       because idoctofile does not use O_EXCL
    */
    set existingNames;
    string reason;
    if (!listdir(dir, reason, existingNames)) {
    QMessageBox::warning(0, "Recoll",
                 QWidget::tr("Could not read directory: ") +
                 path2qs(reason));
    return;
    }

    set toBeCreated;
    vector filenames;
    for (vector::iterator it = docs.begin(); it != docs.end(); it++) {
    string utf8fn;
    it->getmeta(Rcl::Doc::keyfn, &utf8fn);
    string suffix = path_suffix(utf8fn);
    LOGDEB("Multisave: ["  << (utf8fn) << "] suff ["  << (suffix) << "]\n" );
    if (suffix.empty() || suffix.size() > 10) {
        suffix = theconfig->getSuffixFromMimeType(it->mimetype);
        LOGDEB("Multisave: suff from config ["  << (suffix) << "]\n" );
    }
    string simple = path_basename(utf8fn, string(".") + suffix);
    LOGDEB("Multisave: simple ["  << (simple) << "]\n" );
    if (simple.empty())
        simple = "rclsave";
    if (simple.size() > maxlen) {
        simple = simple.substr(0, maxlen);
    }
    for  (int vers = 0; ; vers++) {
        ostringstream ss;
        ss << simple;
        if (vers)
        ss << "." << vers;
        if (!suffix.empty()) 
        ss << "." << suffix;

        string fn = qs2path(u8s2qs(ss.str()));
        if (existingNames.find(fn) == existingNames.end() &&
        toBeCreated.find(fn) == toBeCreated.end()) {
        toBeCreated.insert(fn);
        filenames.push_back(fn);
        break;
        }
    }
    }
    
    for (unsigned int i = 0; i != docs.size(); i++) {
    string fn = path_cat(dir, filenames[i]);
    if (path_exists(fn)) {
        QMessageBox::warning(0, "Recoll",
                 QWidget::tr("Unexpected file name collision, "
                       "cancelling."));
        return;
    }
    // There is still a race condition here, should we care ?
    TempFile temp;// not used
    if (!FileInterner::idocToFile(temp, fn, theconfig, docs[i], false)) {
        QMessageBox::warning(
                0, "Recoll", QWidget::tr("Cannot extract document: ") +
                path2qs(docs[i].url) + " | " + u8s2qs(docs[i].ipath));
    }
    }
}

recoll-1.43.12/qtgui/guiutils.h0000644000175000017500000001762015121730572015624 0ustar  dockesdockes/* Copyright (C) 2005-2025 Jean-Francois Dockes 
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the
 *   Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
#ifndef _GUIUTILS_H_INCLUDED_
#define _GUIUTILS_H_INCLUDED_

#include 
#include 
#include 
#include 
#include 

#include 
#include 

/** Holder for preferences (gets saved to user Qt prefs) */
class PrefsPack {
public:
    // Simple search entry behaviour
    bool ssearchNoComplete;
    bool ssearchStartOnComplete;
    bool ssearchCompletePassive{false};
    // Decide if we display the doc category filter control as a
    // toolbar+combobox or as a button group under simple search
    enum FilterCtlStyle {FCS_BT, FCS_CMB, FCS_MN};
    int filterCtlStyle;
    int idxFilterTreeDepth{2};
    int respagesize{8};
    int historysize{-1};
    int maxhltextkbs;
    QString reslistfontfamily;
    int reslistfontsize;
    // Not saved
    int zoomincr{0};
    QString qtermstyle; // CSS style for query terms in reslist and other places
    // Result list format string
    QString reslistformat;
    std::string  creslistformat;

    enum ColorScheme {CS_LIGHT, CS_DARK, CS_SYSTEM};
#if (defined(_WIN32) || defined(__APPLE__)) && (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0))
    int colorscheme{CS_SYSTEM};
#else
    int colorscheme{CS_LIGHT};
#endif

    // Dark mode set: both qss and css will use the base + dark style and then the possible user
    // style. Computed on startup/style change. Not saved.
    bool darkMode;

    // This is either empty or the contents of the recoll-dark.css file if we are in dark mode.
    // Not saved/restored to prefs as it comes with recoll.
    QString darkreslistheadertext;
    // User result list header text. 
    QString reslistheadertext;

    //  User Qt style sheet.
    QString qssFile;
    
    QString snipCssFile;

    // Date strftime format
    std::string reslistdateformat;

    QString queryStemLang;
    enum ShowMode {SHOW_NORMAL, SHOW_MAX, SHOW_FULL};
    int showmode{SHOW_NORMAL};
    int pvwidth; // Preview window geom
    int pvheight;
    bool ssearchTypSav; // Remember last search mode (else always
    // start with same)
    int ssearchTyp{0};
    // Use single app (default: xdg-open), instead of per-mime settings
    bool useDesktopOpen; 
    // Remember sort state between invocations ?
    bool keepSort;   
    QString sortField;
    bool sortActive; 
    bool sortDesc; 
    // Abstract preferences. Building abstracts can slow result display
    bool queryBuildAbstract{true};
    bool queryReplaceAbstract{false};
    // Synthetized abstract length (chars) and word context size (words)
    int syntAbsLen;
    int syntAbsCtx;
    // Abstract snippet separator
    QString abssep;
    // Snippets window max list size
    int snipwMaxLength;
    // Snippets window sort by page (dflt: by weight)
    bool snipwSortByPage;
    // Display Snippets links even for un-paged documents
    bool alwaysSnippets;
    bool startWithAdvSearchOpen{false};
    // Try to display html if it exists in the internfile stack.
    bool previewHtml;
    bool previewActiveLinks;
    // Use 
 tag to display highlighted text/plain inside html (else
    // we use 
at end of lines, which lets textedit wrap lines). enum PlainPre {PP_BR, PP_PRE, PP_PREWRAP}; int previewPlainPre; bool collapseDuplicates; bool showResultsAsTable; // Extra query indexes. This are stored in the history file, not qt prefs std::vector allExtraDbs; std::vector activeExtraDbs; // Temporary value while we run a saved query. Erased right after use. bool useTmpActiveExtraDbs{false}; std::vector tmpActiveExtraDbs; // Advanced search subdir restriction: we don't activate the last value // but just remember previously entered values QStringList asearchSubdirHist; // Textual history of simple searches (this is just the combobox list) QStringList ssearchHistory; // Make phrase out of search terms and add to search in simple search bool ssearchAutoPhrase; double ssearchAutoPhraseThreshPC; // Ignored file types in adv search (startup default) QStringList asearchIgnFilTyps; bool fileTypesByCats; // Words that are automatically turned to ext:xx specs in the query // language entry. QString autoSuffs; bool autoSuffsEnable; // Synonyms file QString synFile; bool synFileEnable; // Remembered term match mode int termMatchType{0}; // Program version that wrote this. Not used for now, in prevision // of the case where we might need an incompatible change int rclVersion{1505}; // Suppress all noises bool noBeeps; bool noToolbars{false}; bool noClearSearch{false}; bool noStatusBar{false}; bool noMenuBar{false}; bool noSSTypCMB{false}; bool resTableTextNoShift{false}; bool resTableNoHoverMeta{false}; bool noResTableHeader{false}; bool showResTableVHeader{false}; bool noResTableRowJumpSC{false}; bool showTrayIcon{false}; bool closeToTray{false}; bool trayMessages{false}; double wholeuiscale{1.0}; bool autoSpell{false}; int autoSpellMaxDist{1}; bool showcompleterhitcounts{false}; int ssearchCompleterHistCnt{0}; QString sidefilterdateformat; bool ignwilds{false}; int pvmaxfldlen{0}; bool singleapp{false}; int previewLinesOverAnchor{4}; QString uilanguage; bool previewdarkbg{false}; /*INSERTHERE*/ // See widgets/qxtconfirmationmessage. // Values -1/positive. -1 will trigger the dialog. int showTempFileWarning{-1}; // Advanced search window clause list state std::vector advSearchClauses; // Default paragraph format for result list static const char *dfltResListFormat; std::string stemlang(); // HTML Header contents for both the result list, the snippets window and others enum HHC_Opts {HHC_NOUSER=1, HHC_NODARK=2}; std::string htmlHeaderContents(int opts=0); std::string snipCSS(); // MIME types for which we prefer to use stored text from preview // rather than extracting the possibly nicer HTML because the // extractor is very slow. This is compiled in and there is no UI // for now. std::set preferStoredTextMimes{"application/x-hwp"}; // Scale font-sizes inside css or qss input and return changed sheet. The font-size statements // need to be on their own line. static std::string scaleFonts(const std::string& style, float multiplier); // Application font settings. To be used for the HTML header if no specific preferences is set // Stored here, because we use it from a separate thread, which can't create an app widget when // running under wayland. This gets set in main() by a call to checkAppFont() after reading the // prefs and setting the app qss. int appFontSize{12}; std::string appFontFamily; void checkAppFont(); }; /** Global preferences record */ extern PrefsPack prefs; /** Read write settings from disk file */ extern void rwSettings(bool dowrite); extern QString g_stringAllStem, g_stringNoStem; /** Check that url is one of our internal links. returns char==0 else */ std::tuple internal_link(std::string url); #endif /* _GUIUTILS_H_INCLUDED_ */ recoll-1.43.12/qtgui/guiutils.cpp0000644000175000017500000010130315121730572016147 0ustar dockesdockes/* Copyright (C) 2005-2019 Jean-Francois Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #undef QT_NO_CAST_FROM_ASCII #include #include #include #include #include #include "recoll.h" #include "log.h" #include "smallut.h" #include "guiutils.h" #include "pathut.h" #include "readfile.h" #include "dynconf.h" #include #include #ifdef BUILDING_RECOLLGUI #include #include #include #include #endif using std::vector; using std::string; RclDynConf *g_dynconf; RclConfig *theconfig; #ifdef _WIN32 static const std::string dirlistsep{";"}; // The web default font family is too ugly on windows, set a different one static const char *defaultfontfamily = "Arial"; #else static const std::string dirlistsep{":"}; static const char *defaultfontfamily = ""; #endif // The table should not be necessary, but I found no css way to get // qt 4.6 qtextedit to clear the margins after the float img without // introducing blank space. const char *PrefsPack::dfltResListFormat = "\n" "\n" "\n" "\n" "
%L  %S   %T
\n" "%M %D    %U %i
\n" "%s %A %K
\n" ; // The global preferences structure PrefsPack prefs; // Using the same macro to read/write a setting. insurance against typing // mistakes #define SETTING_RW(var, nm, tp, def) \ if (writing) { \ settings.setValue(nm , var); \ } else { \ var = settings.value(nm, def).to##tp \ (); \ } /** * Saving and restoring user preferences. These are stored in a global * structure during program execution and saved to disk using the QT * settings mechanism */ /* Remember if settings were actually read (to avoid writing them if * we stopped before reading them (else some kinds of errors would reset * the qt/recoll settings to defaults) */ static bool havereadsettings; #ifndef _WIN32 static void maybeRenameGUISettings(); #endif /* ! _WIN32 */ void rwSettings(bool writing) { #ifndef _WIN32 maybeRenameGUISettings(); #endif /* !_WIN32 */ QSettings::setDefaultFormat(QSettings::IniFormat); LOGDEB1("rwSettings: write " << writing << "\n"); if (writing && !havereadsettings) return; QSettings settings; SETTING_RW(prefs.showmode, "/Recoll/geometry/showmode", Int, 0); SETTING_RW(prefs.pvwidth, "/Recoll/geometry/pvwidth", Int, 0); SETTING_RW(prefs.pvheight, "/Recoll/geometry/pvheight", Int, 0); SETTING_RW(prefs.ssearchTypSav, "/Recoll/prefs/ssearchTypSav", Bool, 0); SETTING_RW(prefs.ssearchTyp, "/Recoll/prefs/simpleSearchTyp", Int, 3); SETTING_RW(prefs.startWithAdvSearchOpen, "/Recoll/prefs/startWithAdvSearchOpen", Bool, false); SETTING_RW(prefs.previewHtml, "/Recoll/prefs/previewHtml", Bool, true); SETTING_RW(prefs.previewActiveLinks, "/Recoll/prefs/previewActiveLinks", Bool, false); SETTING_RW(prefs.idxFilterTreeDepth, "/Recoll/prefs/ssearch/idxfiltertreedepth", Int, 2); QString advSearchClauses; const int maxclauselistsize = 20; if (writing) { // Limit clause list size to non-absurd size if (prefs.advSearchClauses.size() > maxclauselistsize) { prefs.advSearchClauses.resize(maxclauselistsize); } for (auto clause : prefs.advSearchClauses) { char buf[20]; snprintf(buf, sizeof(buf), "%d ", clause); advSearchClauses += QString::fromUtf8(buf); } } QString ascdflt; SETTING_RW(advSearchClauses,"/Recoll/prefs/adv/clauseList", String, ascdflt); if (!writing) { vector clauses; stringToStrings(qs2utf8s(advSearchClauses), clauses); // There was a long-lurking bug where the clause list was // growing to absurd sizes. The prefs.advSearchClauses clear() // call was missing (ok with the now false initial assumption // that the prefs were read once per session), which was // causing a doubling of the size each time the prefs were // read. Should be fixed, but in any case, limit the clause // list to a non-absurd size. if (clauses.size() > maxclauselistsize) { clauses.resize(maxclauselistsize); } prefs.advSearchClauses.clear(); prefs.advSearchClauses.reserve(clauses.size()); for (const auto &clause : clauses) { prefs.advSearchClauses.push_back(atoi(clause.c_str())); } } SETTING_RW(prefs.ssearchNoComplete, "/Recoll/prefs/ssearch/noComplete", Bool, false); SETTING_RW(prefs.ssearchStartOnComplete, "/Recoll/prefs/ssearch/startOnComplete", Bool, true); SETTING_RW(prefs.ssearchCompletePassive, "/Recoll/ui/ssearchCompletePassive", Bool, true); SETTING_RW(prefs.filterCtlStyle, "/Recoll/prefs/filterCtlStyle", Int, 0); SETTING_RW(prefs.ssearchAutoPhrase, "/Recoll/prefs/ssearchAutoPhrase", Bool, true); SETTING_RW(prefs.ssearchAutoPhraseThreshPC, "/Recoll/prefs/ssearchAutoPhraseThreshPC", Double, 2.0); SETTING_RW(prefs.respagesize, "/Recoll/prefs/reslist/pagelen", Int, 8); SETTING_RW(prefs.historysize, "/Recoll/prefs/historysize", Int, -1); SETTING_RW(prefs.collapseDuplicates, "/Recoll/prefs/reslist/collapseDuplicates", Bool, false); SETTING_RW(prefs.showResultsAsTable, "/Recoll/prefs/showResultsAsTable", Bool, false); SETTING_RW(prefs.maxhltextkbs, "/Recoll/prefs/preview/maxhltextkbs", Int, 3000); // Compat: if maxhltextkbs is not set but old maxhltextmbs is set use it if (!writing && !settings.contains("/Recoll/prefs/preview/maxhltextkbs") && settings.contains("/Recoll/prefs/preview/maxhltextmbs")) { prefs.maxhltextkbs = settings.value( "/Recoll/prefs/preview/maxhltextmbs").toInt() * 1024; } SETTING_RW(prefs.previewPlainPre, "/Recoll/prefs/preview/plainPre", Int, PrefsPack::PP_PREWRAP); // History: used to be able to only set a bare color name. Can now // set any CSS style. Hack on ':' presence to keep compat with old // values SETTING_RW(prefs.qtermstyle, "/Recoll/prefs/qtermcolor", String, "color: blue"); if (!writing && prefs.qtermstyle == "") prefs.qtermstyle = "color: blue"; { // histo compatibility hack int colon = prefs.qtermstyle.indexOf(":"); int semi = prefs.qtermstyle.indexOf(";"); // The 2nd part of the test is to keep compat with the // injection hack of the 1st user who suggested this (had // #ff5000;font-size:110%;... in 'qtermcolor') if (colon == -1 || (colon != -1 && semi != -1 && semi < colon)) { prefs.qtermstyle = QString::fromUtf8("color: ") + prefs.qtermstyle; } } SETTING_RW(u8s2qs(prefs.reslistdateformat), "/Recoll/prefs/reslist/dateformat", String, " %Y-%m-%d %H:%M:%S %z"); if (!writing && prefs.reslistdateformat == "") prefs.reslistdateformat = " %Y-%m-%d %H:%M:%S %z"; SETTING_RW(prefs.reslistfontfamily, "/Recoll/prefs/reslist/fontFamily", String, defaultfontfamily); // While building the kio, we don't really care about QT Gui // defaults and referencing QFont introduces a useless dependency // On Windows, the default font size is 8 as far as I can see, too small #if defined(BUILDING_RECOLLGUI) && !defined(_WIN32) SETTING_RW(prefs.reslistfontsize, "/Recoll/prefs/reslist/fontSize", Int, QFont().pointSize()); #else SETTING_RW(prefs.reslistfontsize, "/Recoll/prefs/reslist/fontSize", Int, 12); #endif LOGDEB("Settings: font family: [" << qs2utf8s(prefs.reslistfontfamily) << "] " << " size " << prefs.reslistfontsize << " points.\n"); QString rlfDflt = QString::fromUtf8(prefs.dfltResListFormat); if (writing) { if (prefs.reslistformat.compare(rlfDflt)) { settings.setValue("/Recoll/prefs/reslist/format", prefs.reslistformat); } else { settings.remove("/Recoll/prefs/reslist/format"); } } else { prefs.reslistformat = settings.value("/Recoll/prefs/reslist/format", rlfDflt).toString(); prefs.creslistformat = qs2utf8s(prefs.reslistformat); } SETTING_RW(prefs.reslistheadertext, "/Recoll/prefs/reslist/headertext", String, ""); SETTING_RW(prefs.darkMode, "/Recoll/prefs/darkMode", Bool, 0); SETTING_RW(prefs.qssFile, "/Recoll/prefs/stylesheet", String, ""); SETTING_RW(prefs.snipCssFile, "/Recoll/prefs/snippets/cssfile", String, ""); SETTING_RW(prefs.queryStemLang, "/Recoll/prefs/query/stemLang", String, "english"); SETTING_RW(prefs.useDesktopOpen, "/Recoll/prefs/useDesktopOpen", Bool, true); SETTING_RW(prefs.keepSort, "/Recoll/prefs/keepSort", Bool, false); SETTING_RW(prefs.sortField, "/Recoll/prefs/sortField", String, ""); SETTING_RW(prefs.sortActive, "/Recoll/prefs/sortActive", Bool, false); SETTING_RW(prefs.sortDesc, "/Recoll/prefs/query/sortDesc", Bool, 0); if (!writing) { // Handle transition from older prefs which did not store sortColumn // (Active always meant sort by date). if (prefs.sortActive && prefs.sortField.isNull()) prefs.sortField = "mtime"; } SETTING_RW(prefs.queryBuildAbstract, "/Recoll/prefs/query/buildAbstract", Bool, true); SETTING_RW(prefs.queryReplaceAbstract, "/Recoll/prefs/query/replaceAbstract", Bool, false); SETTING_RW(prefs.syntAbsLen, "/Recoll/prefs/query/syntAbsLen", Int, 250); SETTING_RW(prefs.syntAbsCtx, "/Recoll/prefs/query/syntAbsCtx", Int, 4); // Abstract snippet separator SETTING_RW(prefs.abssep, "/Recoll/prefs/reslist/abssep", String,"…"); if (!writing && prefs.abssep == "") prefs.abssep = "…"; SETTING_RW(prefs.snipwMaxLength, "/Recoll/prefs/snipwin/maxlen", Int, 1000); SETTING_RW(prefs.snipwSortByPage,"/Recoll/prefs/snipwin/bypage", Bool,false); SETTING_RW(prefs.alwaysSnippets, "/Recoll/prefs/reslist/alwaysSnippets", Bool,false); SETTING_RW(prefs.autoSuffs, "/Recoll/prefs/query/autoSuffs", String, ""); SETTING_RW(prefs.autoSuffsEnable, "/Recoll/prefs/query/autoSuffsEnable", Bool, false); SETTING_RW(prefs.synFileEnable, "/Recoll/prefs/query/synFileEnable", Bool, false); SETTING_RW(prefs.synFile, "/Recoll/prefs/query/synfile", String, ""); SETTING_RW(prefs.termMatchType, "/Recoll/prefs/query/termMatchType", Int, 0); SETTING_RW(prefs.noBeeps, "/Recoll/prefs/query/noBeeps", Bool, false); // This is not really the current program version, just a value to // be used in case we have incompatible changes one day SETTING_RW(prefs.rclVersion, "/Recoll/prefs/rclVersion", Int, 1009); // Ssearch combobox history list if (writing) { settings.setValue("/Recoll/prefs/query/ssearchHistory",prefs.ssearchHistory); } else { prefs.ssearchHistory = settings.value("/Recoll/prefs/query/ssearchHistory").toStringList(); } // Ignored file types (advanced search) if (writing) { settings.setValue("/Recoll/prefs/query/asearchIgnFilTyps", prefs.asearchIgnFilTyps); } else { prefs.asearchIgnFilTyps = settings.value("/Recoll/prefs/query/asearchIgnFilTyps").toStringList(); } SETTING_RW(prefs.fileTypesByCats, "/Recoll/prefs/query/asearchFilTypByCat", Bool, false); SETTING_RW(prefs.noClearSearch, "/Recoll/prefs/noClearSearch", Bool, false); SETTING_RW(prefs.noToolbars, "/Recoll/prefs/noToolbars", Bool, false); SETTING_RW(prefs.noStatusBar, "/Recoll/prefs/noStatusBar", Bool, false); SETTING_RW(prefs.noMenuBar, "/Recoll/prefs/noMenuBar", Bool, false); SETTING_RW(prefs.noSSTypCMB, "/Recoll/prefs/noSSTypCMB", Bool, false); SETTING_RW(prefs.resTableTextNoShift, "/Recoll/prefs/resTableTextNoShift", Bool, false); SETTING_RW(prefs.resTableNoHoverMeta, "/Recoll/prefs/resTableNoHoverMeta", Bool, false); SETTING_RW(prefs.noResTableHeader, "/Recoll/prefs/noResTableHeader", Bool, false); SETTING_RW(prefs.showResTableVHeader, "/Recoll/prefs/showResTableVHeader", Bool, false); SETTING_RW(prefs.noResTableRowJumpSC, "/Recoll/prefs/noResTableRowJumpSC", Bool, false); SETTING_RW(prefs.showTrayIcon, "/Recoll/prefs/showTrayIcon", Bool, false); SETTING_RW(prefs.closeToTray, "/Recoll/prefs/closeToTray", Bool, false); SETTING_RW(prefs.trayMessages, "/Recoll/prefs/trayMessages", Bool, false); SETTING_RW(prefs.wholeuiscale, "/Recoll/ui/wholeuiscale", Double, 1.0); SETTING_RW(prefs.autoSpell, "/Recoll/search/autoSpell", Bool, false) SETTING_RW(prefs.autoSpellMaxDist, "/Recoll/search/autoSpellMaxDist", Int, 1) SETTING_RW(prefs.showcompleterhitcounts, "/Recoll/ui/showcompleterhitcounts", Bool, false) SETTING_RW(prefs.ssearchCompleterHistCnt, "/Recoll/ui/ssearchCompleterHistCnt", Int, 10) SETTING_RW(prefs.sidefilterdateformat, "/Recoll/ui/sidefilterdateformat", String, ""); SETTING_RW(prefs.ignwilds, "/Recoll/search/ignwilds", Bool, false) SETTING_RW(prefs.pvmaxfldlen, "/Recoll/ui/pvmaxfldlen", Int, 200) SETTING_RW(prefs.singleapp, "/Recoll/ui/singleapp", Bool, false) SETTING_RW(prefs.previewLinesOverAnchor, "/Recoll/preview/previewLinesOverAnchor", Int, 4) SETTING_RW(prefs.uilanguage, "/Recoll/ui/uilanguage", String, "") #if (defined(_WIN32) || defined(__APPLE__)) && (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) SETTING_RW(prefs.colorscheme, "/Recoll/ui/colorscheme", Int, PrefsPack::CS_SYSTEM) #else SETTING_RW(prefs.colorscheme, "/Recoll/ui/colorscheme", Int ,PrefsPack::CS_LIGHT) #endif SETTING_RW(prefs.previewdarkbg, "/Recoll/preview/previewdarkbg", Bool, false) /*INSERTHERE*/ // See qxtconfirmationmessage. Needs to be -1 for the dialog to show. SETTING_RW(prefs.showTempFileWarning, "Recoll/prefs/showTempFileWarning", Int, -1); havereadsettings = true; if (nullptr == g_dynconf) { // Happens if we're called to read the singleapp setting early in main return; } // The extra databases settings. These are stored as a list of // xapian directory names, encoded in base64 to avoid any // binary/charset conversion issues. There are 2 lists for all // known dbs and active (searched) ones. // When starting up, we also add from the RECOLL_EXTRA_DBS environment // variable. // These are stored inside the dynamic configuration file (aka: history), // as they are likely to depend on RECOLL_CONFDIR. if (writing) { g_dynconf->eraseAll(allEdbsSk); for (const auto& dbdir : prefs.allExtraDbs) { g_dynconf->enterString(allEdbsSk, dbdir); } g_dynconf->eraseAll(actEdbsSk); for (const auto& dbdir : prefs.activeExtraDbs) { g_dynconf->enterString(actEdbsSk, dbdir); } } else { prefs.allExtraDbs = g_dynconf->getStringEntries(allEdbsSk); const char *cp; if ((cp = getenv("RECOLL_EXTRA_DBS"))) { vector dbl; stringToTokens(cp, dbl, dirlistsep); for (const auto& path : dbl) { string dbdir = path_canon(path); path_catslash(dbdir); if (std::find(prefs.allExtraDbs.begin(), prefs.allExtraDbs.end(), dbdir) != prefs.allExtraDbs.end()) continue; bool stripped; if (!Rcl::Db::testDbDir(dbdir, &stripped)) { LOGERR("Not a xapian index: [" << dbdir << "]\n"); continue; } if (stripped != o_index_stripchars) { LOGERR("Incompatible character stripping: [" << dbdir << "]\n"); continue; } prefs.allExtraDbs.push_back(dbdir); } } // Get the remembered "active external indexes": prefs.activeExtraDbs = g_dynconf->getStringEntries(actEdbsSk); // Clean up the list: remove directories which are not // actually there: useful for removable volumes. for (auto it = prefs.activeExtraDbs.begin(); it != prefs.activeExtraDbs.end();) { bool stripped; if (!Rcl::Db::testDbDir(*it, &stripped) || stripped != o_index_stripchars) { LOGINFO("Not a Xapian index or char stripping differs: [" << *it << "]\n"); it = prefs.activeExtraDbs.erase(it); } else { it++; } } // Get active db directives from the environment. This can only add to // the remembered and cleaned up list const char *cp4Act; if ((cp4Act = getenv("RECOLL_ACTIVE_EXTRA_DBS"))) { vector dbl; stringToTokens(cp4Act, dbl, dirlistsep); for (const auto& path : dbl) { string dbdir = path_canon(path); path_catslash(dbdir); if (std::find(prefs.activeExtraDbs.begin(), prefs.activeExtraDbs.end(), dbdir) != prefs.activeExtraDbs.end()) continue; bool strpd; if (!Rcl::Db::testDbDir(dbdir, &strpd) || strpd != o_index_stripchars) { LOGERR("Not a Xapian dir or diff. char stripping: [" << dbdir << "]\n"); continue; } prefs.activeExtraDbs.push_back(dbdir); } //for } //if } #if 0 std::cerr << "All extra Dbs:\n"; for (const auto& dir : prefs.allExtraDbs) std::cerr << " [" << dir << "]\n"; std::cerr << "Active extra Dbs:\n"; for (const auto& dir : prefs.activeExtraDbs) std::cerr << " [" << dir << "]\n"; #endif const string asbdSk = "asearchSbd"; if (writing) { while (prefs.asearchSubdirHist.size() > 20) prefs.asearchSubdirHist.pop_back(); g_dynconf->eraseAll(asbdSk); for (const auto& qdbd : qAsConst(prefs.asearchSubdirHist)) { g_dynconf->enterString(asbdSk, qs2utf8s(qdbd)); } } else { vector tl = g_dynconf->getStringEntries(asbdSk); for (const auto& dbd: tl) { prefs.asearchSubdirHist.push_back(u8s2qs(dbd)); } } } void PrefsPack::checkAppFont() { #ifdef BUILDING_RECOLLGUI // If the reslist font is not set, use the default font family and size from the app. By // default, the family comes from the platform and the size comes from the scaled // recoll-common.qss style sheet (except if the latter was edited to suppress the size // setting in which case the size also comes from the platform). QWidget w; w.ensurePolished(); QFont font = w.font(); LOGDEB0("PrefsPack: app family from QWidget: " << qs2utf8s(font.family()) << " size" << font.pointSize() << "\n"); appFontFamily = qs2utf8s(font.family()); appFontSize = font.pointSize(); LOGDEB0("PrefsPack::checkAppFont: app font size " << appFontSize << " family [" << appFontFamily << "]\n"); #endif } /* font-size: 10px; */ static const std::string fntsz_exp( R"((\s*font-size\s*:\s*)([0-9]+)(p[tx]\s*;\s*))" ); static std::regex fntsz_regex(fntsz_exp); std::string PrefsPack::scaleFonts(const std::string& style, float multiplier) { //cerr << "scale_fonts: multiplier: " << multiplier << "\n"; std::vector lines; stringToTokens(style, lines, "\n"); for (unsigned int ln = 0; ln < lines.size(); ln++) { const string& line = lines[ln]; std::smatch m; //std::cerr << "LINE: " << line << "\n"; if (regex_match(line, m, fntsz_regex) && m.size() == 4) { //std::cerr << "Got match (sz " << m.size() << ") for " << line << "\n"; int fs = atoi(m[2].str().c_str()); int nfs = std::round(fs * multiplier); char buf[20]; snprintf(buf, 20, "%d", nfs); lines[ln] = m[1].str() + buf + m[3].str(); //std::cerr << "New line: [" << lines[ln] << "]\n"; } } string nstyle = string(); for (auto& ln : lines) { nstyle += ln + "\n"; } return nstyle; } static const std::string link_exp(R"(([ADFhHPEnpRS])([-0-9]*)(\|([^|]+)(\|(.*))?)?)"); static std::regex link_regex(link_exp); std::tuple internal_link(std::string url) { LOGDEB1("internal_link: url: [" << url << "]\n"); std::smatch m; char c = 0; int i = -1; std::string origorscript; std::string replacement; if (regex_match(url, m, link_regex) && m.size() == 7) { c = m[1].str()[0]; if (!m[2].str().empty()) { // The link nums start from 1, but the seq from 0 i = atoi(m[2].str().c_str()) - 1; } origorscript = m[4]; replacement = m[6]; } LOGDEB1("internal_link: returning c [" << c << "] i [" << i << "] origorscript [" << origorscript << "] replace [" << replacement << "]\n"); return {c, i, origorscript, replacement}; } struct FileData { FileData() {} int64_t timestamp{0}; std::string data; }; static std::map filecache; static std::string cacheget(const std::string& path) { struct PathStat st; path_fileprops(path, &st); auto it = filecache.find(path); if (it != filecache.end()) { if (it->second.timestamp == st.pst_mtime) { return it->second.data; } } FileData fdt; fdt.timestamp = st.pst_mtime; file_to_string(path, fdt.data); filecache.insert({path, fdt}); return fdt.data; } #ifdef BUILDING_RECOLLGUI // Don't want this in the KDE plugins void applyStyle() { auto fn = path_cat(theconfig->getDatadir(), {"examples", "recoll-common.qss"}); std::string qss = cacheget(fn); #if defined(__APPLE__) && (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) prefs.colorscheme = PrefsPack::CS_SYSTEM; #endif bool nodarkqss = false; switch (prefs.colorscheme) { case PrefsPack::CS_LIGHT: prefs.darkMode = false; break; case PrefsPack::CS_DARK: prefs.darkMode = true; break; case PrefsPack::CS_SYSTEM: default: #if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) #ifdef _WIN32 // Under windows, if the scheme is "system", we apply the fusion style and let it // manage. Note that doing this means that getting back to fixed dark or light needs a // restart because I don't know how to undo the setStyle("fusion") qApp->setStyle("fusion"); // Can't just set darkMode to false as it's needed for HTML too nodarkqss = true; #endif if (qApp->styleHints()->colorScheme() == Qt::ColorScheme::Dark) { LOGDEB1("RclMain::setUIPrefs: qApp colorScheme is DARK\n"); prefs.darkMode = true; } else { // Mac? note: doing things this way means that there is no way to set dark on light // system, except by copying recoll-dark.qss somewhere else, and also importing the // dark css into the result list header... LOGDEB1("RclMain::setUIPrefs: qApp colorScheme is LIGHT\n"); prefs.darkMode = false; } #else prefs.darkMode = false; #endif break; } if (prefs.darkMode && !nodarkqss) { fn = path_cat(theconfig->getDatadir(), {"examples", "recoll-dark.qss"}); qss += cacheget(fn); } LOGDEB1("applyStyle: qssfile [" << qs2utf8s(prefs.qssFile) << "]\n"); if (!prefs.qssFile.isEmpty()) { LOGDEB0("Using custom style sheet: [" << qs2path(prefs.qssFile) << "]\n"); qss += cacheget(qs2path(prefs.qssFile)); } qss = prefs.scaleFonts(qss, prefs.wholeuiscale); qApp->setStyleSheet(u8s2qs(qss)); prefs.checkAppFont(); } #endif std::string PrefsPack::snipCSS() { if (!prefs.snipCssFile.isEmpty()) { return cacheget(qs2path(prefs.snipCssFile)); } return std::string(); } std::string PrefsPack::htmlHeaderContents(int opts) { // recoll-common.css just has a default font size setting at the moment. auto comfn = path_cat(theconfig->getDatadir(), {"examples", "recoll-common.css"}); std::string comcss = cacheget(comfn); std::ostringstream oss; oss << comcss << "\n"; // Set font, either from prefs or from the app font oss << "\n"; // Dark mode CSS if (darkMode && !(opts&HHC_NODARK)) { string fn = path_cat(theconfig->getDatadir(), {"examples", "recoll-dark.css"}); oss << cacheget(fn); } // User CSS if (!(opts&HHC_NOUSER)) oss << qs2utf8s(prefs.reslistheadertext); std::string css = oss.str(); if (!noscale) { css = PrefsPack::scaleFonts(css, prefs.wholeuiscale); } LOGDEB1("PrefsPack::htmlHeaderContents: [" << css << "]\n"); return css; } string PrefsPack::stemlang() { string stemLang(qs2utf8s(prefs.queryStemLang)); if (stemLang == "ALL") { if (theconfig) theconfig->getConfParam("indexstemminglanguages", stemLang); else stemLang = ""; } return stemLang; } #ifndef _WIN32 // The Linux settings name unvontarily changed from // ~/.config/Recoll.org/recoll.conf to ~/.config/Recoll.org/recoll.ini // when the Windows version switched from registry to ini storage. Too // late to really fix as 1.26.6 was released (at least in the // lesbonscomptes repo and Debian unstable). For the lucky guys who // did not run 1.26.6, the following was added in 1.26.7 to rename the // file if the .ini target does not exist. static void maybeRenameGUISettings() { string opath = path_cat(path_home(), ".config/Recoll.org/recoll.conf"); string npath = path_cat(path_home(), ".config/Recoll.org/recoll.ini"); if (path_exists(opath) && !path_exists(npath)) { rename(opath.c_str(), npath.c_str()); } } #endif /* ! _WIN32 */ #ifdef SHOWEVENTS const char *eventTypeToStr(int tp) { switch (tp) { case 0: return "None"; case 1: return "Timer"; case 2: return "MouseButtonPress"; case 3: return "MouseButtonRelease"; case 4: return "MouseButtonDblClick"; case 5: return "MouseMove"; case 6: return "KeyPress"; case 7: return "KeyRelease"; case 8: return "FocusIn"; case 9: return "FocusOut"; case 10: return "Enter"; case 11: return "Leave"; case 12: return "Paint"; case 13: return "Move"; case 14: return "Resize"; case 15: return "Create"; case 16: return "Destroy"; case 17: return "Show"; case 18: return "Hide"; case 19: return "Close"; case 20: return "Quit"; case 21: return "ParentChange"; case 131: return "ParentAboutToChange"; case 22: return "ThreadChange"; case 24: return "WindowActivate"; case 25: return "WindowDeactivate"; case 26: return "ShowToParent"; case 27: return "HideToParent"; case 31: return "Wheel"; case 33: return "WindowTitleChange"; case 34: return "WindowIconChange"; case 35: return "ApplicationWindowIconChange"; case 36: return "ApplicationFontChange"; case 37: return "ApplicationLayoutDirectionChange"; case 38: return "ApplicationPaletteChange"; case 39: return "PaletteChange"; case 40: return "Clipboard"; case 42: return "Speech"; case 43: return "MetaCall"; case 50: return "SockAct"; case 132: return "WinEventAct"; case 52: return "DeferredDelete"; case 60: return "DragEnter"; case 61: return "DragMove"; case 62: return "DragLeave"; case 63: return "Drop"; case 64: return "DragResponse"; case 68: return "ChildAdded"; case 69: return "ChildPolished"; case 70: return "ChildInserted"; case 72: return "LayoutHint"; case 71: return "ChildRemoved"; case 73: return "ShowWindowRequest"; case 74: return "PolishRequest"; case 75: return "Polish"; case 76: return "LayoutRequest"; case 77: return "UpdateRequest"; case 78: return "UpdateLater"; case 79: return "EmbeddingControl"; case 80: return "ActivateControl"; case 81: return "DeactivateControl"; case 82: return "ContextMenu"; case 83: return "InputMethod"; case 86: return "AccessibilityPrepare"; case 87: return "TabletMove"; case 88: return "LocaleChange"; case 89: return "LanguageChange"; case 90: return "LayoutDirectionChange"; case 91: return "Style"; case 92: return "TabletPress"; case 93: return "TabletRelease"; case 94: return "OkRequest"; case 95: return "HelpRequest"; case 96: return "IconDrag"; case 97: return "FontChange"; case 98: return "EnabledChange"; case 99: return "ActivationChange"; case 100: return "StyleChange"; case 101: return "IconTextChange"; case 102: return "ModifiedChange"; case 109: return "MouseTrackingChange"; case 103: return "WindowBlocked"; case 104: return "WindowUnblocked"; case 105: return "WindowStateChange"; case 110: return "ToolTip"; case 111: return "WhatsThis"; case 112: return "StatusTip"; case 113: return "ActionChanged"; case 114: return "ActionAdded"; case 115: return "ActionRemoved"; case 116: return "FileOpen"; case 117: return "Shortcut"; case 51: return "ShortcutOverride"; case 30: return "Accel"; case 32: return "AccelAvailable"; case 118: return "WhatsThisClicked"; case 120: return "ToolBarChange"; case 121: return "ApplicationActivated"; case 122: return "ApplicationDeactivated"; case 123: return "QueryWhatsThis"; case 124: return "EnterWhatsThisMode"; case 125: return "LeaveWhatsThisMode"; case 126: return "ZOrderChange"; case 127: return "HoverEnter"; case 128: return "HoverLeave"; case 129: return "HoverMove"; case 119: return "AccessibilityHelp"; case 130: return "AccessibilityDescription"; case 150: return "EnterEditFocus"; case 151: return "LeaveEditFocus"; case 152: return "AcceptDropsChange"; case 153: return "MenubarUpdated"; case 154: return "ZeroTimerEvent"; case 155: return "GraphicsSceneMouseMove"; case 156: return "GraphicsSceneMousePress"; case 157: return "GraphicsSceneMouseRelease"; case 158: return "GraphicsSceneMouseDoubleClick"; case 159: return "GraphicsSceneContextMenu"; case 160: return "GraphicsSceneHoverEnter"; case 161: return "GraphicsSceneHoverMove"; case 162: return "GraphicsSceneHoverLeave"; case 163: return "GraphicsSceneHelp"; case 164: return "GraphicsSceneDragEnter"; case 165: return "GraphicsSceneDragMove"; case 166: return "GraphicsSceneDragLeave"; case 167: return "GraphicsSceneDrop"; case 168: return "GraphicsSceneWheel"; case 169: return "KeyboardLayoutChange"; case 170: return "DynamicPropertyChange"; case 171: return "TabletEnterProximity"; case 172: return "TabletLeaveProximity"; default: return "UnknownEvent"; } } #endif recoll-1.43.12/qtgui/images/0000755000175000017500000000000014753313624015052 5ustar dockesdockesrecoll-1.43.12/qtgui/images/prevpage.png0000644000175000017500000000263314753313624017375 0ustar dockesdockesPNG  IHDRĴl;gAMA7 cHRMz&u0`:pQ<bKGDIDAT8ˍ[lUgn;;v/[ʥ\*"E@҂! HD ꋆ/#JH "P)5`7*mi]vn6;"'3|Gc= 0md3IJ ̃vqW\;yY WQ[ ̒OBf.<Ns9&5<\prvݿY5w;:>gg5yQmyi `Br>r?|q4ÍZs>Xk2Bn -iݕlZ 73Ɍ* %$ #[|X;abpryP;A$YiKC$0[#~+konhʮ;m¥^A&5Pb~gMg= \Lbu!b1s7$$嵊O^cFF!UjΡLbIH 5 B P;-]^@WfRyN/34( DA !9?c3k݆/K)=k>u ͝Y~()811uQ0 TOUU|~,qau kk<6`!vI#t;˪lkJVHAqY}'nkNrAuز&e,gs+%صEԖ\0l,9'b).5#$妙'nǼlTp䲊6yA5Tn9 .+K4FGXVfRRlĘZ~8mL?}Hb4iR;CBWu}QA4#z[`r煡b7zf;JdyߵnEy ƿ1 /.<(!wY߻yٕ[Sf ``肮[IȀ]6) ]UUP:F`y޿|EV]Vxi9`Z`md,,!HP%(q;AtZn*,iEi}?\ҡ+P@*WLEC]{8'Oml7'>|[)e,̣Jkʝ,ل#;osB/QU~c_ȥI BH>kxtl&Hq;gǞ=pOOXiY aɶ,Civ^?nA@ X=%tEXtdate:create2019-05-13T15:39:08+02:008vF%tEXtdate:modify2019-05-13T15:39:08+02:00IIENDB`recoll-1.43.12/qtgui/images/close.png0000644000175000017500000000204314753313624016664 0ustar dockesdockesPNG  IHDRj gAMA7 cHRMz&u0`:pQ<PLTE;;Z;;Z::Y99X88W<<\<<\;;Z66T66T55S<<\<<\55S44R<<\33Q33Q22P22P11O//M..L..L--K,,I++H**G**G**G44R))F))F))F))F11O<<\AA`GGfFFe??_99X>>^ssچNNn\\|MMmXXxԹ崴==]bb쳳rr箮~~ccRRr22P]]}88WkkYYy55SSSsTTt--KJJjWWw阘::Y``ddnnppzzDDcxx}}wwIIi;;Zggee66THHhaaM-&tRNS@@000@@0&ybKGDHtIME 'tg1CIDATc`! ʁ spkhjisq ytt `¼&P`f.$ f糰k+[Q0=89ػ9]==]] ]ALj>~@ "fV w(I0f DEե¬1  kI bX!$&1$`ƐE8!+pCn|܂B SKTBU1W WBk]P^W_čMM`SZZ;:{z'L4yTq I))iY9yEE%eEEEU5u 1  Q@%tEXtdate:create2019-05-13T15:39:08+02:008vF%tEXtdate:modify2019-05-13T15:39:08+02:00IIENDB`recoll-1.43.12/qtgui/images/interro.png0000644000175000017500000000067614753313624017253 0ustar dockesdockesPNG  IHDR:gAMA a cHRMz&u0`:pQ<bKGD̿ pHYs  tIME  y>IDATUΡN@Y2dJ@"cjJI-ؒ@Ŏ *%XƂC0(H5%tEXtdate:create2019-05-13T15:39:08+02:008vF%tEXtdate:modify2019-05-13T15:39:08+02:00ItEXtSoftwareAdobe ImageReadyqe<IENDB`recoll-1.43.12/qtgui/images/clock.png0000644000175000017500000000065014753313624016654 0ustar dockesdockesPNG  IHDR:gAMA a cHRMz&u0`:pQ<bKGD̿ pHYs  tIME  y>IDATe!@ D0'yX #F 1+*PaԚfq% Ɇš4TS )ƻ^{؆TShf64\_f Ǣ,PS͍YWk oz&8#sc~%tEXtdate:create2019-09-13T14:49:22+02:00%tEXtdate:modify2019-09-04T08:02:25+02:00KߗIENDB`recoll-1.43.12/qtgui/images/code-block.png0000644000175000017500000000102514753313624017560 0ustar dockesdockesPNG  IHDRngAMA a cHRMz&u0`:pQ<bKGD̿ pHYs cytIME 'tg1IDAT(ϽNAFilTPK * KXQF4DGal,JKce# LTj3_1s4dA><;9Z5lv,Oܛ|Q"B#aĀWx#&!0G+|".%ľ2 ]gW^k>\*ޘA6tO;n{Pcv,[*vS Lb D|2FgYuJ*t= ,T30x9wKlv"`VoؒI~%tEXtdate:create2019-05-13T15:39:08+02:008vF%tEXtdate:modify2019-05-13T15:39:08+02:00IIENDB`recoll-1.43.12/qtgui/images/menu.png0000644000175000017500000000123414753313624016524 0ustar dockesdockesPNG  IHDRaiCCPICC profile(}=H@_SVqXVJЪɥB$Qp-8XupqU?@]%1ݽ;@jfxLdW+Ћ1"1SM&_.ʳ9H0O!BaaIL „ţ&M>,,4m欩12²q͙57>A&>oY 32sr/YlVYn6lݶ}]ݷCK;~{9{e aK v[Paw:}oU…ժ?yg_Ԩ# kԾ|w4Q?|K6Noߛt1Ä=XI*%tEXtdate:create2019-05-13T15:39:08+02:008vF%tEXtdate:modify2019-05-13T15:39:08+02:00IIENDB`recoll-1.43.12/qtgui/images/up.png0000644000175000017500000000233114753313624016203 0ustar dockesdockesPNG  IHDRj gAMA|Q cHRMz%u0`:o_FOPLTEay`y`y`y`z_z_z^z'`}`{^{t-b ]]]xJILWT/-m,m)n,k)n,i,j^)z)n,j`)z(n,jd)z(n,lg#y*n,lkt,m%g o{|%g oz|@zD s#I f+J j{-M l.A %: %1& k{(:}w xtbLlgX ]gg 4 ]6߄[+}(z])zثWtRNS6ɴέydxmefox\!# :` bKGDH pHYs  tIME 'tg1IDATc`FF,1< hdTt 3hl\|Bb hrJjZzFf+hvNn^~AaQq hiYyEeUAuMm]=;\,?aSN>c`sΛ`E,]|Uy׮[a&Q1q I)қlݶ} wwڽm^Y4a8xHMXa0UT5Є5ut Є ML-Є-mlЄ]\=Є=}|c' 0(8$4 y#QE %tEXtdate:create2019-05-13T15:39:08+02:008vF%tEXtdate:modify2019-05-13T15:39:08+02:00IIENDB`recoll-1.43.12/qtgui/images/firstpage.png0000644000175000017500000000275414753313624017554 0ustar dockesdockesPNG  IHDRj gAMA a cHRMz&u0`:pQ<PLTE2i2i2i2h2h2h2g7e2i2i2i2j2k2i2h2h3feee2i2i2l>wFz4k2g7feee2i2i2h9f>wH{2h8eeee2i2feeeeee2i3l5l8eeee2h2h?wFz4gOb2h2h2gAc2h2i2hAf2jBfCf2gDe2fFc7s6fVby4l5k>ceee2h3eeeeeee5f3hN~4gFceee9e4h4gIceee9e2f=pW=p4iAr4iVmꝷzZ2obu8qن}2oރ#=M< 9O53S`b[C*e+ *T+Q0bKGD} pHYs ,tIME 'tg1IDATc`F&fV6v/ (KLJNIMȦgdfeCąeKJKKKK+*U@ªUe5@PV[VWSؤ^Q[խˠo[_V[[;&N242f01ije`nZ./4ejihid`mY/04eihYZVR\S?@BWYY220UdeJ00@ihd512M0ZjkM/0@hhd512665WeeM44Bdc`956ccdB44MeeW569`dcggi@0/MjiY115dhgffh@10MihY226cgfs8mkil32 Kޞ嗓ޞ嗓ޞ嗓ޞ嗓ݟ䘔ᛎ蔏󼋐뿐콑쿏뿏켑𽎓ṋ⽛߁ނx{zzy~ۡsuty斑tvuz䘔tvuz嗓tvuz䘔rtsw铎 ¤򼌑뿏켑쿏쿏/迒꽔偗ܠ⚖ߝ斒ޞ嗓ޞ嗓ޞ嗓ޞ嗓ݯ|߬~څݯ|߬~څݯ|߬~څݯ|߬~ځفܯ}ެف؁x~{z~~}ށ݃|}xӈy}|}vۀ{|΍~Ն~ύ|Ն΍}Ն|ы~zׄŔˏѩ}Ҭρ΁lustp|܁ہܩqxwxtެف؁ݩpwvws߬~ځفܩqxwxtݭف؁irpqm}x}||{߃~zҊ{~xق}~΍}Ն~Ό|Ն~ύ|Ն}ό{օ̐҉دڬցՁޯ{}ہځݯ|߬~څݯ|߬~څݯ|߬~څݯ|߬~ځقfhM043329`gffeiL1325dgfhM043329`gffeiL1325dgfhM043329`gffeiL1325dgfhM043329`gffeiL1325dgfhM043329`gffeiL1325dgfhjM-21108bihhglL/103fihMLMLM01-Kmhiijb7.001,Nlhiijg2/042Lhdeef_:34451Mgefc63431Lieffg`923340Mhfgd5231Mjfggha923340Mhfgd52320Jfbccd]81223/Nighe4129:6Vxsttvm@799:6Mb`^;9`a[m]a`_cL79;^`ghbudhgfjK0214ehgfgatcgfeiL1325dgfgatcgfeiL1325dgfef`sbfedhL2436cfeijdxfjihmK-100/2gjiL MHtVJMLML1/Hd`aab[70112-Mjhif30131Mjfggha:23340Mhfgd5231Lieffg`923340Mhfgd5231Lieffg`923340Mhfgd52320Ljfggh`81223/Mighe41253Lgcdde_;45562Mfdeb745dfM26554:^eddcgL3547bedgiM/32219ahggfjL0214ehgfhM043329`gffeiL1325dgfhM043329`gffeiL1325dgfhM043329`gffeiL1325dgfhM043329`gffeiL1325dgfl8mkih32 ӆ菔ӆ菔ӆ菔ӆ菔ӆ菔ӆ菔ӆ菔ӆ菔ӆ膔Ȇӆӆӆӆӆӆӆӆӆӆ膾vӆ菔vӆ菔vӆ菔vӆ菔vӆ菔vӆ菔vӆ菔vӆ菔vӆ膔ӆӆӆӆӆӆӆӆӆӆ膔ӆ菔ӆ菔ӆ菔ӆ菔ӆ菔ӆ菔ӆ菔ӆ菔ӆ膔ÆÆÆÆÆÆÆÆÆنÆÆُÆُÆُÆُÆُÆُÆُÆُÆن vvvvvvvvvنÆÆُÆُÆُÆُÆُÆُÆُÆُÆنÆÆÆÆÆÆÆÆÆنfY3Lf@3fY3Lf@3fY3Mf@3fY3Lf@3fY3Lf@3fY3Mf@3fY3Lf@3fY3Mf@3fY3Mf@3fYS@LYF@Y3@fM3Yf3@fM3Yf3@fL3Yf3@fL3Yf3@fM3Yf3@fL3Yf3@fL3Yf3@fM3Yf3@fL3Yf3LavLff@3ff@3ff@3ff@3ff@3ff@3ff@3ff@3ff@3f@Qb@SY@3@fL3Yf3@fM3Yf3@fM3Yf3@fL3Yf3@fM3Yf3@fM3Yf3@fL3Yf3@fM3Yf3@fM3Yf3fY3Lf@3fY3Mf@3fY3Mf@3fY3Lf@3fY3Mf@3fY3Mf@3fY3Lf@3fY3Mf@3fY3Mf@3fh8mk recoll-1.43.12/qtgui/images/nextpage.png0000644000175000017500000000263414753313624017400 0ustar dockesdockesPNG  IHDRĴl;gAMA7 cHRMz&u0`:pQ<bKGDIDAT8ˍYlTU箳3P,m)Ѕ- `q!A܂ H(11`4 (5(* v.tu:wÐ"A,'9INww*0γ ؗBƿC2Ȫ31D?J<8{;(p"UP^²adt!nu\'*8)ٴ~=;7в.0Mț`0SWw]tϙDLIl=!́@F'`" 5ry w%v k7cvtRS0l A,  *F(fw/W Ձ.sbKGD= pHYs  tIME 'tg1GIDATc`xx_ ¼ D"b %*-#&,'%$&VQU5E11u D"t/D? 0(8$4,茈H0KTtLl\|BbR2)Դ̬<3!¬iEŁ%e@aʪں&Cdd -m@N5.1u/9{z'L4yT1P_N>csΛ`"0!8H/Yl daCÕVYnFyiMlݶ;$a`{JJbD+'>n0dZ{%tEXtdate:create2019-05-13T15:39:08+02:008vF%tEXtdate:modify2019-05-13T15:39:08+02:00IIENDB`recoll-1.43.12/qtgui/images/history.png0000644000175000017500000000265514753313624017271 0ustar dockesdockesPNG  IHDRĴl;gAMA|Q cHRMz%u0`:o_FbKGD pHYs  #uIDAT8ˍklUv2my?@ b6 B`Ƙ Q" hP1!bbxDLBQڪ ]Znw݀pw{ϜkVhi!QRW~Z|~Ji)(!+(!*{T ]?({Z-J':~R6"BmPIv.j hJ UQv +{Z#VlԬޜ51!Uu.tx5nP#'>hVOk}ČNac/rP$|%`eh8dT+?ܼ=߉t \[tLyxYi1Gy~Scpآ% ]{sbZ/)/CpPA3^W䙧hkiaZ:0J+SLԚ gdi]ާ3@AYe QJ3^R&=QBa(!dRUbJqAVwo):.]4v12*{ZH R L f6gk}|jR)Vogt]@iSGsVJcgjbJH T綀^ ) DH1n%*$m21ܨF3 顄MB6 WD s+UmK <#uVl4m"2pVwf'aRdϾ:ׄdl0nF ~omH Bi"m⥔OkSGL`gG|o̱a lmpMۄ Ջe;`٤OjzGh;P>ٝͅ&rqMM؂ Q8<dpA '1d*[9zUsꗋSy'b*kT *HRo^M2]hBϓJ%tEXtdate:create2019-05-13T15:39:08+02:008vF%tEXtdate:modify2019-05-13T15:39:08+02:00IIENDB`recoll-1.43.12/qtgui/configswitch.ui0000644000175000017500000000312715134656715016643 0ustar dockesdockes ConfigSwitchDLG 0 0 291 78 Dialog Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() ConfigSwitchDLG accept() 248 254 157 274 buttonBox rejected() ConfigSwitchDLG reject() 316 260 286 274 recoll-1.43.12/qtgui/reslist.cpp0000644000175000017500000011722115132373576016006 0ustar dockesdockes/* Copyright (C) 2005-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "log.h" #include "smallut.h" #include "recoll.h" #include "guiutils.h" #include "pathut.h" #include "docseq.h" #include "pathut.h" #include "mimehandler.h" #include "plaintorich.h" #include "internfile.h" #include "indexer.h" #include "snippets_w.h" #include "listdialog.h" #include "reslist.h" #include "moc_reslist.cpp" #include "rclhelp.h" #include "appformime.h" #include "respopup.h" #include "reslistpager.h" #include "rclwebpage.h" using std::string; using std::vector; using std::map; using std::list; static const QKeySequence quitKeySeq("Ctrl+q"); static const QKeySequence closeKeySeq("Ctrl+w"); #if defined(USING_WEBKIT) # include # include # include # define QWEBSETTINGS QWebSettings #elif defined(USING_WEBENGINE) // Notes for WebEngine: // - It used to be that all links must begin with http:// for // acceptNavigationRequest to be called. Can't remember if file:// // would work. Anyway not any more since we set baseURL. See comments // in linkClicked(). // - The links passed to acceptNav.. have the host part // lowercased -> we change S0 to http://localhost/S0, not http://S0 # include # include # include # define QWEBSETTINGS QWebEngineSettings #endif #ifdef USING_WEBENGINE // This script saves the location details when a mouse button is // clicked. This is for replacing data provided by Webkit QWebElement // on a right-click as QT WebEngine does not have an equivalent service. static const string locdetailscript(R"raw( var locDetails = ''; function saveLoc(ev) { el = ev.target; locDetails = ''; while (el && el.attributes && !el.attributes.getNamedItem("rcldocnum")) { el = el.parentNode; } rcldocnum = el.attributes.getNamedItem("rcldocnum"); if (rcldocnum) { rcldocnumvalue = rcldocnum.value; } else { rcldocnumvalue = ""; } if (el && el.attributes) { locDetails = 'rcldocnum = ' + rcldocnumvalue } } )raw"); #endif // WEBENGINE class QtGuiResListPager : public ResListPager { public: QtGuiResListPager(RclConfig *cnf, ResList *p, int ps, bool alwayssnip) : ResListPager(cnf, ps, alwayssnip), m_reslist(p) {} virtual bool append(const string& data) override; virtual bool append(const string& data, int idx, const Rcl::Doc& doc) override; virtual string trans(const string& in) override; virtual string detailsLink() override; virtual const string &parFormat() override; virtual const string &dateFormat() override; virtual string nextUrl() override; virtual string prevUrl() override; virtual string headerContent() override; virtual void suggest(const vectoruterms, map >& sugg) override; virtual string absSep() override {return (const char *)(prefs.abssep.toUtf8());} virtual bool useAll() override {return prefs.useDesktopOpen;} #if defined(USING_WEBENGINE) || defined(USING_WEBKIT) // We now set baseURL to file:///, The relative links will be received as e.g. file:///E%N we // don't set the linkPrefix() anymore (it was "file:///recoll-links/" at some point but this // broke links added by users). virtual string bodyAttrs() override { return "onload=\"addEventListener('contextmenu', saveLoc)\""; } #endif private: ResList *m_reslist; }; ////////////////////////////// // /// QtGuiResListPager methods: bool QtGuiResListPager::append(const string& data) { m_reslist->append(u8s2qs(data)); return true; } bool QtGuiResListPager::append(const string& data, int docnum, const Rcl::Doc&) { #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) m_reslist->append(QString("
").arg(docnum)); m_reslist->append(u8s2qs(data)); m_reslist->append("
"); #else int blkcnt0 = m_reslist->document()->blockCount(); m_reslist->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); m_reslist->textCursor().insertBlock(); m_reslist->insertHtml(QString::fromUtf8(data.c_str())); m_reslist->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor); m_reslist->ensureCursorVisible(); int blkcnt1 = m_reslist->document()->blockCount(); for (int block = blkcnt0; block < blkcnt1; block++) { m_reslist->m_pageParaToReldocnums[block] = docnum; } #endif return true; } string QtGuiResListPager::trans(const string& in) { return qs2utf8s(ResList::tr(in.c_str())); } string QtGuiResListPager::detailsLink() { return href("H-1", trans("(show query)")); } const string& QtGuiResListPager::parFormat() { return prefs.creslistformat; } const string& QtGuiResListPager::dateFormat() { return prefs.reslistdateformat; } string QtGuiResListPager::nextUrl() { return "n-1"; } string QtGuiResListPager::prevUrl() { return "p-1"; } string QtGuiResListPager::headerContent() { string out; #if defined(USING_WEBENGINE) out += "\n"; #endif return out + prefs.htmlHeaderContents(); } void QtGuiResListPager::suggest(const vectoruterms, map>& sugg) { sugg.clear(); bool issimple = m_reslist && m_reslist->m_rclmain && m_reslist->m_rclmain->lastSearchSimple(); for (const auto& userterm : uterms) { vector spellersuggs; // If the term is in the dictionary, by default, aspell won't list alternatives, but the // recoll utility based on python-aspell. In any case, we might want to check the term // frequencies and taylor our suggestions accordingly ? For example propose a replacement // for a valid term only if the replacement is much more frequent ? (as google seems to do)? // To mimick the old code, we could check for the user term presence in the suggestion list, // but it's not clear that giving no replacements in this case would be better ? // // Also we should check that the term stems differently from the base word (else it's not // useful to expand the search). Or is it ? This should depend if stemming is turned on or // not if (!rcldb->getSpellingSuggestions(userterm, spellersuggs)) { continue; } if (!spellersuggs.empty()) { sugg[userterm] = vector(); int cnt = 0; for (auto subst : spellersuggs) { if (subst == userterm) continue; if (++cnt > 5) break; if (issimple) { // If this is a simple search, we set up links as a , else we // just list the replacements. subst = href("S-1|" + userterm + "|" + subst, subst); } sugg[userterm].push_back(subst); } } } } /////// /////// End reslistpager methods string PlainToRichQtReslist::startMatch(unsigned int idx) { PRETEND_USE(idx); #if 0 if (m_hdata) { string s1, s2; stringsToString >(m_hdata->groups[idx], s1); stringsToString >(m_hdata->ugroups[m_hdata->grpsugidx[idx]], s2); LOGDEB2("Reslist startmatch: group " << s1 << " user group " << s2 << "\n"); } #endif return string(""); } string PlainToRichQtReslist::endMatch() { return string(""); } static PlainToRichQtReslist g_hiliter; ///////////////////////////////////// ResList::ResList(QWidget* parent, const char* name) : RESLIST_PARENTCLASS(parent) { if (!name) setObjectName("resList"); else setObjectName(name); #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) settings()->setAttribute(QWEBSETTINGS::JavascriptEnabled, true); #ifdef USING_WEBKIT LOGDEB("Reslist: using Webkit\n"); page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); // signals and slots connections connect(this, SIGNAL(linkClicked(const QUrl &)), this, SLOT(onLinkClicked(const QUrl &))); #else LOGDEB("Reslist: using Webengine\n"); setPage(new RclWebPage(this)); connect(page(), SIGNAL(linkClicked(const QUrl &)), this, SLOT(onLinkClicked(const QUrl &))); connect(page(), SIGNAL(loadFinished(bool)), this, SLOT(runStoredJS(bool))); // These appear to get randomly disconnected or never connected. connect(page(), SIGNAL(scrollPositionChanged(const QPointF &)), this, SLOT(onPageScrollPositionChanged(const QPointF &))); connect(page(), SIGNAL(contentsSizeChanged(const QSizeF &)), this, SLOT(onPageContentsSizeChanged(const QSizeF &))); #endif #else LOGDEB("Reslist: using QTextBrowser\n"); setReadOnly(true); setUndoRedoEnabled(false); setOpenLinks(false); setTabChangesFocus(true); // signals and slots connections connect(this, SIGNAL(anchorClicked(const QUrl &)), this, SLOT(onLinkClicked(const QUrl &))); #endif languageChange(); (void)new HelpClient(this); HelpClient::installMap(qs2utf8s(this->objectName()), "RCL.SEARCH.GUI.RESLIST"); #if 0 // See comments in "highlighted connect(this, SIGNAL(highlighted(const QString &)), this, SLOT(highlighted(const QString &))); #endif setContextMenuPolicy(Qt::CustomContextMenu); connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(createPopupMenu(const QPoint&))); m_pager = new QtGuiResListPager(theconfig, this, prefs.respagesize, prefs.alwaysSnippets); m_pager->setHighLighter(&g_hiliter); resetView(); } ResList::~ResList() { // These have to exist somewhere for translations to work #ifdef __GNUC__ __attribute__((unused)) #endif static const char* strings[] = { QT_TR_NOOP("

No results found
"), QT_TR_NOOP("Documents"), QT_TR_NOOP("out of at least"), QT_TR_NOOP("for"), QT_TR_NOOP("Previous"), QT_TR_NOOP("Next"), QT_TR_NOOP("Unavailable document"), QT_TR_NOOP("Preview"), QT_TR_NOOP("Open"), QT_TR_NOOP("Snippets"), QT_TR_NOOP("(show query)"), QT_TR_NOOP("

Alternate spellings (accents suppressed): "), QT_TR_NOOP("

Alternate spellings: "), QT_TR_NOOP("This spelling guess was added to the search:"), QT_TR_NOOP("These spelling guesses were added to the search:"), }; } void ResList::setRclMain(RclMain *m, bool ismain) { m_rclmain = m; m_ismainres = ismain; if (!m_ismainres) { connect(new QShortcut(closeKeySeq, this), SIGNAL (activated()), this, SLOT (close())); connect(new QShortcut(quitKeySeq, this), SIGNAL (activated()), m_rclmain, SLOT (fileExit())); connect(this, SIGNAL(previewRequested(Rcl::Doc)), m_rclmain, SLOT(startPreview(Rcl::Doc))); connect(this, SIGNAL(docSaveToFileClicked(Rcl::Doc)), m_rclmain, SLOT(saveDocToFile(Rcl::Doc))); connect(this, SIGNAL(editRequested(Rcl::Doc)), m_rclmain, SLOT(startNativeViewer(Rcl::Doc))); } } #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) void ResList::runJS(const QString& js) { LOGDEB("runJS: " << qs2utf8s(js) << "\n"); #if defined(USING_WEBKIT) page()->mainFrame()->evaluateJavaScript(js); #elif defined(USING_WEBENGINE) page()->runJavaScript(js); // page()->runJavaScript(js, [](const QVariant &v) {qDebug() << v.toString();}); #endif } #if defined(USING_WEBENGINE) void ResList::runStoredJS(bool res) { if (m_js.isEmpty()) { return; } LOGDEB0("ResList::runStoredJS: res " << res << " cnt " << m_js_countdown << " m_js [" << qs2utf8s(m_js) << "]\n"); if (m_js_countdown > 0) { m_js_countdown--; return; } runJS(m_js); m_js.clear(); } void ResList::onPageScrollPositionChanged(const QPointF &position) { LOGDEB0("ResList::onPageScrollPositionChanged: y : " << position.y() << "\n"); m_scrollpos = position; } void ResList::onPageContentsSizeChanged(const QSizeF &size) { LOGDEB0("ResList::onPageContentsSizeChanged: y : " << size.height() << "\n"); m_contentsize = size; } #endif // WEBENGINE static void maybeDump(const QString& text) { std::string dumpfile; if (!theconfig->getConfParam("reslisthtmldumpfile", dumpfile) || dumpfile.empty()) { return; } dumpfile = path_tildexpand(dumpfile); if (path_exists(dumpfile)) { return; } auto fp = fopen(dumpfile.c_str(), "w"); if (fp) { auto s = qs2utf8s(text); fwrite(s.c_str(), 1, s.size(), fp); fclose(fp); } } #endif // WEBKIT or WEBENGINE void ResList::onUiPrefsChanged() { displayPage(); } void ResList::setFont() { #if !defined(USING_WEBKIT) && !defined(USING_WEBENGINE) // Using QTextBrowser if (prefs.reslistfontfamily != "") { QFont nfont(prefs.reslistfontfamily, prefs.reslistfontsize); QTextBrowser::setFont(nfont); } else { QFont font; font.setPointSize(prefs.reslistfontsize); QTextBrowser::setFont(font); } #endif } int ResList::newListId() { static int id; return ++id; } void ResList::setDocSource(std::shared_ptr nsource) { LOGDEB("ResList::setDocSource()\n"); m_source = std::shared_ptr(new DocSource(theconfig, nsource)); if (m_pager) m_pager->setDocSource(m_source); } // A query was executed, or the filtering/sorting parameters changed, // re-read the results. void ResList::readDocSource() { LOGDEB("ResList::readDocSource()\n"); m_curPvDoc = -1; if (!m_source) return; m_listId = newListId(); // Reset the page size in case the preference was changed m_pager->setPageSize(prefs.respagesize); m_pager->setDocSource(m_source); resultPageNext(); emit hasResults(m_source->getResCnt()); } void ResList::resetList() { LOGDEB("ResList::resetList()\n"); setDocSource(std::shared_ptr()); resetView(); } void ResList::resetView() { m_curPvDoc = -1; // There should be a progress bar for long searches but there isn't // We really want the old result list to go away, otherwise, for a // slow search, the user will wonder if anything happened. The // following helps making sure that the textedit is really // blank. Else, there are often icons or text left around #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) m_text = ""; QString html(""); html += u8s2qs(m_pager->headerContent()) + ""; html += ""; setHtml(html); #else m_pageParaToReldocnums.clear(); clear(); QTextBrowser::append("."); clear(); #endif } bool ResList::displayingHistory() { // We want to reset the displayed history if it is currently // shown. Using the title value is an ugly hack string htstring = string((const char *)tr("Document history").toUtf8()); if (!m_source || m_source->title().empty()) return false; return m_source->title().find(htstring) == 0; } void ResList::languageChange() { setWindowTitle(tr("Result list")); } #if !defined(USING_WEBKIT) && !defined(USING_WEBENGINE) // Get document number from text block number int ResList::docnumfromparnum(int block) { if (m_pager->pageNumber() < 0) return -1; // Try to find the first number < input and actually in the map // (result blocks can be made of several text blocks) std::map::iterator it; do { it = m_pageParaToReldocnums.find(block); if (it != m_pageParaToReldocnums.end()) return pageFirstDocNum() + it->second; } while (--block >= 0); return -1; } // Get range of paragraph numbers which make up the result for document number std::pair ResList::parnumfromdocnum(int docnum) { LOGDEB("parnumfromdocnum: docnum " << docnum << "\n"); if (m_pager->pageNumber() < 0) { LOGDEB("parnumfromdocnum: no page return -1,-1\n"); return {-1, -1}; } int winfirst = pageFirstDocNum(); if (docnum - winfirst < 0) { LOGDEB("parnumfromdocnum: docnum " << docnum << " < winfirst " << winfirst << " return -1,-1\n"); return {-1, -1}; } docnum -= winfirst; for (const auto& entry : m_pageParaToReldocnums) { if (docnum == entry.second) { int first = entry.first; int last = first+1; std::map::iterator it1; while ((it1 = m_pageParaToReldocnums.find(last)) != m_pageParaToReldocnums.end() && it1->second == docnum) { last++; } LOGDEB("parnumfromdocnum: return " << first << "," << last << "\n"); return {first, last}; } } LOGDEB("parnumfromdocnum: not found return -1,-1\n"); return {-1,-1}; } #endif // TEXTBROWSER // Return doc from current or adjacent result pages. We can get called // for a document not in the current page if the user browses through // results inside a result window (with shift-arrow). This can only // result in a one-page change. bool ResList::getDoc(int docnum, Rcl::Doc &doc) { LOGDEB("ResList::getDoc: docnum " << docnum << " winfirst " << pageFirstDocNum() << "\n"); int winfirst = pageFirstDocNum(); int winlast = m_pager->pageLastDocNum(); if (docnum < 0 || winfirst < 0 || winlast < 0) return false; // Is docnum in current page ? Then all Ok if (docnum >= winfirst && docnum <= winlast) { return m_pager->getDoc(docnum, doc); } // Else we accept to page down or up but not further if (docnum < winfirst && docnum >= winfirst - prefs.respagesize) { resultPageBack(); } else if (docnum < winlast + 1 + prefs.respagesize) { resultPageNext(); } winfirst = pageFirstDocNum(); winlast = m_pager->pageLastDocNum(); if (docnum >= winfirst && docnum <= winlast) { return m_pager->getDoc(docnum, doc); } return false; } void ResList::keyPressEvent(QKeyEvent * e) { if ((e->modifiers() & Qt::ShiftModifier)) { if (e->key() == Qt::Key_PageUp) { // Shift-PageUp -> first page of results resultPageFirst(); return; } } else { if (e->key() == Qt::Key_PageUp || e->key() == Qt::Key_Backspace) { resPageUpOrBack(); return; } else if (e->key() == Qt::Key_PageDown || e->key() == Qt::Key_Space) { resPageDownOrNext(); return; } } RESLIST_PARENTCLASS::keyPressEvent(e); } void ResList::mouseReleaseEvent(QMouseEvent *e) { m_lstClckMod = 0; if (e->modifiers() & Qt::ControlModifier) { m_lstClckMod |= Qt::ControlModifier; } if (e->modifiers() & Qt::ShiftModifier) { m_lstClckMod |= Qt::ShiftModifier; } RESLIST_PARENTCLASS::mouseReleaseEvent(e); } void ResList::highlighted(const QString& ) { // This is supposedly called when a link is preactivated (hover or tab // traversal, but is not actually called for tabs. We would have liked to // give some kind of visual feedback for tab traversal } // Page Up/Down: we don't try to check if current paragraph is last or // first. We just page up/down and check if viewport moved. If it did, // fair enough, else we go to next/previous result page. void ResList::resPageUpOrBack() { #if defined(USING_WEBKIT) if (scrollIsAtTop()) { resultPageBack(); runJS("window.scrollBy(0,50000);"); } else { page()->mainFrame()->scroll(0, -int(0.9*geometry().height())); } setupArrows(); #elif defined(USING_WEBENGINE) if (scrollIsAtTop()) { // Displaypage used to call resetview() which caused a page load event. We wanted to run the // js on the second event, with countdown = 1. Not needed any more, but kept around. m_js_countdown = 0; m_js = "window.scrollBy(0,50000);"; resultPageBack(); } else { QString js = QString("window.scrollBy(%1, %2);").arg(0).arg(-int(0.9*geometry().height())); runJS(js); } QTimer::singleShot(50, this, SLOT(setupArrows())); #else int vpos = verticalScrollBar()->value(); verticalScrollBar()->triggerAction(QAbstractSlider::SliderPageStepSub); if (vpos == verticalScrollBar()->value()) resultPageBack(); #endif } void ResList::resPageDownOrNext() { #if defined(USING_WEBKIT) if (scrollIsAtBottom()) { resultPageNext(); } else { page()->mainFrame()->scroll(0, int(0.9*geometry().height())); } setupArrows(); #elif defined(USING_WEBENGINE) if (scrollIsAtBottom()) { LOGDEB0("downOrNext: at bottom: call resultPageNext\n"); resultPageNext(); } else { LOGDEB0("downOrNext: scroll\n"); QString js = QString("window.scrollBy(%1, %2);").arg(0).arg(int(0.9*geometry().height())); runJS(js); } QTimer::singleShot(50, this, SLOT(setupArrows())); #else int vpos = verticalScrollBar()->value(); verticalScrollBar()->triggerAction(QAbstractSlider::SliderPageStepAdd); LOGDEB("ResList::resPageDownOrNext: vpos before " << vpos << ", after " << verticalScrollBar()->value() << "\n"); if (vpos == verticalScrollBar()->value()) resultPageNext(); #endif } bool ResList::scrollIsAtBottom() { #if defined(USING_WEBKIT) QWebFrame *frame = page()->mainFrame(); bool ret; if (!frame || frame->scrollBarGeometry(Qt::Vertical).isEmpty()) { ret = true; } else { int max = frame->scrollBarMaximum(Qt::Vertical); int cur = frame->scrollBarValue(Qt::Vertical); ret = (max != 0) && (cur == max); LOGDEB2("Scrollatbottom: cur " << cur << " max " << max << "\n"); } LOGDEB2("scrollIsAtBottom: returning " << ret << "\n"); return ret; #elif defined(USING_WEBENGINE) // TLDR: Could not find any way whatsoever to reliably get the page contents size or position // with either signals or direct calls. No obvious way to get this from javascript either. This // used to work, with direct calls and broke down around qt 5.15 QSize wss = size(); //QSize css = page()->contentsSize().toSize(); QSize css = m_contentsize.toSize(); // Does not work with recent (2022) qt releases: always 0 //auto spf = page()->scrollPosition(); // Found no easy way to block waiting for the js output //runJS("document.body.scrollTop", [](const QVariant &v) {qDebug() << v.toInt();}); QPoint sp = m_scrollpos.toPoint(); LOGDEB0("atBottom: contents W " << css.width() << " H " << css.height() << " widget W " << wss.width() << " Y " << wss.height() << " scroll X " << sp.x() << " Y " << sp.y() << "\n"); // This seems to work but it's mysterious as points and pixels // should not be the same return wss.height() + sp.y() >= css.height() - 10; #else return false; #endif } bool ResList::scrollIsAtTop() { #if defined(USING_WEBKIT) QWebFrame *frame = page()->mainFrame(); bool ret; if (!frame || frame->scrollBarGeometry(Qt::Vertical).isEmpty()) { ret = true; } else { int cur = frame->scrollBarValue(Qt::Vertical); int min = frame->scrollBarMinimum(Qt::Vertical); LOGDEB("Scrollattop: cur " << cur << " min " << min << "\n"); ret = (cur == min); } LOGDEB2("scrollIsAtTop: returning " << ret << "\n"); return ret; #elif defined(USING_WEBENGINE) //return page()->scrollPosition().toPoint().ry() == 0; return m_scrollpos.y() == 0; #else return false; #endif } void ResList::setupArrows() { emit prevPageAvailable(m_pager->hasPrev() || !scrollIsAtTop()); emit nextPageAvailable(m_pager->hasNext() || !scrollIsAtBottom()); } // Show previous page of results. We just set the current number back // 2 pages and show next page. void ResList::resultPageBack() { if (m_pager->hasPrev()) { m_pager->resultPageBack(); displayPage(); #ifdef USING_WEBENGINE runJS("window.scrollTo(0,0);"); #endif } } // Go to the first page void ResList::resultPageFirst() { // In case the preference was changed m_pager->setPageSize(prefs.respagesize); m_pager->resultPageFirst(); displayPage(); #ifdef USING_WEBENGINE runJS("window.scrollTo(0,0);"); #endif } // Fill up result list window with next screen of hits void ResList::resultPageNext() { if (m_pager->hasNext()) { m_pager->resultPageNext(); displayPage(); #ifdef USING_WEBENGINE runJS("window.scrollTo(0,0);"); #endif } } void ResList::resultPageFor(int docnum) { m_pager->resultPageFor(docnum); displayPage(); } void ResList::append(const QString &text) { #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) m_text += text; if (m_progress && text.startsWith("

setValue(m_residx++); } #else QTextBrowser::append(text); #endif } const static QUrl baseUrl("file:///"); const static std::string sBaseUrl{"file:///"}; void ResList::displayPage() { #if defined(USING_WEBENGINE) || defined(USING_WEBKIT) QProgressDialog progress("Generating text snippets...", "", 0, prefs.respagesize, this); m_residx = 0; progress.setWindowModality(Qt::WindowModal); progress.setCancelButton(nullptr); progress.setMinimumDuration(2000); m_progress = &progress; m_text = ""; #else clear(); setFont(); #endif m_pager->displayPage(theconfig); #if defined(USING_WEBENGINE) || defined(USING_WEBKIT) // webengine from qt 5.15 on won't load local images if the base URL is // not set (previous versions worked with an empty one). Can't hurt anyway. if (m_progress) { m_progress->close(); m_progress = nullptr; } if (m_lasttext == m_text) return; maybeDump(m_text); setHtml(m_text, baseUrl); m_lasttext = m_text; #endif LOGDEB0("ResList::displayPg: hasNext " << m_pager->hasNext() << " atBot " << scrollIsAtBottom() << " hasPrev " << m_pager->hasPrev() << " at Top " << scrollIsAtTop() << " \n"); QTimer::singleShot(100, this, SLOT(setupArrows())); // Possibly color paragraph of current preview if any previewExposed(m_curPvDoc); } // Color paragraph (if any) of currently visible preview void ResList::previewExposed(int docnum) { LOGDEB("ResList::previewExposed: doc " << docnum << "\n"); // Possibly erase old one to white if (m_curPvDoc > -1) { #if defined(USING_WEBKIT) QString sel = QString("div[rcldocnum=\"%1\"]").arg(m_curPvDoc - pageFirstDocNum()); LOGDEB2("Searching for element, selector: [" << qs2utf8s(sel) << "]\n"); QWebElement elt = page()->mainFrame()->findFirstElement(sel); if (!elt.isNull()) { LOGDEB2("Found\n"); elt.removeAttribute("style"); } else { LOGDEB2("Not Found\n"); } #elif defined(USING_WEBENGINE) QString js = QString( "elt=document.getElementById('%1');" "if (elt){elt.removeAttribute('style');}" ).arg(m_curPvDoc - pageFirstDocNum()); runJS(js); #else std::pair blockrange = parnumfromdocnum(m_curPvDoc); if (blockrange.first != -1) { for (int blockn = blockrange.first; blockn < blockrange.second; blockn++) { QTextBlock block = document()->findBlockByNumber(blockn); QTextCursor cursor(block); QTextBlockFormat format = cursor.blockFormat(); format.clearBackground(); cursor.setBlockFormat(format); } } #endif m_curPvDoc = -1; } if ((m_curPvDoc = docnum) < 0) { return; } // Set background for active preview's doc entry #if defined(USING_WEBKIT) QString sel = QString("div[rcldocnum=\"%1\"]").arg(docnum - pageFirstDocNum()); LOGDEB2("Searching for element, selector: [" << qs2utf8s(sel) << "]\n"); QWebElement elt = page()->mainFrame()->findFirstElement(sel); if (!elt.isNull()) { LOGDEB2("Found\n"); elt.setAttribute("style", "background: LightBlue;}"); } else { LOGDEB2("Not Found\n"); } #elif defined(USING_WEBENGINE) QString js = QString( "elt=document.getElementById('%1');" "if(elt){elt.setAttribute('style', 'background: LightBlue');}" ).arg(docnum - pageFirstDocNum()); runJS(js); #else std::pair blockrange = parnumfromdocnum(docnum); // Maybe docnum is -1 or not in this window, if (blockrange.first < 0) return; // Color the new active paragraph QColor color("LightBlue"); for (int blockn = blockrange.first+1; blockn < blockrange.second; blockn++) { QTextBlock block = document()->findBlockByNumber(blockn); QTextCursor cursor(block); QTextBlockFormat format; format.setBackground(QBrush(color)); cursor.mergeBlockFormat(format); setTextCursor(cursor); ensureCursorVisible(); } #endif } // Double click in res list: add selection to simple search void ResList::mouseDoubleClickEvent(QMouseEvent *event) { RESLIST_PARENTCLASS::mouseDoubleClickEvent(event); #if defined(USING_WEBKIT) emit wordSelect(selectedText()); #elif defined(USING_WEBENGINE) // webengineview does not have such an event function, and // reimplementing event() itself is not useful (tried) as it does // not get mouse clicks. We'd need javascript to do this, but it's // not that useful, so left aside for now. #else if (textCursor().hasSelection()) emit wordSelect(textCursor().selectedText()); #endif } void ResList::showQueryDetails() { if (!m_source) return; string oq = breakIntoLines(m_source->getDescription(), 100, 50); QString str; QString desc = tr("Result count (est.)") + ": " + str.setNum(m_source->getResCnt()) + "
"; desc += tr("Query details") + ": " + QString::fromUtf8(oq.c_str()); QMessageBox::information(this, tr("Query details"), desc); } #if defined(USING_WEBENGINE) void ResList::onLinkClicked(const QUrl &qurl) { QTimer::singleShot(0, this, [this, qurl] () {onLinkClicked1(qurl);}); } #endif #if defined(USING_WEBENGINE) void ResList::onLinkClicked1(const QUrl &qurl) #else void ResList::onLinkClicked(const QUrl &qurl) #endif { string strurl = pc_decode(qs2utf8s(qurl.toString())); // Link prefix remark: it used to be that webengine refused to acknowledge link clicks on links // like "%P1", it needed an absolute URL like file:///recoll-links/P1. So, for a time this is // what the links looked like. However this broke the function of the "edit paragraph format" // thing because the manual still specified relative links (E%N). We now set baseUrl to file:/// // to fix icons display which had stopped working). So linkprefix() is now empty, but the code // has been kept around. We now receive absolute links baseUrl+relative (e.g. file:///E1), and // substract the baseUrl. #if defined(USING_WEBENGINE) || defined(USING_WEBKIT) auto prefix = m_pager->linkPrefix().size() ? m_pager->linkPrefix() : sBaseUrl; #else std::string prefix; #endif if (prefix.size() && (strurl.size() <= prefix.size() || !beginswith(strurl, prefix))) { LOGINF("ResList::onLinkClicked: bad URL [" << strurl << "] (prefix [" << prefix << "]\n"); return; } if (prefix.size()) strurl = strurl.substr(prefix.size()); LOGDEB("ResList::onLinkClicked: processed URL: [" << strurl << "]\n"); auto [what, docnum, origorscript, replacement] = internal_link(strurl); if (what == 0) { return; } bool havedoc{false}; Rcl::Doc doc; if (docnum >= 0) { if (getDoc(docnum, doc)) { havedoc = true; } else { LOGERR("ResList::onLinkClicked: can't get doc for "<< docnum << "\n"); } } switch (what) { case 'A': // Open abstract/snippets window { if (!havedoc) return; emit showSnippets(doc); } break; case 'D': // Show duplicates { if (!m_source || !havedoc) return; vector dups; if (m_source->docDups(doc, dups) && m_rclmain) { m_rclmain->newDupsW(doc, dups); } } break; case 'F': // Open parent folder { if (!havedoc) return; emit editRequested(ResultPopup::getFolder(doc)); } break; case 'h': // Show query details case 'H': { showQueryDetails(); break; } case 'P': // Preview and edit case 'E': { if (!havedoc) return; if (what == 'P') { if (m_ismainres) { emit docPreviewClicked(docnum, doc, m_lstClckMod); } else { emit previewRequested(doc); } } else { emit editRequested(doc); } } break; case 'n': // Next/prev page resultPageNext(); break; case 'p': resultPageBack(); break; case 'R':// Run script. Link format Rnn|Script Name { if (!havedoc) return; LOGERR("Run script: [" << origorscript << "]\n"); DesktopDb ddb(path_cat(theconfig->getConfDir(), "scripts")); DesktopDb::AppDef app; if (ddb.appByName(origorscript, app)) { QAction act(QString::fromUtf8(app.name.c_str()), this); QVariant v(QString::fromUtf8(app.command.c_str())); act.setData(v); m_popDoc = docnum; menuOpenWith(&act); } } break; case 'S': // Spelling: replacement suggestion clicked. strurl is like: // S-1|orograpphic|orographic { if (origorscript.empty() || replacement.empty()) return; LOGDEB2("Emitting wordreplace " << origorscript << " -> " << replacement << "\n"); emit wordReplace(u8s2qs(origorscript), u8s2qs(replacement)); } break; default: LOGERR("ResList::onLinkClicked: bad link [" << strurl.substr(0,20) << "]\n"); break; } } void ResList::onPopupJsDone(const QVariant &jr) { QString qs(jr.toString()); LOGDEB("onPopupJsDone: parameter: " << qs2utf8s(qs) << "\n"); #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) auto skipflags = Qt::SkipEmptyParts; #else auto skipflags = QString::SkipEmptyParts; #endif QStringList qsl = qs.split("\n", skipflags); for (int i = 0 ; i < qsl.size(); i++) { int eq = qsl[i].indexOf("="); if (eq > 0) { QString nm = qsl[i].left(eq).trimmed(); QString value = qsl[i].right(qsl[i].size() - (eq+1)).trimmed(); if (!nm.compare("rcldocnum")) { m_popDoc = pageFirstDocNum() + value.toInt(); } else { LOGERR("onPopupJsDone: unknown key: " << qs2utf8s(nm) << "\n"); } } } doCreatePopupMenu(); } void ResList::createPopupMenu(const QPoint& pos) { LOGDEB("ResList::createPopupMenu(" << pos.x() << ", " << pos.y() << ")\n"); m_popDoc = -1; m_popPos = pos; #if defined(USING_WEBKIT) QWebHitTestResult htr = page()->mainFrame()->hitTestContent(pos); if (htr.isNull()) return; QWebElement el = htr.enclosingBlockElement(); while (!el.isNull() && !el.hasAttribute("rcldocnum")) el = el.parent(); if (el.isNull()) return; QString snum = el.attribute("rcldocnum"); m_popDoc = pageFirstDocNum() + snum.toInt(); #elif defined(USING_WEBENGINE) QString js("window.locDetails;"); RclWebPage *mypage = dynamic_cast(page()); mypage->runJavaScript(js, [this](const QVariant &v) {onPopupJsDone(v);}); #else QTextCursor cursor = cursorForPosition(pos); int blocknum = cursor.blockNumber(); LOGDEB("ResList::createPopupMenu(): block " << blocknum << "\n"); m_popDoc = docnumfromparnum(blocknum); #endif doCreatePopupMenu(); } void ResList::doCreatePopupMenu() { if (m_popDoc < 0) return; Rcl::Doc doc; if (!getDoc(m_popDoc, doc)) return; int options = ResultPopup::showSaveOne; if (m_ismainres) options |= ResultPopup::isMain; QMenu *popup = ResultPopup::create(this, options, m_source, doc); popup->popup(mapToGlobal(m_popPos)); } void ResList::menuPreview() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) { if (m_ismainres) { emit docPreviewClicked(m_popDoc, doc, 0); } else { emit previewRequested(doc); } } } void ResList::menuSaveToFile() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) emit docSaveToFileClicked(doc); } void ResList::menuPreviewParent() { Rcl::Doc doc; if (getDoc(m_popDoc, doc) && m_source) { Rcl::Doc pdoc = ResultPopup::getParent(m_source, doc); if (pdoc.mimetype == "inode/directory") { emit editRequested(pdoc); } else { emit previewRequested(pdoc); } } } void ResList::menuOpenParent() { Rcl::Doc doc; if (getDoc(m_popDoc, doc) && m_source) { Rcl::Doc pdoc = ResultPopup::getParent(m_source, doc); if (!pdoc.url.empty()) { emit editRequested(pdoc); } } } void ResList::menuOpenFolder() { Rcl::Doc doc; if (getDoc(m_popDoc, doc) && m_source) { Rcl::Doc pdoc = ResultPopup::getFolder(doc); if (!pdoc.url.empty()) { emit editRequested(pdoc); } } } void ResList::menuShowSnippets() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) emit showSnippets(doc); } void ResList::menuShowSubDocs() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) emit showSubDocs(doc); } void ResList::menuEdit() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) emit editRequested(doc); } void ResList::menuOpenWith(QAction *act) { if (act == 0) return; string cmd = qs2utf8s(act->data().toString()); Rcl::Doc doc; if (getDoc(m_popDoc, doc)) emit openWithRequested(doc, cmd); } void ResList::menuCopyFN() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) ResultPopup::copyFN(doc); } void ResList::menuCopyPath() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) ResultPopup::copyPath(doc); } void ResList::menuCopyText() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) ResultPopup::copyText(doc, m_rclmain); } void ResList::menuCopyURL() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) ResultPopup::copyURL(doc); } void ResList::menuExpand() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) emit docExpand(doc); } int ResList::pageFirstDocNum() { return m_pager->pageFirstDocNum(); } recoll-1.43.12/qtgui/widgets/0000755000175000017500000000000015121730573015247 5ustar dockesdockesrecoll-1.43.12/qtgui/widgets/qxtglobal.h0000644000175000017500000001565114753313624017431 0ustar dockesdockes /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #ifndef QXTGLOBAL_H #define QXTGLOBAL_H #include #define QXT_VERSION 0x000700 #define QXT_VERSION_STR "0.7.0" //--------------------------global macros------------------------------ #ifndef QXT_NO_MACROS #ifndef _countof #define _countof(x) (sizeof(x)/sizeof(*x)) #endif #endif // QXT_NO_MACROS //--------------------------export macros------------------------------ #define QXT_STATIC #define QXT_DLLEXPORT DO_NOT_USE_THIS_ANYMORE #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_CORE) # define QXT_CORE_EXPORT Q_DECL_EXPORT # else # define QXT_CORE_EXPORT Q_DECL_IMPORT # endif #else # define QXT_CORE_EXPORT #endif // BUILD_QXT_CORE #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_GUI) # define QXT_GUI_EXPORT Q_DECL_EXPORT # else # define QXT_GUI_EXPORT Q_DECL_IMPORT # endif #else # define QXT_GUI_EXPORT #endif // BUILD_QXT_GUI #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_NETWORK) # define QXT_NETWORK_EXPORT Q_DECL_EXPORT # else # define QXT_NETWORK_EXPORT Q_DECL_IMPORT # endif #else # define QXT_NETWORK_EXPORT #endif // BUILD_QXT_NETWORK #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_SQL) # define QXT_SQL_EXPORT Q_DECL_EXPORT # else # define QXT_SQL_EXPORT Q_DECL_IMPORT # endif #else # define QXT_SQL_EXPORT #endif // BUILD_QXT_SQL #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_WEB) # define QXT_WEB_EXPORT Q_DECL_EXPORT # else # define QXT_WEB_EXPORT Q_DECL_IMPORT # endif #else # define QXT_WEB_EXPORT #endif // BUILD_QXT_WEB #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_BERKELEY) # define QXT_BERKELEY_EXPORT Q_DECL_EXPORT # else # define QXT_BERKELEY_EXPORT Q_DECL_IMPORT # endif #else # define QXT_BERKELEY_EXPORT #endif // BUILD_QXT_BERKELEY #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_ZEROCONF) # define QXT_ZEROCONF_EXPORT Q_DECL_EXPORT # else # define QXT_ZEROCONF_EXPORT Q_DECL_IMPORT # endif #else # define QXT_ZEROCONF_EXPORT #endif // QXT_ZEROCONF_EXPORT #if defined(BUILD_QXT_CORE) || defined(BUILD_QXT_GUI) || defined(BUILD_QXT_SQL) || defined(BUILD_QXT_NETWORK) || defined(BUILD_QXT_WEB) || defined(BUILD_QXT_BERKELEY) || defined(BUILD_QXT_ZEROCONF) # define BUILD_QXT #endif QXT_CORE_EXPORT const char* qxtVersion(); #ifndef QT_BEGIN_NAMESPACE #define QT_BEGIN_NAMESPACE #endif #ifndef QT_END_NAMESPACE #define QT_END_NAMESPACE #endif #ifndef QT_FORWARD_DECLARE_CLASS #define QT_FORWARD_DECLARE_CLASS(Class) class Class; #endif /**************************************************************************** ** This file is derived from code bearing the following notice: ** The sole author of this file, Adam Higerd, has explicitly disclaimed all ** copyright interest and protection for the content within. This file has ** been placed in the public domain according to United States copyright ** statute and case law. In jurisdictions where this public domain dedication ** is not legally recognized, anyone who receives a copy of this file is ** permitted to use, modify, duplicate, and redistribute this file, in whole ** or in part, with no restrictions or conditions. In these jurisdictions, ** this file shall be copyright (C) 2006-2008 by Adam Higerd. ****************************************************************************/ #define QXT_DECLARE_PRIVATE(PUB) friend class PUB##Private; QxtPrivateInterface qxt_d; #define QXT_DECLARE_PUBLIC(PUB) friend class PUB; #define QXT_INIT_PRIVATE(PUB) qxt_d.setPublic(this); #define QXT_D(PUB) PUB##Private& d = qxt_d() #define QXT_P(PUB) PUB& p = qxt_p() template class QxtPrivate { public: virtual ~QxtPrivate() {} inline void QXT_setPublic(PUB* pub) { qxt_p_ptr = pub; } protected: inline PUB& qxt_p() { return *qxt_p_ptr; } inline const PUB& qxt_p() const { return *qxt_p_ptr; } inline PUB* qxt_ptr() { return qxt_p_ptr; } inline const PUB* qxt_ptr() const { return qxt_p_ptr; } private: PUB* qxt_p_ptr; }; template class QxtPrivateInterface { friend class QxtPrivate; public: QxtPrivateInterface() { pvt = new PVT; } ~QxtPrivateInterface() { delete pvt; } inline void setPublic(PUB* pub) { pvt->QXT_setPublic(pub); } inline PVT& operator()() { return *static_cast(pvt); } inline const PVT& operator()() const { return *static_cast(pvt); } inline PVT * operator->() { return static_cast(pvt); } inline const PVT * operator->() const { return static_cast(pvt); } private: QxtPrivateInterface(const QxtPrivateInterface&) { } QxtPrivateInterface& operator=(const QxtPrivateInterface&) { } QxtPrivate* pvt; }; #endif // QXT_GLOBAL recoll-1.43.12/qtgui/widgets/qxtconfirmationmessage.h0000644000175000017500000000676315121730573022226 0ustar dockesdockes#ifndef QXTCONFIRMATIONMESSAGE_H /**************************************************************************** * Copyright (c) 2006 - 2011, the LibQxt project. * See the Qxt AUTHORS file for a list of authors and copyright holders. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the LibQxt project nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * *****************************************************************************/ #define QXTCONFIRMATIONMESSAGE_H #include #include "qxtglobal.h" class QxtConfirmationMessagePrivate; class QXT_GUI_EXPORT QxtConfirmationMessage : public QMessageBox { Q_OBJECT QXT_DECLARE_PRIVATE(QxtConfirmationMessage) Q_PROPERTY(QString confirmationText READ confirmationText WRITE setConfirmationText) Q_PROPERTY(QString overrideSettingsKey READ overrideSettingsKey WRITE setOverrideSettingsKey) Q_PROPERTY(bool rememberOnReject READ rememberOnReject WRITE setRememberOnReject) public: explicit QxtConfirmationMessage(QWidget* parent = 0); virtual ~QxtConfirmationMessage(); QxtConfirmationMessage( QMessageBox::Icon icon, const QString& title, const QString& text, const QString& confirmation = QString(), QMessageBox::StandardButtons buttons = QMessageBox::NoButton, QWidget* parent = 0, Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); static QMessageBox::StandardButton confirm( QWidget* parent, const QString& title, const QString& text, const QString& confirmation = QString(), QMessageBox::StandardButtons buttons= QMessageBox::Yes | QMessageBox::No, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); QString confirmationText() const; void setConfirmationText(const QString& confirmation); QString overrideSettingsKey() const; void setOverrideSettingsKey(const QString& key); bool rememberOnReject() const; void setRememberOnReject(bool remember); public Q_SLOTS: int exec(); void reset(); void onButtonClicked(QAbstractButton *button); }; #endif // QXTCONFIRMATIONMESSAGE_H recoll-1.43.12/qtgui/widgets/editdialog.h0000644000175000017500000000202314753313624017526 0ustar dockesdockes/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef EDITDIALOG_H #define EDITDIALOG_H #include #include "ui_editdialog.h" class EditDialog : public QDialog, public Ui::EditDialog { Q_OBJECT public: EditDialog(QWidget * parent = 0) : QDialog(parent) { setupUi(this); } }; #endif // EDITDIALOG_H recoll-1.43.12/qtgui/widgets/editdialog.ui0000644000175000017500000000271514753313624017724 0ustar dockesdockes EditDialog 0 0 614 509 Dialog Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 recoll-1.43.12/qtgui/widgets/listdialog.h0000644000175000017500000000177614753313624017572 0ustar dockesdockes/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef LISTDIALOG_H #define LISTDIALOG_H #include "ui_listdialog.h" class ListDialog : public QDialog, public Ui::ListDialog { Q_OBJECT public: ListDialog(QWidget * parent = 0) : QDialog(parent) { setupUi(this); } }; #endif // LISTDIALOG_H recoll-1.43.12/qtgui/widgets/listdialog.ui0000644000175000017500000000337214753313624017752 0ustar dockesdockes ListDialog 0 0 400 300 Dialog GroupBox Qt::Horizontal QDialogButtonBox::Ok true buttonBox accepted() ListDialog accept() 248 254 157 274 buttonBox rejected() ListDialog reject() 316 260 286 274 recoll-1.43.12/qtgui/widgets/qxtconfirmationmessage.cpp0000644000175000017500000002473315121730573022556 0ustar dockesdockes#include "qxtconfirmationmessage.h" /**************************************************************************** * Copyright (c) 2006 - 2011, the LibQxt project. * See the Qxt AUTHORS file for a list of authors and copyright holders. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the LibQxt project nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ****************************************************************************/ #include #include #include #include #include #include class QxtConfirmationMessagePrivate : public QxtPrivate { public: QXT_DECLARE_PUBLIC(QxtConfirmationMessage) void init(const QString& message = QString()); QString key() const; int showAgain(); void doNotShowAgain(int result); void reset(); bool remember; QCheckBox* confirm; QString overrideKey; }; void QxtConfirmationMessagePrivate::init(const QString& message) { remember = false; confirm = new QCheckBox(&qxt_p()); if (!message.isNull()) confirm->setText(message); else confirm->setText(QxtConfirmationMessage::tr("Do not show again.")); QGridLayout* grid = qobject_cast(qxt_p().layout()); QDialogButtonBox* buttons = qxt_p().findChild(); if (grid && buttons) { const int idx = grid->indexOf(buttons); int row, column, rowSpan, columnSpan = 0; grid->getItemPosition(idx, &row, &column, &rowSpan, &columnSpan); QLayoutItem* buttonsItem = grid->takeAt(idx); grid->addWidget(confirm, row, column, rowSpan, columnSpan, Qt::AlignLeft | Qt::AlignTop); grid->addItem(buttonsItem, ++row, column, rowSpan, columnSpan); } } QString QxtConfirmationMessagePrivate::key() const { QString value = overrideKey; if (value.isEmpty()) { const QString all = qxt_p().windowTitle() + qxt_p().text() + qxt_p().informativeText(); #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) value = QString::number(qChecksum(all.toLocal8Bit())); #else const QByteArray data = all.toLocal8Bit(); value = QString::number(qChecksum(data.constData(), data.length())); #endif } return value; } int QxtConfirmationMessagePrivate::showAgain() { QSettings settings; return settings.value(key(), -1).toInt(); } void QxtConfirmationMessagePrivate::doNotShowAgain(int result) { QSettings settings; settings.setValue(key(), result); } void QxtConfirmationMessagePrivate::reset() { QSettings settings; settings.remove(key()); } /*! \class QxtConfirmationMessage \inmodule QxtWidgets \brief The QxtConfirmationMessage class provides a confirmation message. QxtConfirmationMessage is a confirmation message with checkable \bold {"Do not show again."} option. A checked and accepted confirmation message is no more shown until reseted. Example usage: \code void MainWindow::closeEvent(QCloseEvent* event) { static const QString text(tr("Are you sure you want to quit?")); if (QxtConfirmationMessage::confirm(this, tr("Confirm"), text) == QMessageBox::No) event->ignore(); } \endcode \image qxtconfirmationmessage.png "QxtConfirmationMessage in action." \bold {Note:} QCoreApplication::organizationName and QCoreApplication::applicationName are used for storing settings. In case these properties are empty, \bold "QxtWidgets" and \bold "QxtConfirmationMessage" are used, respectively. */ /*! Constructs a new QxtConfirmationMessage with \a parent. */ QxtConfirmationMessage::QxtConfirmationMessage(QWidget* parent) : QMessageBox(parent) { QXT_INIT_PRIVATE(QxtConfirmationMessage); qxt_d().init(); connect(this, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*))); } /*! Constructs a new QxtConfirmationMessage with \a icon, \a title, \a text, \a confirmation, \a buttons, \a parent and \a flags. */ QxtConfirmationMessage::QxtConfirmationMessage( QMessageBox::Icon icon, const QString& title, const QString& text, const QString& confirmation, QMessageBox::StandardButtons buttons, QWidget* parent, Qt::WindowFlags flags) : QMessageBox(icon, title, text, buttons, parent, flags) { QXT_INIT_PRIVATE(QxtConfirmationMessage); qxt_d().init(confirmation); connect(this, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*))); } /*! Destructs the confirmation message. */ QxtConfirmationMessage::~QxtConfirmationMessage() { } /*! Opens an confirmation message box with the specified \a title, \a text and \a confirmation. The standard \a buttons are added to the message box. \a defaultButton specifies the button used when Enter is pressed. \a defaultButton must refer to a button that was given in \a buttons. If \a defaultButton is QMessageBox::NoButton, QMessageBox chooses a suitable default automatically. Returns the identity of the standard button that was clicked. If Esc was pressed instead, the escape button is returned. If \a parent is \c 0, the message box is an application modal dialog box. If \a parent is a widget, the message box is window modal relative to \a parent. */ QMessageBox::StandardButton QxtConfirmationMessage::confirm( QWidget* parent, const QString& title, const QString& text, const QString& confirmation, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { QxtConfirmationMessage msgBox(QMessageBox::NoIcon, title, text, confirmation, QMessageBox::NoButton, parent); QDialogButtonBox* buttonBox = msgBox.findChild(); Q_ASSERT(buttonBox != 0); uint mask = QMessageBox::FirstButton; while (mask <= QMessageBox::LastButton) { uint sb = buttons & mask; mask <<= 1; if (!sb) continue; QPushButton* button = msgBox.addButton((QMessageBox::StandardButton)sb); // Choose the first accept role as the default if (msgBox.defaultButton()) continue; if ((defaultButton == QMessageBox::NoButton && buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) || (defaultButton != QMessageBox::NoButton && sb == uint(defaultButton))) msgBox.setDefaultButton(button); } if (msgBox.exec() == -1) return QMessageBox::Cancel; return msgBox.standardButton(msgBox.clickedButton()); } /*! \property QxtConfirmationMessage::confirmationText \brief the confirmation text The default value is \bold {"Do not show again."} */ QString QxtConfirmationMessage::confirmationText() const { return qxt_d().confirm->text(); } void QxtConfirmationMessage::setConfirmationText(const QString& confirmation) { qxt_d().confirm->setText(confirmation); } /*! \property QxtConfirmationMessage::overrideSettingsKey \brief the override key used for settings When no \bold overrideSettingsKey has been set, the key is calculated with qChecksum() based on title, text and confirmation message. The default value is an empty string. */ QString QxtConfirmationMessage::overrideSettingsKey() const { return qxt_d().overrideKey; } void QxtConfirmationMessage::setOverrideSettingsKey(const QString& key) { qxt_d().overrideKey = key; } /*! \property QxtConfirmationMessage::rememberOnReject \brief whether \bold {"Do not show again."} option is stored even if the message box is rejected (eg. user presses Cancel). The default value is \c false. */ bool QxtConfirmationMessage::rememberOnReject() const { return qxt_d().remember; } void QxtConfirmationMessage::setRememberOnReject(bool remember) { qxt_d().remember = remember; } /*! Shows the confirmation message if necessary. The confirmation message is not shown in case \bold {"Do not show again."} has been checked while the same confirmation message was earlierly accepted. A confirmation message is identified by the combination of title, QMessageBox::text and optional QMessageBox::informativeText. A clicked button with role QDialogButtonBox::AcceptRole or QDialogButtonBox::YesRole is considered as "accepted". \warning This function does not reimplement but shadows QMessageBox::exec(). \sa QWidget::windowTitle, QMessageBox::text, QMessageBox::informativeText */ int QxtConfirmationMessage::exec() { int res = qxt_d().showAgain(); if (res == -1) res = QMessageBox::exec(); return res; } void QxtConfirmationMessage::onButtonClicked(QAbstractButton *button) { QDialogButtonBox* buttons = this->findChild(); Q_ASSERT(buttons != 0); int role = buttons->buttonRole(button); if (qxt_d().confirm->isChecked() && (qxt_d().remember || role != QDialogButtonBox::RejectRole)) { qxt_d().doNotShowAgain(0); } } /*! Resets this instance of QxtConfirmationMessage. A reseted confirmation message is shown again until user checks \bold {"Do not show again."} and accepts the confirmation message. */ void QxtConfirmationMessage::reset() { qxt_d().reset(); } recoll-1.43.12/qtgui/configswitch.h0000644000175000017500000000261015134657534016451 0ustar dockesdockes/* Copyright (C) 2024 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _CONFIGSWITCH_H_INCLUDED_ #define _CONFIGSWITCH_H_INCLUDED_ // Dialog for switching to another configuration. Activating execs another recoll process. #include #include #include #include #include "ui_configswitch.h" class QCompleter; class QString; class ConfigSwitchW : public QDialog, public Ui::ConfigSwitchDLG { Q_OBJECT public: ConfigSwitchW(QWidget* parent = 0) : QDialog(parent) { setupUi(this); init(); } private slots: virtual void done(int); private: void init(); QStringList m_qdirs; }; #endif /* _CONFIGSWITCH_H_INCLUDED_ */ recoll-1.43.12/qtgui/preview_w.cpp0000644000175000017500000012356215132373576016335 0ustar dockesdockes/* Copyright (C) 2005-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // For the various preview draw engines #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "preview_w.h" #include "log.h" #include "pathut.h" #include "internfile.h" #include "recoll.h" #include "smallut.h" #include "chrono.h" #include "cancelcheck.h" #include "guiutils.h" #include "docseqhist.h" #include "rclhelp.h" #include "preview_load.h" #include "preview_plaintorich.h" #include "rclmain_w.h" #include "scbase.h" #include "appformime.h" #include "readfile.h" #include "rclwebpage.h" #include "rcldb.h" #if defined(PREVIEW_WEBKIT) || defined(PREVIEW_WEBENGINE) const static QUrl baseUrl("file:///"); #endif using std::string; #if defined(PREVIEW_WEBENGINE) static QWebEngineProfile* theWebEngineProfile; RclWebInterceptor *RclWebInterceptor::theInterceptor; RclWebInterceptor *RclWebInterceptor::getInterceptor() { if (nullptr == theInterceptor) { theInterceptor = new RclWebInterceptor(); } return theInterceptor; } QWebEngineProfile *getTheProfile() { if (nullptr == theWebEngineProfile) { theWebEngineProfile = new QWebEngineProfile(); theWebEngineProfile->setUrlRequestInterceptor(RclWebInterceptor::getInterceptor()); } return theWebEngineProfile; } #endif // Webengine void Preview::init() { setAttribute(Qt::WA_DeleteOnClose); // Create the first tab (the tab widget is created with one initial tab for ease of use in // designer, we remove it). addEditorTab(); pvTab->removeTab(0); // Init data for the "goto next search hit" combo initSTermWalk(); if (prefs.pvwidth > 100) { resize(prefs.pvwidth, prefs.pvheight); } else { resize(QSize(640, 480).expandedTo(minimumSizeHint())); } (void)new HelpClient(this); HelpClient::installMap((const char *)objectName().toUtf8(), "RCL.SEARCH.GUI.PREVIEW"); // signals and slots connections connect(new QShortcut(QKeySequence::ZoomIn,this), SIGNAL (activated()), this, SLOT (zoomIn())); connect(new QShortcut(QKeySequence::ZoomOut,this),SIGNAL (activated()), this, SLOT (zoomOut())); connect(searchTextCMB, SIGNAL(editTextChanged(const QString&)), this, SLOT(searchTextChanged(const QString&))); connect(nextPB, SIGNAL(clicked()), this, SLOT(nextPressed())); connect(prevPB, SIGNAL(clicked()), this, SLOT(prevPressed())); connect(clearPB, SIGNAL(clicked()), searchTextCMB, SLOT(clearEditText())); connect(editPB, SIGNAL(clicked()), this, SLOT(emitEditRequested())); connect(pvTab, SIGNAL(currentChanged(int)), this, SLOT(currentChanged(int))); connect(pvTab, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); onNewShortcuts(); connect(&SCBase::scBase(), SIGNAL(shortcutsChanged()), this, SLOT(onNewShortcuts())); connect(nextInTabPB, SIGNAL (clicked()), this, SLOT (emitShowNext())); connect(prevInTabPB, SIGNAL (clicked()), this, SLOT (emitShowPrev())); onUiPrefsChanged(); currentChanged(pvTab->currentIndex()); } void Preview::onUiPrefsChanged() { LOGDEB("Preview::onUiPrefsChanged\n"); int fs; if (prefs.reslistfontfamily != "") { m_font = QFont(prefs.reslistfontfamily); fs = prefs.reslistfontsize; float scale = prefs.wholeuiscale > 0 ? prefs.wholeuiscale : 1.0; fs = std::round(fs * scale); } else { // Note: the default font is already scaled by the style sheet. ensurePolished(); m_font = this->font(); fs = m_font.pointSize(); } if (fs <= 3) fs = 12; LOGDEB0("Preview: using font point size " << fs <<"\n"); m_font.setPointSize(fs); for (int i = 0; i < pvTab->count(); i++) { editor(i)->redisplay(); } } void Preview::onNewShortcuts() { SETSHORTCUT(this, "preview:151", tr("Preview Window"), tr("Close preview window"), "Esc", m_closewinsc, close); SETSHORTCUT(this, "preview:153",tr("Preview Window"), tr("Show next result"), "Shift+Down", m_nextdocsc, emitShowNext); SETSHORTCUT(this, "preview:155", tr("Preview Window"), tr("Show previous result"), "Shift+Up", m_prevdocsc, emitShowPrev); SETSHORTCUT(this, "preview:159", tr("Preview Window"), tr("Close tab"), "Ctrl+W", m_closetabsc, closeCurrentTab); QKeySequence ks = SCBase::scBase().get("preview:162", tr("Preview Window"), tr("Print"), "Ctrl+P"); if (!ks.isEmpty()) { delete m_printtabsc; m_printtabsc = new QShortcut(ks, this, SIGNAL(printCurrentPreviewRequest())); } } void Preview::zoomIn() { m_font.setPointSize(m_font.pointSize()+1); PreviewTextEdit *edit = currentEditor(); if (edit) { edit->displayText(); } } void Preview::zoomOut() { m_font.setPointSize(m_font.pointSize()-1); PreviewTextEdit *edit = currentEditor(); if (edit) { edit->displayText(); } } void Preview::listShortcuts() { LISTSHORTCUT(null, "preview:151", tr("Preview Window"), tr("Close preview window"), "Esc", m_closewinsc, close); LISTSHORTCUT(null, "preview:153", tr("Preview Window"), tr("Show next result"), "Shift+Down", m_nextdocsc, emitShowNext); LISTSHORTCUT(null, "preview:155", tr("Preview Window"), tr("Show previous result"), "Shift+Up",m_prevdocsc, emitShowPrev); LISTSHORTCUT(null, "preview:159", tr("Preview Window"), tr("Close tab"), "Ctrl+W", m_closetabsc, closeCurrentTab); #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) LISTSHORTCUT(null, "preview:162", tr("Preview Window"), tr("Print"), "Ctrl+P", m_printtabsc, print); #endif } void Preview::emitShowNext() { if (m_loading) return; PreviewTextEdit *edit = currentEditor(); if (edit) { emit showNext(this, m_searchId, edit->m_docnum); } } void Preview::emitShowPrev() { if (m_loading) return; PreviewTextEdit *edit = currentEditor(); if (edit) { emit showPrev(this, m_searchId, edit->m_docnum); } } void Preview::closeEvent(QCloseEvent *e) { LOGDEB("Preview::closeEvent. m_loading " << m_loading << "\n"); if (m_loading) { CancelCheck::instance().setCancel(); e->ignore(); return; } prefs.pvwidth = width(); prefs.pvheight = height(); /* Actually close the tabs else we get complaints from WebEngine about profiles being released * too early. This also deletes the temp files if any. */ for (int i = 0; i < pvTab->count(); i++) { closeTab(i); } emit previewExposed(this, m_searchId, -1); emit previewClosed(this); QWidget::closeEvent(e); } extern const char *eventTypeToStr(int tp); bool Preview::eventFilter(QObject *target, QEvent *event) { if (event->type() != QEvent::KeyPress && event->type() != QEvent::ShortcutOverride) { #if 0 LOGDEB0("Preview::eventFilter(): " << eventTypeToStr(event->type()) << "\n"); if (event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mev = (QMouseEvent *)event; LOGDEB("Mouse: GlobalY " << mev->globalY() << " y " << mev->y() << "\n"); } #endif return false; } PreviewTextEdit *edit = currentEditor(); QKeyEvent *keyEvent = static_cast(event); #if defined(PREVIEW_WEBKIT) || defined(PREVIEW_WEBENGINE) if((keyEvent->key() == Qt::Key_C) && (keyEvent->modifiers().testFlag(Qt::ControlModifier))) { qApp->clipboard()->setText(edit->page()->selectedText()); return true; } #endif // Webengine or Webkit if (m_dynSearchActive) { if (keyEvent->key() == Qt::Key_F3) { LOGDEB2("Preview::eventFilter: got F3\n"); doSearch(searchTextCMB->currentText(), true, (keyEvent->modifiers() & Qt::ShiftModifier) != 0); return true; } if (target != searchTextCMB) return QApplication::sendEvent(searchTextCMB, event); } else { LOGDEB1("Preview::eventFilter: target: " << target << " edit " << edit << "\n"); if (edit && (target == edit #ifdef PREVIEW_TEXTBROWSER || target == edit->viewport() #endif )) { LOGDEB1("preview::eventFilter:: in target\n"); if (keyEvent->key() == Qt::Key_Slash || (keyEvent->key() == Qt::Key_F && (keyEvent->modifiers() & Qt::ControlModifier))) { LOGDEB2("Preview::eventFilter: got / or C-F\n"); searchTextCMB->setFocus(); m_dynSearchActive = true; return true; } #ifdef PREVIEW_TEXTBROWSER else if (keyEvent->key() == Qt::Key_Space) { LOGDEB2("Preview::eventFilter: got Space\n"); int value = edit->verticalScrollBar()->value(); value += edit->verticalScrollBar()->pageStep(); edit->verticalScrollBar()->setValue(value); return true; } else if (keyEvent->key() == Qt::Key_Backspace) { LOGDEB2("Preview::eventFilter: got Backspace\n"); int value = edit->verticalScrollBar()->value(); value -= edit->verticalScrollBar()->pageStep(); edit->verticalScrollBar()->setValue(value); return true; } #endif } } return false; } void Preview::emitSaveDocToFile() { PreviewTextEdit *ce = currentEditor(); if (ce && !ce->m_dbdoc.url.empty()) { emit saveDocToFile(ce->m_dbdoc); } } void Preview::emitEditRequested() { PreviewTextEdit *ce = currentEditor(); if (ce && !ce->m_dbdoc.url.empty()) { emit editRequested(ce->m_dbdoc); } } // Called when user clicks on tab void Preview::currentChanged(int index) { LOGDEB2("PreviewTextEdit::currentChanged\n"); PreviewTextEdit *edit = editor(index); LOGDEB1("Preview::currentChanged(). Editor: " << edit << "\n"); if (edit == 0) { LOGERR("Editor child not found\n"); return; } edit->setFocus(); editPB->setEnabled(canOpen(&edit->m_dbdoc, theconfig)); #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) // Disconnect the print signal and reconnect it to the current editor LOGDEB1("Disconnecting reconnecting print signal\n"); disconnect(this, SIGNAL(printCurrentPreviewRequest()), 0, 0); connect(this, SIGNAL(printCurrentPreviewRequest()), edit, SLOT(print())); #endif edit->installEventFilter(this); #ifdef PREVIEW_TEXTBROWSER edit->viewport()->installEventFilter(this); #else QWidget* evWidget = nullptr; foreach(QObject* obj, edit->children()) { QWidget* wgt = qobject_cast(obj); if (wgt) { evWidget = wgt; break; } } if (evWidget) { evWidget->installEventFilter(this); } #endif searchTextCMB->installEventFilter(this); emit previewExposed(this, m_searchId, edit->m_docnum); } void Preview::closeCurrentTab() { LOGDEB1("Preview::closeCurrentTab: m_loading " << m_loading << "\n"); if (m_loading) { CancelCheck::instance().setCancel(); return; } closeTab(pvTab->currentIndex()); } void Preview::closeTab(int index) { LOGDEB1("Preview::closeTab: m_loading " << m_loading << "\n"); if (m_loading) { CancelCheck::instance().setCancel(); return; } PreviewTextEdit *edit = editor(index); if (edit) { forgetTempFile(edit->m_imgfilename); #ifdef PREVIEW_WEBENGINE forgetTempFile(edit->m_datafilename); #endif } if (pvTab->count() > 1) { pvTab->removeTab(index); } else { close(); } } PreviewTextEdit *Preview::editor(int index) { return dynamic_cast(pvTab->widget(index)); } PreviewTextEdit *Preview::currentEditor() { LOGDEB2("Preview::currentEditor()\n"); return editor(pvTab->currentIndex()); } PreviewTextEdit *Preview::addEditorTab() { LOGDEB1("PreviewTextEdit::addEditorTab()\n"); PreviewTextEdit *editor = new PreviewTextEdit(pvTab, "pvEdit", this); #ifdef PREVIEW_TEXTBROWSER editor->setReadOnly(true); editor->setUndoRedoEnabled(false ); #endif pvTab->addTab(editor, "Tab"); pvTab->setCurrentIndex(pvTab->count() - 1); return editor; } void Preview::setCurTabProps(const Rcl::Doc &doc, int docnum) { LOGDEB1("Preview::setCurTabProps\n"); QString title; string ctitle; if (doc.getmeta(Rcl::Doc::keytt, &ctitle) && !ctitle.empty()) { title = u8s2qs(ctitle); } else if (doc.getmeta(Rcl::Doc::keyfn, &ctitle) && !ctitle.empty()) { title = u8s2qs(ctitle); } else { title = path2qs(path_getsimple(doc.url)); } if (title.length() > 20) { title = title.left(10) + "..." + title.right(10); } int curidx = pvTab->currentIndex(); pvTab->setTabText(curidx, title); string datebuf; if (!doc.fmtime.empty() || !doc.dmtime.empty()) { time_t mtime = doc.dmtime.empty() ? atoll(doc.fmtime.c_str()) : atoll(doc.dmtime.c_str()); struct tm *tm = localtime(&mtime); datebuf = utf8datestring("%Y-%m-%d %H:%M:%S", tm); } LOGDEB("Doc.url: [" << doc.url << "]\n"); string url; printableUrl(theconfig->getDefCharset(), doc.url, url); string tiptxt = url + string("\n"); tiptxt += doc.mimetype + " " + datebuf + "\n"; if (!ctitle.empty()) tiptxt += ctitle + "\n"; pvTab->setTabToolTip(curidx, u8s2qs(tiptxt)); PreviewTextEdit *e = currentEditor(); if (e) { e->m_url = doc.url; e->m_ipath = doc.ipath; e->m_docnum = docnum; } } bool Preview::makeDocCurrent(Rcl::Doc& doc, int docnum, bool sametab) { LOGDEB("Preview::makeDocCurrent: " << doc.url << "\n"); if (m_loading) { LOGERR("Already loading\n"); return false; } /* Check if we already have this page */ for (int i = 0; i < pvTab->count(); i++) { PreviewTextEdit *edit = editor(i); if (edit && !edit->m_url.compare(doc.url) && !edit->m_ipath.compare(doc.ipath)) { pvTab->setCurrentIndex(i); return true; } } // if just created the first tab was created during init if (!sametab && !m_justCreated && !addEditorTab()) { return false; } m_justCreated = false; if (!loadDocInCurrentTab(doc, docnum)) { closeCurrentTab(); return false; } raise(); return true; } void Preview::togglePlainPre() { switch (prefs.previewPlainPre) { case PrefsPack::PP_BR: prefs.previewPlainPre = PrefsPack::PP_PRE; break; case PrefsPack::PP_PRE: prefs.previewPlainPre = PrefsPack::PP_BR; break; case PrefsPack::PP_PREWRAP: default: prefs.previewPlainPre = PrefsPack::PP_PRE; break; } PreviewTextEdit *editor = currentEditor(); if (editor) loadDocInCurrentTab(editor->m_dbdoc, editor->m_docnum); } void Preview::emitWordSelect(QString word) { emit wordSelect(word); } // Display message dialog after load failed void Preview::displayLoadError( FileInterner::ErrorPossibleCause explain, bool canGetRawText) { // Note that we can't easily check for a readable file // because it's possible that only a region is locked // (e.g. on Windows for an ost file the first block is // readable even if Outlook is running). QString msg; switch (explain) { case FileInterner::FetchMissing: msg = tr("Error loading the document: file missing."); break; case FileInterner::FetchPerm: msg = tr("Error loading the document: no permission."); break; case FileInterner::FetchNoBackend: msg = tr("Error loading: backend not configured."); break; case FileInterner::InternfileOther: #ifdef _WIN32 msg = tr("Error loading the document: other handler error
" "Maybe the application is locking the file ?"); #else msg = tr("Error loading the document: other handler error."); #endif break; } if (canGetRawText) { msg += tr("
Attempting to display from stored text."); } QMessageBox::warning(this, "Recoll", msg); } bool Preview::runLoadThread(LoadThread& lthr, QTimer& tT, QEventLoop& loop, QProgressDialog& progress, bool canGetRawText) { lthr.start(); for (int i = 0;;i++) { tT.start(1000); loop.exec(); if (lthr.isFinished()) break; if (progress.wasCanceled()) { CancelCheck::instance().setCancel(); } if (i == 1) progress.show(); } LOGDEB("loadDocInCurrentTab: after file load: cancel " << CancelCheck::instance().cancelState() << " status " << lthr.status << " text length " << lthr.fdoc.text.length() << "\n"); if (lthr.status == 0) { return true; } if (CancelCheck::instance().cancelState()) return false; QString explain; if (!lthr.missing.empty()) { explain = QString::fromUtf8("
") + tr("Missing helper program: ") + path2qs(lthr.missing); QMessageBox::warning(0, "Recoll", tr("Can't turn doc into internal representation for ") + lthr.fdoc.mimetype.c_str() + explain); } else { if (progress.wasCanceled()) { QMessageBox::warning(0, "Recoll", tr("Canceled")); } else { progress.reset(); displayLoadError(lthr.explain, canGetRawText); } } return false; } /* Code for loading a file into an editor window. The operations that we call have no provision to indicate progression, and it would be complicated or impossible to modify them to do so (Ie: for external format converters). We implement a complicated and ugly mechanism based on threads to indicate to the user that the app is doing things: lengthy operations are done in threads and we update a progress indicator while they proceed (but we have no estimate of their total duration). It might be possible, but complicated (need modifications in handler) to implement a kind of bucket brigade, to have the beginning of the text displayed faster */ // Insert into editor by chunks so that the top becomes visible // earlier for big texts. This provokes some artifacts (adds empty line), // so we can't set it too low. #define CHUNKL 500*1000 // Make sure we don't ever reenter loadDocInCurrentTab: note that I // don't think it's actually possible, this must be the result of a // misguided debug session. class LoadGuard { bool *m_bp; public: LoadGuard(bool *bp) {m_bp = bp ; *m_bp = true;} ~LoadGuard() {*m_bp = false; CancelCheck::instance().setCancel(false);} }; #ifdef PREVIEW_WEBENGINE bool PreviewTextEdit::webengineShowContent() { // Webengine can't setHtml() over 2MB, we need to use a temporary file in this case. if (m_richtxt.size() > 1024*1024) { if (m_datafilename.empty()) { TempFile temp(".html"); if (!temp.ok()) { LOGERR("Preview: TEMP NOT OK: [" << temp.getreason() << "]\n"); return false; } rememberTempFile(temp); m_datafilename = temp.filename(); } std::fstream s{m_datafilename, s.binary | s.trunc | s.out}; if (s.is_open()) { std::string chars = qs2utf8s(m_richtxt); s.write(chars.c_str(), chars.size()); } QUrl qurl(path_pathtofileurl(m_datafilename).c_str()); load(qurl); } else { setHtml(m_richtxt, baseUrl); } return true; } #endif // Webengine bool Preview::loadDocInCurrentTab(Rcl::Doc &idoc, int docnum) { LOGDEB1("Preview::loadDocInCurrentTab()\n"); LoadGuard guard(&m_loading); CancelCheck::instance().setCancel(false); setCurTabProps(idoc, docnum); QString msg = QString("Loading: %1 (size %2 bytes)") .arg(path2qs(idoc.url), u8s2qs(idoc.fbytes)); QProgressDialog progress(msg, tr("Cancel"), 0, 0, this); progress.setMinimumDuration(2000); QEventLoop loop; QTimer tT; tT.setSingleShot(true); connect(&tT, SIGNAL(timeout()), &loop, SLOT(quit())); //////////////////////////////////////////////////////////////////////// // Load and convert document // - idoc came out of the index data (main text and some fields missing). // - fdoc is the complete one what we are going to extract from storage. // // If the preference to use the stored text is set, we still // create the LoadThread object for convenience (using its fdoc // field, but don't start it. LoadThread lthr(theconfig, idoc, prefs.previewHtml, this); connect(<hr, SIGNAL(finished()), &loop, SLOT(quit())); bool canGetRawText = rcldb && rcldb->storesDocText(); bool preferStoredText = std::find(prefs.preferStoredTextMimes.begin(), prefs.preferStoredTextMimes.end(), idoc.mimetype) != prefs.preferStoredTextMimes.end(); bool loadok{false}; if (!preferStoredText || !canGetRawText) { // Try load from actual document loadok = runLoadThread(lthr, tT, loop, progress, canGetRawText); } if (!loadok && canGetRawText) { // Preferring/able to use stored text or extern load failed lthr.fdoc = idoc; loadok = rcldb->getDocRawText(lthr.fdoc); if (!loadok) { QMessageBox::warning(0,"Recoll",tr("Could not fetch stored text")); } lthr.fdoc.mimetype = "text/plain"; } if (!loadok) { // Everything failed. progress.close(); return false; } // Reset config just in case. theconfig->setKeyDir(""); //////////////////////////////////////////////////////////////////////// // Create preview text: highlight search terms // We don't do the highlighting for very big texts: too long. We // should at least do special char escaping, in case a '&' or '<' // somehow slipped through previous processing. bool highlightTerms = int(lthr.fdoc.text.length()) < prefs.maxhltextkbs * 1024; // Final text is produced in chunks so that we can display the top // while still inserting at bottom PreviewTextEdit *editor = currentEditor(); editor->m_plaintorich->clear(); // For an actual html file, if we want to have the images and // style loaded in the preview, we need to set the search // path. Not too sure this is a good idea as I find them rather // distracting when looking for text, esp. with qtextedit // relatively limited html support (text sometimes get hidden by // images). #if 0 string path = fileurltolocalpath(idoc.url); if (!path.empty()) { path = path_getfather(path); QStringList paths(path2qs(path)); editor->setSearchPaths(paths); } #endif bool inputishtml = !lthr.fdoc.mimetype.compare("text/html"); #if defined(PREVIEW_WEBKIT) // The webkit object inherits some of the QT style (e.g.: dark background). This does not happen // with webengine (better in this respect). Restore reasonable colors so that the default colors // are what an HTML style would expect (esp: many don't set the background so that we sometimes // would get black-on-dark text) if (prefs.darkMode) { if (inputishtml) { QString sstyle{"* {background-color: #ffffff;" "color: #000000;" "selection-background-color: #fefe00;" "selection-color: #707070;}"}; editor->setStyleSheet(sstyle); } else { applyStyle(); } } #endif editor->setFont(m_font); editor->setHtml(""); QStringList qrichlst; editor->m_plaintorich->set_activatelinks(prefs.previewActiveLinks); if (highlightTerms) { progress.setLabelText(tr("Creating preview text")); qApp->processEvents(); if (inputishtml) { LOGDEB1("Preview: got text/html " << lthr.fdoc.text.substr(0,100) << "\n"); editor->m_plaintorich->set_inputhtml(true); } else { LOGDEB1("Preview: got text/plain " << lthr.fdoc.text.substr(0,100) << "\n"); editor->m_plaintorich->set_inputhtml(false); } ToRichThread rthr(lthr.fdoc.text, m_hData, editor->m_plaintorich, qrichlst, this); connect(&rthr, SIGNAL(finished()), &loop, SLOT(quit())); rthr.start(); for (;;) { tT.start(1000); loop.exec(); if (rthr.isFinished()) break; if (progress.wasCanceled()) { CancelCheck::instance().setCancel(); } } // Conversion to rich text done if (CancelCheck::instance().cancelState()) { if (qrichlst.size() == 0 || qrichlst.front().size() == 0) { // We can't call closeCurrentTab here as it might delete // the object which would be a nasty surprise to our // caller. return false; } else { qrichlst.back() += "Cancelled !"; } } } else { LOGDEB("Preview: no highlighting, loading " << lthr.fdoc.text.size() << " bytes\n"); // No plaintorich() call. In this case, either the text is // html and the html quoting is hopefully correct, or it's // plain-text and there is no need to escape special // characters. We'd still want to split in chunks (so that the // top is displayed faster), but we must not cut tags, and // it's too difficult on html. For text we do the splitting on // a QString to avoid utf8 issues. QString qr = u8s2qs(lthr.fdoc.text); if (inputishtml) { qrichlst.push_back(qr); } else { #ifdef PREVIEW_TEXTBROWSER editor->setPlainText(""); #endif int l = 0; for (int pos = 0; pos < (int)qr.length(); pos += l) { l = MIN(CHUNKL, qr.length() - pos); qrichlst.push_back(qr.mid(pos, l)); } } } /////////////////////////////////////////////////////////// // Load text into editor window. progress.setLabelText(tr("Loading preview text into editor")); qApp->processEvents(); #ifdef PREVIEW_TEXTBROWSER editor->m_richtxt.clear(); for (QStringList::iterator it = qrichlst.begin(); it != qrichlst.end(); it++) { qApp->processEvents(); editor->append(*it); // We need to save the rich text for printing, the editor does // not do it consistently for us. editor->m_richtxt.append(*it); if (progress.wasCanceled()) { editor->append("Cancelled !"); LOGDEB("loadDocInCurrentTab: cancelled in editor load\n"); break; } } #else editor->m_richtxt.clear(); for (const auto& chunk : qrichlst) { editor->m_richtxt.append(chunk); } LOGDEB2("HTML: " << qs2utf8s(editor->m_richtxt).substr(0, 5000) << "\n"); #ifdef USING_WEBENGINE // Work around 2mb limit of webengine setHtml() if (!editor->webengineShowContent()) return false; #else // Webkit-> editor->setHtml(editor->m_richtxt, baseUrl); #endif // Webkit #endif progress.close(); editor->m_curdsp = PreviewTextEdit::PTE_DSPTXT; //////////////////////////////////////////////////////////////////////// // Finishing steps // Maybe the text was actually empty ? Switch to fields then. Else free-up // the text memory in the loaded document. We still have a copy of the text // in editor->m_richtxt bool textempty = lthr.fdoc.text.empty(); if (!textempty) lthr.fdoc.text.clear(); editor->m_fdoc = lthr.fdoc; editor->m_dbdoc = idoc; editPB->setEnabled(canOpen(&editor->m_dbdoc, theconfig)); if (textempty) editor->displayFields(); // If this is an image, display it instead of the text. if (mimeIsImage(idoc.mimetype)) { string fn = fileurltolocalpath(idoc.url); theconfig->setKeyDir(fn.empty() ? "" : path_getfather(fn)); // We want a real file, so if this comes from data or we have an ipath, create it. if (fn.empty() || !idoc.ipath.empty()) { TempFile temp = lthr.tmpimg; if (temp.ok()) { LOGDEB1("Preview: load: got temp file from internfile\n"); } else if (!FileInterner::idocToFile(temp, string(), theconfig, idoc)) { temp = TempFile(); // just in case. } if (temp.ok()) { rememberTempFile(temp); fn = temp.filename(); editor->m_imgfilename = fn; } else { editor->m_imgfilename.erase(); fn.erase(); } } else { editor->m_imgfilename = fn; } if (!fn.empty()) { // Check if this might be an image, display it then. editor->m_image = QImage(fn.c_str()); if (!editor->m_image.isNull()) { #ifndef PREVIEW_TEXTBROWSER // The QImage is not actually used, so free the memory. Keep m_image set as a flag. editor->m_image = QImage(); #endif editor->displayImage(); } } } // Position the editor so that the first search term is visible. Note that doSearch always // advances to the next match, so we hack it away by performing one forward and one backward // search to get back to the first one... if (!searchTextCMB->currentText().isEmpty()) { // If there is a current search string, perform the search. // Do not beep for an automatic search, this is ennoying. m_canBeep = false; doSearch(searchTextCMB->currentText(), true, false); doSearch(searchTextCMB->currentText(), true, true); } else { // Position to the first query term if (editor->m_plaintorich->haveAnchors()) { #ifdef PREVIEW_TEXTBROWSER QString aname = editor->m_plaintorich->curAnchorName(); LOGDEB2("Call movetoanchor(" << qs2utf8s(aname) << ")\n"); editor->scrollToAnchor(aname); // Position the cursor approximately at the anchor (top of // viewport) so that searches start from here QTextCursor cursor = editor->cursorForPosition(QPoint(0, 0)); editor->setTextCursor(cursor); #else doSearch("", false, false); doSearch("", false, true); #endif } } // Enter document in document history historyEnterDoc(rcldb, g_dynconf, idoc); editor->setFocus(); emit previewExposed(this, m_searchId, docnum); LOGDEB("loadDocInCurrentTab: returning true\n"); return true; } PreviewTextEdit::PreviewTextEdit(QWidget* parent, const char* nm, Preview *pv) : PREVIEW_PARENTCLASS(parent), m_preview(pv), m_plaintorich(new PlainToRichQtPreview()), m_dspflds(false), m_docnum(-1) { setContextMenuPolicy(Qt::CustomContextMenu); setObjectName(nm); connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(createPopupMenu(const QPoint&))); // We do need javascript in the preview for walking the anchors. JS external fetches are blocked // by CORS (and additionally by the interceptor for Webengine). #if defined(PREVIEW_WEBKIT) page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); settings()->setAttribute(QWebSettings::JavascriptEnabled, true); connect(this, SIGNAL(linkClicked(const QUrl &)), this, SLOT(onAnchorClicked(const QUrl &))); #elif defined(PREVIEW_WEBENGINE) // It seems that the only way for preventing webengine from fetching stuff from the web is to // set an interceptor (forbidding everything except the initial page load). setPage(new RclWebPage(getTheProfile(), this)); settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true); connect(page(), SIGNAL(linkClicked(const QUrl &)), this, SLOT(onAnchorClicked(const QUrl &))); #else setOpenExternalLinks(false); setOpenLinks(false); connect(this, SIGNAL(anchorClicked(const QUrl &)), this, SLOT(onAnchorClicked(const QUrl&))); #endif } void PreviewTextEdit::onAnchorClicked(const QUrl& url) { LOGDEB("PreviewTextEdit::onAnchorClicked: " << qs2utf8s(url.toString()) << "\n"); if (prefs.previewActiveLinks && m_preview->m_rclmain) { Rcl::Doc doc; doc.url = qs2utf8s(url.toString()).c_str(); doc.mimetype = "text/html"; m_preview->m_rclmain->startNativeViewer(doc); } } void PreviewTextEdit::createPopupMenu(const QPoint& pos) { LOGDEB1("PreviewTextEdit::createPopupMenu()\n"); QMenu *popup = new QMenu(this); switch (m_curdsp) { case PTE_DSPTXT: popup->addAction(tr("Show fields"), this, SLOT(displayFields())); if (!m_image.isNull()) popup->addAction(tr("Show image"), this, SLOT(displayImage())); break; case PTE_DSPFLDS: popup->addAction(tr("Show main text"), this, SLOT(displayText())); if (!m_image.isNull()) popup->addAction(tr("Show image"), this, SLOT(displayImage())); break; case PTE_DSPIMG: default: popup->addAction(tr("Show fields"), this, SLOT(displayFields())); popup->addAction(tr("Show main text"), this, SLOT(displayText())); break; } popup->addAction(tr("Reload as Plain Text"), this, SLOT(reloadAsPlainText())); popup->addAction(tr("Reload as HTML"), this, SLOT(reloadAsHTML())); #ifdef PREVIEW_TEXTBROWSER popup->addAction(tr("Select All"), this, SLOT(selectAll())); popup->addAction(tr("Copy"), this, SLOT(copy())); #endif #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) popup->addAction(tr("Print"), this, SLOT(print())); #endif if (prefs.previewPlainPre) { popup->addAction(tr("Fold lines"), m_preview, SLOT(togglePlainPre())); } else { popup->addAction(tr("Preserve indentation"), m_preview, SLOT(togglePlainPre())); } if (!m_dbdoc.url.empty()) { popup->addAction(tr("Save document to file"), m_preview, SLOT(emitSaveDocToFile())); if (canOpen(&m_dbdoc, theconfig)) { popup->addAction(tr("Open document"), m_preview, SLOT(emitEditRequested())); } } popup->popup(mapToGlobal(pos)); } void PreviewTextEdit::reloadAsPlainText() { auto saved = prefs.previewHtml; prefs.previewHtml = false; m_preview->loadDocInCurrentTab(m_dbdoc, m_docnum); prefs.previewHtml = saved; } void PreviewTextEdit::reloadAsHTML() { auto saved = prefs.previewHtml; prefs.previewHtml = true; m_preview->loadDocInCurrentTab(m_dbdoc, m_docnum); prefs.previewHtml = saved; } void PreviewTextEdit::redisplay() { switch(m_curdsp) { case PTE_DSPTXT: displayText(); break; case PTE_DSPFLDS: displayFields(); break; case PTE_DSPIMG: displayImage(); break; } } // Display main text void PreviewTextEdit::displayText() { // Ensuring that the view does not move when changing the font size and redisplaying the text: // can't find a good way to do it. The only imperfect way I found was to get the position for // the last line (approximately), and make the position visible after the change. #ifdef PREVIEW_TEXTBROWSER auto c = cursorForPosition(QPoint(0,height()-20)); int pos = c.position(); setFont(m_preview->m_font); setHtml(m_richtxt); if (m_curdsp == PTE_DSPTXT) { auto cursor = textCursor(); cursor.setPosition(pos); setTextCursor(cursor); ensureCursorVisible(); } m_curdsp = PTE_DSPTXT; #else #ifdef USING_WEBENGINE // Work around 2mb limit of webengine setHtml() webengineShowContent(); #else // Webkit-> setHtml(m_richtxt, baseUrl); #endif // Webkit #endif } // Display field values void PreviewTextEdit::displayFields() { LOGDEB1("PreviewTextEdit::displayFields()\n"); setFont(m_preview->m_font); QString txt = "\n"; txt += "" + path2qs(m_url); if (!m_ipath.empty()) txt += "|" + u8s2qs(m_ipath); txt += "

"; txt += "
\n"; for (const auto& entry: m_fdoc.meta) { if (!entry.second.empty()) { if (prefs.pvmaxfldlen == 0 || (int)entry.second.size() < prefs.pvmaxfldlen) { txt += "
" + u8s2qs(entry.first) + "
" + "
" + u8s2qs(escapeHtml(entry.second)) + "
\n"; } else { auto full = escapeHtml(entry.second); auto summary = full.substr(0, 60) + "..."; txt += "
" + u8s2qs(entry.first) + "
" + "
" + u8s2qs(summary) + "" + u8s2qs(full) + "
\n"; } } } txt += "
"; setHtml(txt); m_curdsp = PTE_DSPFLDS; } void PreviewTextEdit::displayImage() { LOGDEB1("PreviewTextEdit::displayImage()\n"); setFont(m_preview->m_font); #ifdef PREVIEW_TEXTBROWSER if (m_image.isNull()) { displayText(); return; } setPlainText(""); if (m_image.width() > width() || m_image.height() > height()) { m_image = m_image.scaled(width(), height(), Qt::KeepAspectRatio); } document()->addResource(QTextDocument::ImageResource, QUrl("image"), m_image); textCursor().insertImage("image"); #elif defined(PREVIEW_WEBENGINE_not) // Webengine can directly display an image type, without an HTML container but the size it will // display is limited to a couple Mpix. Big images will fail to display. This is documented on // the QWebenginePage doc actually: // Warning: The content will be percent encoded before being sent to the renderer via // IPC. This may increase its size. The maximum size of the percent encoded content is 2 // megabytes minus 6 bytes plus the length of the mime type string. // We could load a QImage, scale it, then convert to data stream, but it's just simpler to use // the HTML way, which we need for webkit anyway. LOGDEB("Reading image (webengine): " << m_dbdoc.mimetype << " from " << m_imgfilename << "\n"); std::string content; if (!m_imgfilename.empty() && file_to_string(m_imgfilename, content)) { QByteArray qcontent(content.c_str(), content.size()); setContent(qcontent, u8s2qs(m_dbdoc.mimetype)); } #else // -> WEBKIT or WEBENGINE actually because of the above // Webkit can't display bare images (will crash actually...), need to embed in HTML LOGDEB("Displaying image: " << m_dbdoc.mimetype << " from " << m_imgfilename << "\n"); QUrl baseUrl = QUrl::fromLocalFile(path2qs(path_getfather(m_imgfilename))); QString html = QString("" "").arg(path2qs(m_imgfilename)); #ifdef PREVIEW_WEBENGINE // It seems that if we ever get an image display error, it becomes impossible to display // another image (tried setHtml("") with no luck). So just use a new QWebPage every time setPage(new QWebEnginePage(this)); #endif // WEBENGINE setHtml(html, baseUrl); #endif //WEBKIT m_curdsp = PTE_DSPIMG; } void PreviewTextEdit::mouseDoubleClickEvent(QMouseEvent *event) { Q_UNUSED(event); LOGDEB2("PreviewTextEdit::mouseDoubleClickEvent\n"); #ifdef PREVIEW_TEXTBROWSER QTextEdit::mouseDoubleClickEvent(event); if (textCursor().hasSelection() && m_preview) m_preview->emitWordSelect(textCursor().selectedText()); #else // Let the parent select the word (probably) PREVIEW_PARENTCLASS::mouseDoubleClickEvent(event); // And send the selection to whom it may concern. This only works with Webkit. With Webengine we // never get called, probably because the event is handled by the page and the widget never sees // it. So the user needs to ^C/^V to copy the word to the search if (hasSelection()) m_preview->emitWordSelect(selectedText()); #endif } void PreviewTextEdit::print() { #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && !defined(PREVIEW_FORCETEXTBROWSER) // Qt6 has a print to pdf file instead which we could use #ifndef QT_NO_PRINTER LOGDEB("PreviewTextEdit::print\n"); if (!m_preview) return; QPrinter *printer = new QPrinter(); QPrintDialog *dialog = new QPrintDialog(printer, this); dialog->setWindowTitle(tr("Print Current Preview")); if (dialog->exec() != QDialog::Accepted) return; #if defined(PREVIEW_WEBENGINE) // Deleting the printer crashes (declaring it statically also does). so let it be page()->print(printer, [&printer](bool){/*delete printer;*/}); #elif defined(PREVIEW_WEBKIT) page()->mainFrame()->print(printer); #else QTextEdit::print(printer); #endif #endif // No printer #endif // Qt version < 6 } recoll-1.43.12/qtgui/preview_load.cpp0000644000175000017500000000546415121730573016776 0ustar dockesdockes/* Copyright (C) 2014 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "log.h" #include "preview_load.h" #include "internfile.h" #include "rcldoc.h" #include "pathut.h" #include "cancelcheck.h" #include "rclconfig.h" using std::string; LoadThread::LoadThread(RclConfig *config, const Rcl::Doc& idc, bool pvhtm, QObject *parent) : QThread(parent), status(1), m_idoc(idc), m_previewHtml(pvhtm), m_config(*config) { } void LoadThread::run() { FileInterner interner(m_idoc, &m_config, FileInterner::FIF_forPreview); FIMissingStore mst; interner.setMissingStore(&mst); // Even when previewHtml is set, we don't set the interner's // target mtype to html because we do want the html filter to // do its work: we won't use the text/plain, but we want the // text/html to be converted to utf-8 (for highlight processing) try { string ipath = m_idoc.ipath; FileInterner::Status ret = interner.internfile(fdoc, ipath); if (ret == FileInterner::FIDone || ret == FileInterner::FIAgain) { // FIAgain is actually not nice here. It means that the record // for the *file* of a multidoc was selected. Actually this // shouldn't have had a preview link at all, but we don't know // how to handle it now. Better to show the first doc than // a mysterious error. Happens when the file name matches a // a search term. status = 0; // If we prefer HTML and it is available, replace the // text/plain document text if (m_previewHtml && !interner.get_html().empty()) { fdoc.text = interner.get_html(); fdoc.mimetype = "text/html"; } tmpimg = interner.get_imgtmp(); } else { fdoc.mimetype = interner.getMimetype(); mst.getMissingExternal(missing); explain = FileInterner::tryGetReason(&m_config, m_idoc); status = -1; } } catch (CancelExcept) { LOGDEB("LoadThread: cancelled\n" ); status = -1; } } recoll-1.43.12/qtgui/snippets_w.cpp0000644000175000017500000002776515121730573016521 0ustar dockesdockes/* Copyright (C) 2012-2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #if defined(USING_WEBKIT) # include # include # include # define QWEBSETTINGS QWebSettings # define QWEBPAGE QWebPage #elif defined(USING_WEBENGINE) // Notes for WebEngine // - All links must begin with http:// for acceptNavigationRequest to be // called. // - The links passed to acceptNav.. have the host part // lowercased -> we change S0 to http://h/S0, not http://S0 # include # include # include # define QWEBSETTINGS QWebEngineSettings # define QWEBPAGE QWebEnginePage #else #include #endif #include #include "log.h" #include "recoll.h" #include "snippets_w.h" #include "guiutils.h" #include "rcldb.h" #include "rclhelp.h" #include "plaintorich.h" #include "scbase.h" #include "readfile.h" using namespace std; #if defined(USING_WEBKIT) #define browser ((QWebView*)browserw) #elif defined(USING_WEBENGINE) #define browser ((QWebEngineView*)browserw) #else #define browser ((QTextBrowser*)browserw) #endif class PlainToRichQtSnippets : public PlainToRich { public: virtual string startMatch(unsigned int) { return string(""); } virtual string endMatch() { return string(""); } }; static PlainToRichQtSnippets g_hiliter; void SnippetsW::init() { m_sortingByPage = prefs.snipwSortByPage; QPushButton *searchButton = new QPushButton(tr("Search")); searchButton->setAutoDefault(false); buttonBox->addButton(searchButton, QDialogButtonBox::ActionRole); searchFM->hide(); onNewShortcuts(); connect(&SCBase::scBase(), SIGNAL(shortcutsChanged()), this, SLOT(onNewShortcuts())); QPushButton *closeButton = buttonBox->button(QDialogButtonBox::Close); if (closeButton) connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); connect(searchButton, SIGNAL(clicked()), this, SLOT(slotEditFind())); connect(searchLE, SIGNAL(textChanged(const QString&)), this, SLOT(slotSearchTextChanged(const QString&))); connect(nextPB, SIGNAL(clicked()), this, SLOT(slotEditFindNext())); connect(prevPB, SIGNAL(clicked()), this, SLOT(slotEditFindPrevious())); // Get rid of the placeholder widget created from the .ui delete browserw; #if defined(USING_WEBKIT) browserw = new QWebView(this); verticalLayout->insertWidget(0, browserw); browser->setUrl(QUrl(QString::fromUtf8("about:blank"))); connect(browser, SIGNAL(linkClicked(const QUrl &)), this, SLOT(onLinkClicked(const QUrl &))); browser->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); browser->page()->currentFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); browserw->setContextMenuPolicy(Qt::CustomContextMenu); connect(browserw, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(createPopupMenu(const QPoint&))); #elif defined(USING_WEBENGINE) browserw = new QWebEngineView(this); verticalLayout->insertWidget(0, browserw); browser->setPage(new SnipWebPage(this)); // Stylesheet TBD browserw->setContextMenuPolicy(Qt::CustomContextMenu); connect(browserw, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(createPopupMenu(const QPoint&))); #else browserw = new QTextBrowser(this); verticalLayout->insertWidget(0, browserw); connect(browser, SIGNAL(anchorClicked(const QUrl &)), this, SLOT(onLinkClicked(const QUrl &))); browser->setReadOnly(true); browser->setUndoRedoEnabled(false); browser->setOpenLinks(false); browser->setTabChangesFocus(true); if (prefs.reslistfontfamily != "") { QFont nfont(prefs.reslistfontfamily, prefs.reslistfontsize); browser->setFont(nfont); } else { browser->setFont(QFont()); } #endif } void SnippetsW::onNewShortcuts() { SETSHORTCUT(this, "snippets:156", tr("Snippets Window"), tr("Find"), "Ctrl+F", m_find1sc, slotEditFind); SETSHORTCUT(this, "snippets:158", tr("Snippets Window"), tr("Find (alt)"), "/", m_find2sc, slotEditFind); SETSHORTCUT(this, "snippets:160", tr("Snippets Window"), tr("Find next"), "F3", m_findnextsc, slotEditFindNext); SETSHORTCUT(this, "snippets:162", tr("Snippets Window"), tr("Find previous"), "Shift+F3", m_findprevsc, slotEditFindPrevious); SETSHORTCUT(this, "snippets:164", tr("Snippets Window"), tr("Close window"), "Esc", m_hidesc, hide); auto sseq = QKeySequence(QKeySequence::ZoomIn).toString(); SETSHORTCUT(this, "snippets:166", tr("Snippets Window"), tr("Increase font size"), sseq, m_zisc, slotZoomIn); sseq = QKeySequence(QKeySequence::ZoomOut).toString(); SETSHORTCUT(this, "snippets:168", tr("Snippets Window"), tr("Decrease font size"), sseq, m_zosc, slotZoomOut); } void SnippetsW::listShortcuts() { LISTSHORTCUT(this, "snippets:156", tr("Snippets Window"), tr("Find"), "Ctrl+F", m_find1sc, slotEditFind); LISTSHORTCUT(this, "snippets:158", tr("Snippets Window"), tr("Find (alt)"), "/", m_find2sc, slotEditFind); LISTSHORTCUT(this, "snippets:160",tr("Snippets Window"), tr("Find next"), "F3", m_find2sc, slotEditFindNext); LISTSHORTCUT(this, "snippets:162",tr("Snippets Window"), tr("Find previous"), "Shift+F3", m_find2sc, slotEditFindPrevious); LISTSHORTCUT(this, "snippets:164", tr("Snippets Window"), tr("Close window"), "Esc", m_hidesc, hide); auto sseq = QKeySequence(QKeySequence::ZoomIn).toString(); LISTSHORTCUT(this, "snippets:166", tr("Snippets Window"), tr("Increase font size"), sseq, m_zisc, slotZoomIn); sseq = QKeySequence(QKeySequence::ZoomOut).toString(); LISTSHORTCUT(this, "snippets:168", tr("Snippets Window"), tr("Decrease font size"), sseq, m_zosc, slotZoomOut); } void SnippetsW::createPopupMenu(const QPoint& pos) { QMenu *popup = new QMenu(this); if (m_sortingByPage) { popup->addAction(tr("Sort By Relevance"), this, SLOT(reloadByRelevance())); } else { popup->addAction(tr("Sort By Page"), this, SLOT(reloadByPage())); } popup->popup(mapToGlobal(pos)); } void SnippetsW::reloadByRelevance() { m_sortingByPage = false; onSetDoc(m_doc, m_source); } void SnippetsW::reloadByPage() { m_sortingByPage = true; onSetDoc(m_doc, m_source); } void SnippetsW::onSetDoc(Rcl::Doc doc, std::shared_ptr source) { m_doc = doc; m_source = source; if (!source) return; // Make title out of file name if none yet string titleOrFilename; string utf8fn; m_doc.getmeta(Rcl::Doc::keytt, &titleOrFilename); m_doc.getmeta(Rcl::Doc::keyfn, &utf8fn); if (titleOrFilename.empty()) { titleOrFilename = utf8fn; } QString title("Recoll - Snippets"); if (!titleOrFilename.empty()) { title += QString(" : ") + QString::fromUtf8(titleOrFilename.c_str()); } setWindowTitle(title); vector vpabs; source->getAbstract(m_doc, &g_hiliter, vpabs, prefs.snipwMaxLength, m_sortingByPage); std::string snipcss = prefs.snipCSS(); ostringstream oss; oss << "\n" "\n"; oss << prefs.htmlHeaderContents() << snipcss; oss << "\n\n\n"; bool nomatch = true; for (const auto& snippet : vpabs) { if (snippet.page == -1) { oss << "" << "\n"; continue; } nomatch = false; oss << "" << "\n"; } oss << "
" << snippet.snippet << "
"; if (snippet.page > 0) { oss << "" << "P. " << snippet.page << ""; } else if (snippet.line > 0) { oss << "" << "L. " << snippet.line << ""; } oss << "" << snippet.snippet << "
" << "\n"; if (nomatch) { oss.str("\n"); oss << qs2utf8s(tr("

Sorry, no exact match was found within limits. " "Probably the document is very big and the snippets " "generator got lost in a maze...

")); } oss << "\n"; #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) browser->setHtml(u8s2qs(oss.str())); #else browser->clear(); browser->append("."); browser->clear(); browser->insertHtml(u8s2qs(oss.str())); browser->moveCursor (QTextCursor::Start); browser->ensureCursorVisible(); #endif raise(); } void SnippetsW::slotEditFind() { searchFM->show(); searchLE->selectAll(); searchLE->setFocus(); } void SnippetsW::slotEditFindNext() { if (!searchFM->isVisible()) slotEditFind(); #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) browser->findText(searchLE->text()); #else browser->find(searchLE->text()); #endif } void SnippetsW::slotEditFindPrevious() { if (!searchFM->isVisible()) slotEditFind(); #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) browser->findText(searchLE->text(), QWEBPAGE::FindBackward); #else browser->find(searchLE->text(), QTextDocument::FindBackward); #endif } void SnippetsW::onUiPrefsChanged() { if (m_sortingByPage) { reloadByPage(); } else { reloadByRelevance(); } } void SnippetsW::slotSearchTextChanged(const QString& txt) { #if defined(USING_WEBKIT) || defined(USING_WEBENGINE) browser->findText(txt); #else // Cursor thing is so that we don't go to the next occurrence with // each character, but rather try to extend the current match QTextCursor cursor = browser->textCursor(); cursor.setPosition(cursor.anchor(), QTextCursor::KeepAnchor); browser->setTextCursor(cursor); browser->find(txt); #endif } void SnippetsW::slotZoomIn() { emit zoomIn(); } void SnippetsW::slotZoomOut() { emit zoomOut(); } void SnippetsW::onLinkClicked(const QUrl &url) { string ascurl = qs2u8s(url.toString()).substr(9); LOGDEB("Snippets::onLinkClicked: [" << ascurl << "]\n"); if (ascurl.size() > 3) { int what = ascurl[0]; switch (what) { case 'P': case 'L': { string::size_type numpos = ascurl.find_first_of("0123456789"); if (numpos == string::npos) return; int page = -1, line = -1; if (what == 'P') { page = atoi(ascurl.c_str() + numpos); } else { line = atoi(ascurl.c_str() + numpos); } string::size_type termpos = ascurl.find_first_of("T"); string term; if (termpos != string::npos) term = ascurl.substr(termpos+1); emit startNativeViewer(m_doc, page, u8s2qs(term), line); return; } } } LOGERR("Snippets::onLinkClicked: bad link [" << ascurl << "]\n"); } recoll-1.43.12/qtgui/viewaction.ui0000644000175000017500000001410515121730573016311 0ustar dockesdockes ViewActionBase 0 0 640 480 Native Viewers Select one or several mime types then use the controls in the bottom frame to change how they are processed. false Use Desktop preferences by default Select one or several file types, then use the controls in the frame below to change how they are processed QFrame::StyledPanel QFrame::Sunken QAbstractItemView::NoEditTriggers QAbstractItemView::ExtendedSelection QAbstractItemView::SelectRows true true 2 true true 350 true true false Recoll action: 1 0 QFrame::Box QFrame::Raised current value Qt::PlainText Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Select same QFrame::Box QFrame::Plain <b>New Values:</b> Exception to Desktop preferences Action (empty -> recoll default) The value is a command line to be executed. Substitutions: %s: search string; %p: page number; <br>%f: document file name. F1 for more help. Apply to current selection Qt::Horizontal 40 20 Close recoll-1.43.12/qtgui/configswitch.cpp0000644000175000017500000000427415134660517017007 0ustar dockesdockes/* Copyright (C) 2020-2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include #include #include "log.h" #include "recoll.h" #include "configswitch.h" #include "rclutil.h" #include "pathut.h" #include "execmd.h" void ConfigSwitchW::init() { std::vector sdirs = guess_recoll_confdirs(); for (const auto& e : sdirs) { if (!path_samepath(e, theconfig->getConfDir())) m_qdirs.push_back(path2qs(e)); } m_qdirs.push_back(tr("Choose other")); for (const auto& e : qAsConst(m_qdirs)) { dirsCMB->addItem(e); } connect(this, SIGNAL(finished(int)), this, SLOT(done(int))); } void ConfigSwitchW::done(int result) { if (result != QDialog::Accepted) { hide(); return; } auto index = dirsCMB->currentIndex(); if (index < 0 || index >= int(m_qdirs.size())) return; QString qconf; if (index == m_qdirs.size() - 1) { qconf = myGetFileName(true,tr("Choose configuration directory"),true,path2qs(path_home())); if (qconf.isEmpty()) return; } else { qconf = m_qdirs[index]; } auto recoll = path_cat(path_thisexecdir(), "recoll"); std::vector args{"-c", qs2path(qconf)}; ExecCmd cmd(ExecCmd::EXF_SHOWWINDOW); if (cmd.startExec(recoll, args, false, false) == 0) { _exit(0); } } recoll-1.43.12/qtgui/advshist.h0000644000175000017500000000420115121730572015573 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _ADVSHIST_H_INCLUDED_ #define _ADVSHIST_H_INCLUDED_ #include "autoconfig.h" #include #include "recoll.h" #include #include "searchdata.h" /** Advanced search history. * * We store previous searches using the "dynconf" mechanism, as string * entries under the "advSearchHist" key. The strings are generated by * translating the SearchData structure to XML, which is done by * calling SearchData::asXML(). * When reading, we use a QXmlSimpleReader and QXmlDefaultHandler to * turn the XML back into a SearchData object, which is then passed to * the advanced search object fromSearch() method to rebuild the * window state. * * XML generation is performed by ../rcldb/searchdataxml.cpp. * See xmltosd.h for a schema description */ class AdvSearchHist { public: AdvSearchHist(); ~AdvSearchHist(); AdvSearchHist(const AdvSearchHist&) = delete; AdvSearchHist& operator=(const AdvSearchHist&) = delete; // Add entry bool push(std::shared_ptr); // Get latest. does not change state std::shared_ptr getnewest(); // Cursor std::shared_ptr getolder(); std::shared_ptr getnewer(); void clear(); private: bool read(); int m_current{-1}; std::vector > m_entries; }; #endif // _ADVSHIST_H_INCLUDED_ recoll-1.43.12/qtgui/uiprefs_w.h0000644000175000017500000000606315121730573015762 0ustar dockesdockes/* Copyright (C) 2006 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _UIPREFS_W_H_INCLUDED_ #define _UIPREFS_W_H_INCLUDED_ #include #include #include "ui_uiprefs.h" #include #include class QDialog; class ViewAction; class RclMain; class UIPrefsDialog : public QDialog, public Ui::uiPrefsDialogBase { Q_OBJECT public: UIPrefsDialog(RclMain* parent) : QDialog((QWidget*)parent), m_mainWindow(parent) { setupUi(this); init(); } ~UIPrefsDialog(){}; UIPrefsDialog(const UIPrefsDialog&) = delete; UIPrefsDialog& operator=(const UIPrefsDialog&) = delete; virtual void init(); void setFromPrefs(); public slots: virtual void showFontDialog(); virtual void resetReslistFont(); virtual void showStylesheetDialog(); virtual void resetStylesheet(); virtual void showSynFileDialog(); virtual void showSnipCssDialog(); virtual void resetSnipCss(); virtual void showViewAction(); virtual void showViewAction(const QString& mt); virtual void addExtraDbPB_clicked(); virtual void delExtraDbPB_clicked(); virtual void togExtraDbPB_clicked(); virtual void showTrayIconCB_clicked(); virtual void actAllExtraDbPB_clicked(); virtual void unacAllExtraDbPB_clicked(); virtual void setStemLang(const QString& lang); virtual void editParaFormat(); virtual void editHeaderText(); virtual void extradDbSelectChanged(); virtual void extraDbEditPtrans(); virtual void resetShortcuts(); signals: void uiprefsDone(); void showPTrans(const QString&); void delPTrans(); protected slots: virtual void accept(); virtual void reject(); private: void setupReslistFontPB(); void readShortcuts(); void storeShortcuts(); void readShortcutsInternal(const QStringList&); void setSSButState(); ViewAction *m_viewAction{nullptr}; RclMain *m_mainWindow; // Locally stored data (pending ok/cancel), for the parameters for // which our UI state is not enough. QString paraFormat; QString headerText; std::vector m_scids; QString reslistFontFamily; int reslistFontSize; QString qssFile; bool darkMode{false}; QString snipCssFile; QString synFile; }; #endif /* _UIPREFS_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/recoll.pro.in0000644000175000017500000003100215121730573016204 0ustar dockesdockes# # This only needs editing by the configure script on Unix platforms. It can be readily used on MacOS # and Windows (just rename the file to recoll.pro) # TEMPLATE = app LANGUAGE = C++ TARGET = recoll DEFINES += BUILDING_RECOLL DEFINES += BUILDING_RECOLLGUI QT += xml widgets printsupport network CONFIG += qt c++17 warn_on thread release lrelease HEADERS += \ actsearch_w.h \ advsearch_w.h \ advshist.h \ confgui/confgui.h \ confgui/confguiindex.h \ configswitch.h \ firstidx.h \ fragbuts.h \ idxmodel.h \ idxsched.h \ preview_load.h \ preview_plaintorich.h \ preview_w.h \ ptrans_w.h \ rclhelp.h \ rclmain_w.h \ rclwebpage.h \ reslist.h \ restable.h \ scbase.h \ searchclause_w.h \ snippets_w.h \ specialindex.h \ spell_w.h \ ssearch_w.h \ systray.h \ uiprefs_w.h \ viewaction_w.h \ webcache.h \ widgets/editdialog.h \ widgets/listdialog.h \ widgets/qxtconfirmationmessage.h SOURCES += \ actsearch_w.cpp \ advsearch_w.cpp \ advshist.cpp \ confgui/confgui.cpp \ confgui/confguiindex.cpp \ configswitch.cpp \ fragbuts.cpp \ guiutils.cpp \ idxmodel.cpp \ main.cpp \ multisave.cpp \ preview_load.cpp \ preview_plaintorich.cpp \ preview_w.cpp \ ptrans_w.cpp \ pv_search.cpp \ rclhelp.cpp \ rclm_idx.cpp \ rclm_menus.cpp \ rclm_preview.cpp \ rclm_saveload.cpp \ rclm_sidefilters.cpp \ rclm_view.cpp \ rclm_wins.cpp \ rclmain_w.cpp \ rclzg.cpp \ reslist.cpp \ respopup.cpp \ restable.cpp \ scbase.cpp \ searchclause_w.cpp \ snippets_w.cpp \ spell_w.cpp \ ssearch_w.cpp \ systray.cpp \ uiprefs_w.cpp \ viewaction_w.cpp \ webcache.cpp \ widgets/qxtconfirmationmessage.cpp \ xmltosd.cpp FORMS = \ actsearch.ui \ advsearch.ui \ configswitch.ui \ firstidx.ui \ idxsched.ui \ preview.ui \ ptrans.ui \ rclmain.ui \ restable.ui \ snippets.ui \ specialindex.ui \ spell.ui \ ssearchb.ui \ uiprefs.ui \ viewaction.ui \ webcache.ui \ widgets/editdialog.ui \ widgets/listdialog.ui RESOURCES = recoll.qrc TRANSLATIONS = \ i18n/recoll_ar.ts \ i18n/recoll_cs.ts \ i18n/recoll_da.ts \ i18n/recoll_de.ts \ i18n/recoll_el.ts \ i18n/recoll_es.ts \ i18n/recoll_fr.ts \ i18n/recoll_hu.ts \ i18n/recoll_it.ts \ i18n/recoll_ja.ts \ i18n/recoll_ko.ts \ i18n/recoll_lt.ts \ i18n/recoll_nl.ts \ i18n/recoll_pl.ts \ i18n/recoll_ru.ts \ i18n/recoll_sv.ts \ i18n/recoll_tr.ts \ i18n/recoll_uk.ts \ i18n/recoll_xx.ts \ i18n/recoll_zh_CN.ts \ i18n/recoll_zh.ts windows { # NOTE: Copy this file into recoll-win.pro before building include(singleapplication.pri) # QT += webkit webkitwidgets # DEFINES += USING_WEBKIT QT += widgets webenginewidgets DEFINES += USING_WEBENGINE DEFINES += PSAPI_VERSION=1 DEFINES += __WIN32__ DEFINES += UNICODE RC_FILE = recoll.rc QCBUILDLOC = Desktop_Qt_6_8_2_MSVC2022_64bit HEADERS += \ winschedtool.h SOURCES += \ winschedtool.cpp FORMS += \ winschedtool.ui INCLUDEPATH += ../common ../index ../internfile ../query ../unac \ ../utils ../aspell ../rcldb ../qtgui ../xaposix \ confgui widgets contains(QMAKE_CC, cl){ # MSVC. RECOLLDEPS = $$PWD/../../../recolldeps/msvc DEFINES += USING_STATIC_LIBICONV SOURCES += ../windows/getopt.cc PRE_TARGETDEPS = \ $$PWD/../qmake/build/librecoll/$$QCBUILDLOC-Release/release/recoll.lib LIBS += \ $$PWD/../qmake/build/librecoll/$$QCBUILDLOC-Release/release/recoll.lib \ $$RECOLLDEPS/libxml2/libxml2-2.9.4+dfsg1/win32/bin.msvc/libxml2.lib \ $$RECOLLDEPS/libxslt/libxslt-1.1.29/win32/bin.msvc/libxslt.lib \ $$PWD/../qmake/build/libxapian/$$QCBUILDLOC-Release/release/libxapian.lib \ $$RECOLLDEPS/wlibiconv/build/$$QCBUILDLOC-Release/release/iconv.lib \ $$RECOLLDEPS/libmagic/src/lib/libmagic.lib \ $$RECOLLDEPS/regex/libregex.lib \ $$RECOLLDEPS/zlib-1.2.11/zdll.lib \ -lrpcrt4 -lws2_32 -luser32 -lshell32 -lshlwapi -lpsapi -lkernel32 } } @MESONRAN@ = "MESONRAN" defineTest(macxbundlebuild) { # If the MESONRAN variable exists, meson did run, not a bundle build equals($$MESONRAN, "MESONRAN") { return(false) } else { return(true) } } macx:macxbundlebuild() { QCBUILDLOC=Qt_6_7_3_for_macOS RECOLLDEPS = $$PWD/../../.. QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64 QMAKE_CXXFLAGS += -pthread -Wno-unused-parameter DEFINES += RECOLL_AS_MAC_BUNDLE QT += widgets webenginewidgets DEFINES += USING_WEBENGINE HEADERS += \ crontool.h \ rtitool.h SOURCES += \ ../utils/closefrom.cpp \ ../utils/execmd.cpp \ ../utils/netcon.cpp \ ../utils/rclionice.cpp \ crontool.cpp \ rtitool.cpp FORMS += \ crontool.ui \ rtitool.ui INCLUDEPATH += ../common ../index ../internfile ../query ../unac \ ../utils ../aspell ../rcldb ../qtgui ../xaposix \ confgui widgets PRE_TARGETDEPS = $$PWD/../qmake/build/librecoll/$$QCBUILDLOC-Release/librecoll.a LIBS += \ $$PWD/../qmake/build/librecoll/$$QCBUILDLOC-Release/librecoll.a \ $$PWD/../qmake/build/libxapian/$$QCBUILDLOC-Release/liblibxapian.a \ $$RECOLLDEPS/libmagic/src/.libs/libmagic.a \ -lxslt -lxml2 -liconv -lz ICON = images/recoll.icns APP_DOC.files = \ ../doc/user/usermanual.html \ ../doc/user/docbook-xsl.css APP_DOC.path = Contents/Resources/doc APP_EXAMPLES.files = \ ../sampleconf/fragment-buttons.xml \ ../sampleconf/fields \ ../sampleconf/recoll.conf \ ../sampleconf/mimeconf \ ../sampleconf/mimeview \ ../sampleconf/mimemap \ ../sampleconf/recoll.qss \ ../sampleconf/recoll-dark.qss \ ../sampleconf/recoll-dark.css APP_EXAMPLES.path = Contents/Resources/examples APP_EXAMPLES_MAC.files = \ ../sampleconf/macos/mimeview APP_EXAMPLES_MAC.path = Contents/Resources/examples/macos APP_FILTERS.files = \ ../filters/abiword.xsl \ ../filters/archivextract.py \ ../filters/cmdtalk.py \ ../filters/cnsplitter.py \ ../python/recoll/recoll/conftree.py \ ../filters/fb2.xsl \ ../filters/gnumeric.xsl \ ../filters/kosplitter.py \ ../filters/msodump.zip \ ../filters/okular-note.xsl \ ../filters/opendoc-body.xsl \ ../filters/opendoc-flat.xsl \ ../filters/opendoc-meta.xsl \ ../filters/openxml-meta.xsl \ ../filters/openxml-ppt-body.xsl \ ../filters/openxml-visio-body.xsl \ ../filters/openxml-word-body.xsl \ ../filters/openxml-xls-body.xsl \ ../filters/ppt-dump.py \ ../filters/rcl7z.py \ ../filters/rclaptosidman \ ../filters/rclaspell-sugg.py \ ../filters/rclaudio.py \ ../filters/rclbasehandler.py \ ../filters/rclbibtex.sh \ ../filters/rclcheckneedretry.sh \ ../filters/rclchm.py \ ../python/recoll/recoll/rclconfig.py \ ../filters/rcldia.py \ ../filters/rcldjvu.py \ ../filters/rcldoc.py \ ../filters/rcldvi \ ../filters/rclepub.py \ ../filters/rclepub1.py \ ../filters/rclexec1.py \ ../filters/rclexecm.py \ ../filters/rclfb2.py \ ../filters/rclgaim \ ../filters/rclgenxslt.py \ ../filters/rclhwp.py \ ../filters/rclics.py \ ../filters/rclimg \ ../filters/rclimg.py \ ../filters/rclinfo.py \ ../filters/rclipynb.py \ ../filters/rcljoplin.py \ ../filters/rclkar.py \ ../filters/rclkwd \ ../filters/rcllatinclass.py \ ../filters/rcllatinstops.zip \ ../filters/rcllink.py \ ../filters/rcllyx \ ../filters/rclman \ ../filters/rclmd.py \ ../filters/rclmidi.py \ ../filters/rclnamefilter.py \ ../filters/rclnull.py \ ../filters/rclocr.py \ ../filters/rclocrabbyy.py \ ../filters/rclocrcache.py \ ../filters/rclocrtesseract.py \ ../filters/rclopxml.py \ ../filters/rclorgmode.py \ ../filters/rclpdf.py \ ../filters/rclpages.py \ ../filters/rclppt.py \ ../filters/rclps \ ../filters/rclpst.py \ ../filters/rclpurple \ ../filters/rclpython.py \ ../filters/rclrar.py \ ../filters/rclrtf.py \ ../filters/rclrunsoffice.py \ ../filters/rclscribus \ ../filters/rclsfz.py \ ../filters/rclshowinfo \ ../filters/rcltar.py \ ../filters/rcltex \ ../filters/rcltext.py \ ../filters/rcltxtlines.py \ ../filters/rcluncomp \ ../filters/rcluncomp.py \ ../filters/rclwar.py \ ../filters/rclwebarch.py \ ../filters/rclxls.py \ ../filters/rclxml.py \ ../filters/rclxmp.py \ ../filters/rclxslt.py \ ../filters/rclzip.py \ ../filters/recoll-we-move-files.py \ ../filters/recollepub.zip \ ../filters/svg.xsl \ ../filters/thunderbird-open-message.sh \ ../filters/xls-dump.py \ ../filters/xlsxmltocsv.py \ ../filters/xml.xsl APP_FILTERS.path = Contents/Resources/filters APP_IMAGES.files = \ images/asearch.png \ images/cancel.png \ images/close.png \ images/clock.png \ images/menu.png \ images/code-block.png \ images/down.png \ images/firstpage.png \ images/history.png \ images/interro.png \ images/nextpage.png \ images/prevpage.png \ images/recoll.icns \ images/recoll.png \ images/sortparms.png \ images/spell.png \ images/table.png \ images/up.png \ mtpics/License_sidux.txt \ mtpics/README \ mtpics/aptosid-book.png \ mtpics/aptosid-manual-copyright.txt \ mtpics/aptosid-manual.png \ mtpics/archive.png \ mtpics/book.png \ mtpics/bookchap.png \ mtpics/document.png \ mtpics/drawing.png \ mtpics/emblem-symbolic-link.png \ mtpics/folder.png \ mtpics/html.png \ mtpics/image.png \ mtpics/message.png \ mtpics/mozilla_doc.png \ mtpics/pdf.png \ mtpics/pidgin.png \ mtpics/postscript.png \ mtpics/presentation.png \ mtpics/sidux-book.png \ mtpics/soffice.png \ mtpics/source.png \ mtpics/sownd.png \ mtpics/spreadsheet.png \ mtpics/text-x-python.png \ mtpics/txt.png \ mtpics/video.png \ mtpics/wordprocessing.png APP_IMAGES.path = Contents/Resources/images QMAKE_BUNDLE_DATA = APP_EXAMPLES APP_EXAMPLES_MAC APP_FILTERS APP_IMAGES APP_DOC } unix:!macxbundlebuild() { VPATH = @srcdir@ # For SingleApplication @QMAKE_ENABLE_SINGLEAPP@include(@srcdir@/singleapplication.pri) @QMAKE_ENABLE_WEBKIT@QT += webkitwidgets @QMAKE_ENABLE_WEBKIT@DEFINES += USING_WEBKIT @QMAKE_ENABLE_WEBENGINE@DEFINES += USING_WEBENGINE @QMAKE_ENABLE_WEBENGINE@QT += webenginewidgets @QMAKE_ENABLE_ZEITGEIST@QT += dbus @QMAKE_ENABLE_ZEITGEIST@QMAKE_CXXFLAGS += -DUSE_ZEITGEIST @QMAKE_ENABLE_GUIDEBUG@CONFIG += debug force_debug_info HEADERS += crontool.h \ rtitool.h SOURCES += crontool.cpp \ rtitool.cpp FORMS += crontool.ui \ rtitool.ui UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj LIBS += @LIBRECOLL_FOR_QMAKE@ # You will need LD_PRELOAD=/path/to/libasan.xx because -lasan need to be # first in libs, so can't use LIBS += # QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer LIBS += @XAPIAN_LIBS@ \ @LIBICONV@ $(BDYNAMIC) @LIBQZEITGEIST@ @XSLT_LIBS@ -lz INCLUDEPATH += ../ ../common @srcdir@/../common @srcdir@/../index \ @srcdir@/../internfile @srcdir@/../query @srcdir@/../unac \ @srcdir@/../utils @srcdir@/../aspell @srcdir@/../rcldb \ @srcdir@/../qtgui @srcdir@/../xaposix @srcdir@/confgui \ @srcdir@/widgets DEPENDPATH += $$INCLUDEPATH isEmpty(PREFIX) { PREFIX = /usr/local } message("Prefix is $$PREFIX") DEFINES += PREFIX=\\\"$$PREFIX\\\" # Installation stuff target.path = "$$PREFIX/bin" imdata.files = @srcdir@/mtpics/*.png imdata.path = $$PREFIX/share/recoll/images trdata.files = .qm/*.qm trdata.path = $$PREFIX/share/recoll/translations desktop.files += @srcdir@/../desktop/recoll-searchgui.desktop desktop.path = $$PREFIX/share/applications/ icona.files += @srcdir@/../desktop/recoll.png icona.path = $$PREFIX/share/icons/hicolor/48x48/apps/ iconb.files += @srcdir@/../desktop/recoll.png iconb.path = $$PREFIX/share/pixmaps/ appdata.files = @srcdir@/../desktop/org.recoll.recoll.appdata.xml appdata.path = $$PREFIX/share/metainfo/ INSTALLS += target imdata trdata desktop icona iconb appdata UNAME = $$system(uname -s) contains( UNAME, [lL]inux ) { LIBS += -ldl -lX11 } contains( UNAME, SunOS ) { LIBS += -ldl } } recoll-1.43.12/qtgui/preview_load.h0000644000175000017500000000330515121730573016433 0ustar dockesdockes/* Copyright (C) 2015 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _PVW_LOAD_H_INCLUDED_ #define _PVW_LOAD_H_INCLUDED_ #include #include #include "rcldoc.h" #include "pathut.h" #include "rclutil.h" #include "rclconfig.h" #include "internfile.h" /* * A thread to perform the file reading / format conversion work for preview */ class LoadThread : public QThread { Q_OBJECT public: LoadThread(RclConfig *conf, const Rcl::Doc& idoc, bool pvhtml, QObject *parent = 0); virtual ~LoadThread() {} LoadThread(const LoadThread&) = delete; LoadThread& operator=(const LoadThread&) = delete; virtual void run(); public: // The results are returned through public members. int status; Rcl::Doc fdoc; TempFile tmpimg; std::string missing; FileInterner::ErrorPossibleCause explain{FileInterner::InternfileOther}; private: Rcl::Doc m_idoc; bool m_previewHtml; RclConfig m_config; }; #endif /* _PVW_LOAD_H_INCLUDED_ */ recoll-1.43.12/qtgui/rclm_wins.cpp0000644000175000017500000003753615134657432016326 0ustar dockesdockes/* Copyright (C) 2005-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include "log.h" #include "internfile.h" #include "listdialog.h" #include "confgui/confguiindex.h" #include "idxsched.h" #ifdef _WIN32 #include "winschedtool.h" #else #include "crontool.h" #include "rtitool.h" #endif #include "snippets_w.h" #include "fragbuts.h" #include "specialindex.h" #include "rclmain_w.h" #include "webcache.h" #include "restable.h" #include "actsearch_w.h" #include "docseqdocs.h" #include "uiprefs_w.h" #include "configswitch.h" #include "ptrans_w.h" using namespace std; static const QKeySequence quitKeySeq("Ctrl+q"); static const QKeySequence closeKeySeq("Ctrl+w"); // Open advanced search dialog. void RclMain::showAdvSearchDialog() { if (asearchform == 0) { asearchform = new AdvSearch(0); if (asearchform == 0) { return; } connect(new QShortcut(quitKeySeq, asearchform), SIGNAL (activated()), this, SLOT (fileExit())); connect(new QShortcut(closeKeySeq, asearchform), SIGNAL (activated()), asearchform, SLOT(close())); connect(asearchform, SIGNAL(startSearch(std::shared_ptr, bool)), this, SLOT(startSearch(std::shared_ptr, bool))); connect(asearchform, SIGNAL(setDescription(QString)), this, SLOT(onSetDescription(QString))); asearchform->show(); } else { // Close and reopen, in hope that makes us visible... asearchform->close(); asearchform->show(); } } void RclMain::showSpellDialog() { if (spellform == 0) { spellform = new SpellW(0); connect(new QShortcut(quitKeySeq, spellform), SIGNAL (activated()), this, SLOT (fileExit())); connect(spellform, SIGNAL(wordSelect(QString)), sSearch, SLOT(addTerm(QString))); spellform->show(); } else { // Close and reopen, in hope that makes us visible... spellform->close(); spellform->show(); } } void RclMain::showWebcacheDialog() { switch (indexerState()) { case RclMain::IXST_UNKNOWN: QMessageBox::warning(0, "Recoll", tr("Unknown indexer state. " "Can't access webcache file.")); return; case RclMain::IXST_RUNNINGMINE: case RclMain::IXST_RUNNINGNOTMINE: QMessageBox::warning(0, "Recoll", tr("Indexer is running. " "Can't access webcache file.")); return; case RclMain::IXST_NOTRUNNING: break; } if (!m_pidfile) { m_pidfile = new Pidfile(theconfig->getPidfile()); if (m_pidfile->open() != 0) { deleteZ(m_pidfile); return; } if (m_pidfile->write_pid() != 0) { deleteZ(m_pidfile); return; } } if (webcache == 0) { webcache = new WebcacheEdit(this); webcache->setAttribute(Qt::WA_DeleteOnClose); connect(new QShortcut(quitKeySeq, webcache), SIGNAL (activated()), this, SLOT (fileExit())); connect(webcache, SIGNAL(destroyed(QObject*)), this, SLOT(onWebcacheDestroyed(QObject*)) ); webcache->show(); } } void RclMain::onWebcacheDestroyed(QObject *) { deleteZ(m_pidfile); webcache = 0; } void RclMain::showIndexStatistics() { showSpellDialog(); if (spellform == 0) return; spellform->setMode(SpellW::TYPECMB_STATS); } void RclMain::showFragButs() { if (fragbuts && fragbuts->isStale(0)) { deleteZ(fragbuts); } if (fragbuts == 0) { fragbuts = new FragButs(0); if (fragbuts->ok()) { fragbuts->show(); connect(new QShortcut(quitKeySeq, fragbuts), SIGNAL (activated()), this, SLOT (fileExit())); connect(new QShortcut(closeKeySeq, fragbuts), SIGNAL (activated()), fragbuts, SLOT(close())); connect(fragbuts, SIGNAL(fragmentsChanged()), this, SLOT(onFragmentsChanged())); } else { deleteZ(fragbuts); } } else { // Close and reopen, in hope that makes us visible... fragbuts->close(); fragbuts->show(); } } void RclMain::showSpecIdx() { if (specidx == 0) { specidx = new SpecIdxW(0); connect(specidx, SIGNAL(accepted()), this, SLOT(specialIndex())); specidx->show(); } else { // Close and reopen, in hope that makes us visible... specidx->close(); specidx->show(); } } void RclMain::showPTrans(const QString& qdbdir) { // Delete / recreate in case external indexes changed deleteZ(pathTrans); pathTrans = new PTransEdit(qs2path(qdbdir), nullptr); pathTrans->setCurrentDb(qs2path(qdbdir)); pathTrans->hide(); pathTrans->show(); } void RclMain::delPTrans() { deleteZ(pathTrans); } void RclMain::showIndexConfig() { showIndexConfig(false); } void RclMain::execIndexConfig() { showIndexConfig(true); } void RclMain::showIndexConfig(bool modal) { LOGDEB("showIndexConfig()\n" ); bool created{false}; if (indexConfig == 0) { created = true; indexConfig = new ConfIndexW(0, theconfig); } indexConfig->showPrefs(modal); if (created) { connect(new QShortcut(quitKeySeq, indexConfig->getDialog()), SIGNAL (activated()), this, SLOT (fileExit())); } } void RclMain::showIndexSched() { showIndexSched(false); } void RclMain::execIndexSched() { showIndexSched(true); } void RclMain::showIndexSched(bool modal) { LOGDEB("showIndexSched()\n" ); if (indexSched == 0) { indexSched = new IdxSchedW(this); connect(new QShortcut(quitKeySeq, indexSched), SIGNAL (activated()), this, SLOT(fileExit())); #ifdef _WIN32 indexSched->cronCLB->setText(tr("Batch scheduling")); indexSched->cronCLB->setDescription( tr("The tool will let you decide at what time indexing should run. " " It uses the Windows task scheduler.")); indexSched->mainExplainLBL->hide(); indexSched->rtidxCLB->hide(); #endif connect(indexSched->cronCLB, SIGNAL(clicked()), this, SLOT(execCronTool())); #ifdef RCL_MONITOR connect(indexSched->rtidxCLB, SIGNAL(clicked()), this, SLOT(execRTITool())); #else indexSched->rtidxCLB->setEnabled(false); indexSched->rtidxCLB->setToolTip( tr("Disabled because the real time indexer was not compiled in.")); #endif } else { // Close and reopen, in hope that makes us visible... indexSched->close(); } if (modal) { indexSched->exec(); indexSched->setModal(false); } else { indexSched->show(); } } void RclMain::showCronTool() { showCronTool(false); } void RclMain::execCronTool() { showCronTool(true); } void RclMain::showCronTool(bool modal) { LOGDEB("showCronTool()\n" ); if (cronTool == 0) { #ifdef _WIN32 cronTool = new WinSchedToolW(0); #else cronTool = new CronToolW(0); #endif connect(new QShortcut(quitKeySeq, cronTool), SIGNAL (activated()), this, SLOT (fileExit())); } else { // Close and reopen, in hope that makes us visible... cronTool->close(); } if (modal) { cronTool->exec(); cronTool->setModal(false); } else { cronTool->show(); } } void RclMain::showRTITool() { showRTITool(false); } void RclMain::execRTITool() { showRTITool(true); } void RclMain::showRTITool(bool modal) { #ifndef _WIN32 LOGDEB("showRTITool()\n" ); if (rtiTool == 0) { rtiTool = new RTIToolW(0); connect(new QShortcut(quitKeySeq, rtiTool), SIGNAL (activated()), this, SLOT (fileExit())); } else { // Close and reopen, in hope that makes us visible... rtiTool->close(); } if (modal) { rtiTool->exec(); rtiTool->setModal(false); } else { rtiTool->show(); } #else PRETEND_USE(modal); #endif } void RclMain::showUIPrefs() { prefs.useTmpActiveExtraDbs = false; prefs.tmpActiveExtraDbs.clear(); if (uiprefs == 0) { uiprefs = new UIPrefsDialog(this); connect(uiprefs, SIGNAL(showPTrans(const QString&)), this, SLOT(showPTrans(const QString&))); connect(uiprefs, SIGNAL(delPTrans()), this, SLOT(delPTrans())); connect(new QShortcut(quitKeySeq, uiprefs), SIGNAL (activated()), this, SLOT (fileExit())); connect(uiprefs, SIGNAL(uiprefsDone()), this, SLOT(setUIPrefs())); connect(this, SIGNAL(stemLangChanged(const QString&)), uiprefs, SLOT(setStemLang(const QString&))); } else { // Close and reopen, in hope that makes us visible... uiprefs->close(); rwSettings(false); uiprefs->setFromPrefs(); } uiprefs->show(); } void RclMain::showExtIdxDialog() { showUIPrefs(); auto w = uiprefs->tabWidget->findChild("tab_extradbs"); uiprefs->tabWidget->setCurrentWidget(w); } void RclMain::showAboutDialog() { QString vstring = QString("") + u8s2qs(prefs.htmlHeaderContents()) + "" + u8s2qs(Rcl::version_string()) + "
www.recoll.org" + "
www.xapian.org"; QMessageBox::information(this, tr("About Recoll"), vstring); } void RclMain::showMissingHelpers() { string miss; if (!theconfig->getMissingHelperDesc(miss)) { QMessageBox::information( this, "", tr("No information: initial indexing not yet performed.")); return; } QString msg = QString::fromUtf8("

") + tr("External applications/commands needed for your file types " "and not found, as stored by the last indexing pass in "); msg += ""; msg += path2qs(theconfig->getConfDir()); msg += "/missing:

\n";
    if (!miss.empty()) {
        msg += QString::fromUtf8(miss.c_str());
    } else {
        msg += tr("No helpers found missing");
    }
    msg += "
"; QMessageBox::information(this, tr("Missing helper programs"), msg); } void RclMain::showActiveTypes() { string reason; bool maindberror; if (!maybeOpenDb(reason, true, &maindberror)) { QMessageBox::warning(0, tr("Error"), u8s2qs(reason), QMessageBox::Ok, QMessageBox::NoButton); return; } // All mime types in index. vector vdbtypes; if (!rcldb->getAllDbMimeTypes(vdbtypes)) { QMessageBox::warning(0, tr("Error"), tr("Index query error"), QMessageBox::Ok, QMessageBox::NoButton); return; } set mtypesfromdb; mtypesfromdb.insert(vdbtypes.begin(), vdbtypes.end()); // All types listed in mimeconf: vector mtypesfromconfig = theconfig->getAllMimeTypes(); // Intersect file system types with config types (those not in the // config can be indexed by name, not by content) set mtypesfromdbconf; for (vector::const_iterator it = mtypesfromconfig.begin(); it != mtypesfromconfig.end(); it++) { if (mtypesfromdb.find(*it) != mtypesfromdb.end()) mtypesfromdbconf.insert(*it); } // Substract the types for missing helpers (the docs are indexed // by name only): string miss; if (theconfig->getMissingHelperDesc(miss) && !miss.empty()) { FIMissingStore st(miss); map >::const_iterator it; for (it = st.m_typesForMissing.begin(); it != st.m_typesForMissing.end(); it++) { set::const_iterator it1; for (it1 = it->second.begin(); it1 != it->second.end(); it1++) { set::iterator it2 = mtypesfromdbconf.find(*it1); if (it2 != mtypesfromdbconf.end()) mtypesfromdbconf.erase(it2); } } } ListDialog dialog; dialog.setWindowTitle(tr("Indexed MIME Types")); // Turn the result into a string and display dialog.groupBox->setTitle(tr("Content has been indexed for these MIME types:")); // We replace the list with an editor so that the user can copy/paste deleteZ(dialog.listWidget); QTextEdit *editor = new QTextEdit(dialog.groupBox); editor->setReadOnly(true); dialog.horizontalLayout->addWidget(editor); if (mtypesfromdbconf.empty()) { editor->append(tr("Types list empty: maybe wait for indexing to " "progress?")); } else { for (set::const_iterator it = mtypesfromdbconf.begin(); it != mtypesfromdbconf.end(); it++) { editor->append(QString::fromUtf8(it->c_str())); } } editor->moveCursor(QTextCursor::Start); editor->ensureCursorVisible(); dialog.exec(); } void RclMain::newDupsW(const Rcl::Doc, const vector dups) { if (nullptr == m_dupsw) { m_dupsw = new ResTable(nullptr, {"ipath", "url"}); m_dupsw->setRclMain(this, false); } auto src = std::make_shared(rcldb, dups, qs2utf8s(tr("Duplicates"))); src->setDescription(qs2utf8s(tr("Duplicates"))); auto source = std::make_shared(theconfig, src); m_dupsw->setDocSource(source); m_dupsw->readDocSource(); m_dupsw->show(); } void RclMain::showSnippets(Rcl::Doc doc) { if (!m_source) return; if (!m_snippets) { m_snippets = new SnippetsW(doc, m_source); connect(m_snippets, SIGNAL(startNativeViewer(Rcl::Doc, int, QString, int)), this, SLOT(startNativeViewer(Rcl::Doc, int, QString, int))); connect(m_snippets, SIGNAL(zoomIn()), this, SLOT(zoomIn())); connect(m_snippets, SIGNAL(zoomOut()), this, SLOT(zoomOut())); connect(this, SIGNAL(uiPrefsChanged()), m_snippets, SLOT(onUiPrefsChanged())); connect(new QShortcut(quitKeySeq, m_snippets), SIGNAL (activated()), this, SLOT (fileExit())); connect(new QShortcut(closeKeySeq, m_snippets), SIGNAL (activated()), m_snippets, SLOT (close())); if (restable) { connect( restable, SIGNAL(detailDocChanged(Rcl::Doc, std::shared_ptr)), m_snippets, SLOT(onSetDoc(Rcl::Doc, std::shared_ptr))); } } else { m_snippets->onSetDoc(doc, m_source); } m_snippets->show(); } void RclMain::showActionsSearch() { if (nullptr == actsearchw) { actsearchw = new ActSearchW(this); actsearchw->setActList(findChildren()); connect(actsearchw->actCMB, SIGNAL(editTextChanged(const QString&)), actsearchw, SLOT(onTextChanged(const QString&))); } actsearchw->actCMB->setCurrentIndex(-1); actsearchw->actCMB->clearEditText(); actsearchw->show(); } void RclMain::showConfigSwitch() { if (nullptr == configswitchw) { configswitchw = new ConfigSwitchW(this); } configswitchw->open(); } recoll-1.43.12/qtgui/webcache.h0000644000175000017500000000465015121730573015520 0ustar dockesdockes/* Copyright (C) 2016-2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _WEBCACHE_H_INCLUDED_ #define _WEBCACHE_H_INCLUDED_ #include "autoconfig.h" #include #include #include #include "ui_webcache.h" #include class WebcacheModelInternal; class QCloseEvent; class WebStore; class WebcacheModel : public QAbstractTableModel { Q_OBJECT public: WebcacheModel(QObject *parent = 0); ~WebcacheModel(); WebcacheModel(const WebcacheModel&) = delete; WebcacheModel& operator=(const WebcacheModel&) = delete; // Reimplemented methods virtual int rowCount (const QModelIndex& = QModelIndex()) const; virtual int columnCount(const QModelIndex& = QModelIndex()) const; virtual QVariant headerData (int col, Qt::Orientation orientation, int role = Qt::DisplayRole) const; virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole ) const; bool deleteIdx(unsigned int idx); std::string getURL(unsigned int idx); std::string getData(unsigned int idx); public slots: void setSearchFilter(const QString&); void reload(); signals: void headerChanged(WebStore *); private: WebcacheModelInternal *m; }; class RclMain; class WebcacheEdit : public QDialog, public Ui::Webcache { Q_OBJECT public: WebcacheEdit(RclMain *parent); public slots: void saveColState(); void createPopupMenu(const QPoint&); void deleteSelected(); void copyURL(); void saveToFile(); void onHeaderChanged(WebStore *); protected: void closeEvent(QCloseEvent *); private: WebcacheModel *m_model; RclMain *m_recoll; bool m_modified; }; #endif /* _WEBCACHE_H_INCLUDED_ */ recoll-1.43.12/qtgui/idxmodel.cpp0000644000175000017500000001405615121730573016120 0ustar dockesdockes/* Copyright (C) 2022 J.F.Dockes * * License: GPL 2.1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "idxmodel.h" #include "log.h" #include "smallut.h" #include "fstreewalk.h" #include "recoll.h" // Note: we originally used a file system tree walk to populate the tree. This was wrong // because the file system may have changed since the index was created. // We now build a directory tree directly from the index data, but still use the previous tree walk // callback. In case you need an explanation of how we got here, look at the git history. class WalkerCB : public FsTreeWalkerCB { public: WalkerCB(const std::string& topstring, IdxTreeModel *model, const QModelIndex& index) : m_topstring(topstring), m_model(model) { LOGDEB1("WalkerCB: topstring [" << topstring << "]\n"); m_indexes.push(index); m_rows.push(0); } virtual FsTreeWalker::Status processone(const std::string& path, FsTreeWalker::CbFlag flg, const struct PathStat& = PathStat()) override; std::string m_topstring; IdxTreeModel *m_model; std::stack m_indexes; std::stack m_rows; }; FsTreeWalker::Status WalkerCB::processone( const std::string& path, FsTreeWalker::CbFlag flg, const struct PathStat&) { if (flg == FsTreeWalker::FtwDirReturn) { m_indexes.pop(); m_rows.pop(); return FsTreeWalker::FtwOk; } if (flg == FsTreeWalker::FtwDirEnter) { //std::cerr << "ENTER: " << path << "\n"; if (m_model->columnCount(m_indexes.top()) == 0) { if (!m_model->insertColumn(0, m_indexes.top())) return FsTreeWalker::FtwError; } if (!m_model->insertRow(m_rows.top(), m_indexes.top())) return FsTreeWalker::FtwError; const QModelIndex child = m_model->index(m_rows.top(), 0, m_indexes.top()); // Setting the short path in DisplayRole and the real one in EditRole does not seem to work, // the treeview shows the EditRole?? So use the ToolTip to store the full value std::string disp; if (m_topstring.empty()) { disp = path_getsimple(path); } else { disp = m_topstring; m_topstring.clear(); } m_model->setData(child, QVariant(path2qs(disp)), Qt::DisplayRole); m_model->setData(child, QVariant(path2qs(path)), Qt::ToolTipRole); ++m_rows.top(); m_indexes.push(child); m_rows.push(0); } return FsTreeWalker::FtwOk; } // Assemble a path from its components up to lst std::string toksToPath(std::vector& path, int lst) { if (path.empty()) { // ?? #ifdef _WIN32 return "C:/"; #else return "/"; #endif } std::string out{ #ifdef _WIN32 path[0] #else "/" + path[0] #endif }; for (int i = 1; i <= lst; i++) { out += "/" + path[i]; } return out; } // Process a sorted list of directory paths, generating a sequence of enter/exit calls equivalent to // what would happen for a recursive tree walk of the original tree. static void treelist(const std::string& top, const std::vector& lst, WalkerCB &cb) { if (lst.empty()) { return; } std::vector curpath; stringToTokens(top, curpath, "/"); LOGDEB0("treelist: " << "top [" << top << "] TOP depth is " << curpath.size() << "\n"); for (const auto& dir : lst) { LOGDEB1("DIR: " << dir << "\n"); std::vector npath; // Compute the new directory stack stringToTokens(dir, npath, "/"); // Walk the stacks until we find a differing entry, and then unwind the old stack to the new // base, and issue enter calls for new entries over the base. int i = 0; for (; i < int(std::min(curpath.size(), npath.size())); i++) { if (npath[i] != curpath[i] && int(curpath.size()) > 0) { // Differing at i, unwind old stack and break the main loop for (int j = int(curpath.size()) - 1; j >= i; j--) { LOGDEB1("treelist: exiting " << toksToPath(curpath, j) << "\n"); cb.processone(toksToPath(curpath, j), FsTreeWalker::FtwDirReturn); } break; } } // Callbacks for new entries above the base. for (int j = i; j < int(npath.size()); j++) { LOGDEB1("treelist: entering " << toksToPath(npath, j) << "\n"); cb.processone(toksToPath(npath, j), FsTreeWalker::FtwDirEnter); } curpath.swap(npath); } } void IdxTreeModel::populate() { LOGDEB0("IdxTreeModel::populate\n"); if (m_depth == 0) return; std::vector thedirs; std::string prefix; rcldb->dirlist(m_depth, prefix, thedirs); LOGDEB1("IdxTreeModel::populate: prefix [" << prefix << "] thedirs: " << stringsToString(thedirs) << "\n"); QModelIndex index = this->index(0,0); if (this->columnCount(index) == 0) { if (!this->insertColumn(0, index)) return; } const QModelIndex child = this->index(0, 0, index); WalkerCB cb(path_isroot(prefix) ? std::string() : prefix, this, child); if (!prefix.empty()) prefix = path_getfather(prefix); treelist(prefix, thedirs, cb); } recoll-1.43.12/qtgui/rclmain_w.cpp0000644000175000017500000014104315125756472016275 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "recoll.h" #include "log.h" #include "mimehandler.h" #include "pathut.h" #include "smallut.h" #include "advsearch_w.h" #include "sortseq.h" #include "uiprefs_w.h" #include "guiutils.h" #include "reslist.h" #include "ssearch_w.h" #include "internfile.h" #include "docseqdb.h" #include "docseqsem.h" #include "docseqhist.h" #include "docseqdocs.h" #include "restable.h" #include "firstidx.h" #include "indexer.h" #include "rclzg.h" #include "snippets_w.h" #include "fragbuts.h" #include "systray.h" #include "rclmain_w.h" #include "rclhelp.h" #include "readfile.h" #include "moc_rclmain_w.cpp" #include "scbase.h" #include "idxmodel.h" #include "cstr.h" #include "preview_w.h" using std::string; using std::vector; using std::map; using std::list; QString g_stringAllStem, g_stringNoStem; static const char *settingskey_toolarea="/Recoll/geometry/toolArea"; static const char *settingskey_resarea="/Recoll/geometry/resArea"; static const char *settingskey_sidefilterssize = "/Recoll/geometry/sideFilters"; static Qt::ToolBarArea int2area(int in) { switch (in) { case Qt::LeftToolBarArea: return Qt::LeftToolBarArea; case Qt::RightToolBarArea: return Qt::RightToolBarArea; case Qt::BottomToolBarArea: return Qt::BottomToolBarArea; case Qt::TopToolBarArea: default: return Qt::TopToolBarArea; } } static QString configToTitle() { string confdir = path_getsimple(theconfig->getConfDir()); // Lower-case version. This only works with the ascii part, but // that's ok even if there are non-ascii chars in there, because // we further operate only on ascii substrings. string lconfdir = stringtolower((const string&)confdir); if (!lconfdir.empty() && lconfdir[0] == '.') { lconfdir = lconfdir.substr(1); confdir = confdir.substr(1); } string::size_type pos = lconfdir.find("recoll"); if (pos != string::npos) { lconfdir = lconfdir.substr(0, pos) + lconfdir.substr(pos+6); confdir = confdir.substr(0, pos) + confdir.substr(pos+6); } if (!confdir.empty()) { switch (confdir[0]) { case '.': case '-': case '_': confdir = confdir.substr(1); break; default: break; } } if (confdir.empty()) { confdir = "Recoll"; } else { confdir = string("Recoll - ") + confdir; } return QString::fromUtf8(confdir.c_str()); } void RclMain::init() { setWindowTitle(configToTitle()); buildMenus(); if (getenv("RECOLL_RESULTS_GEOMETRY")) { resultsSetFixedGeometry(); } periodictimer = new QTimer(this); // idxstatus file. Make sure it exists before trying to watch it // (case where we're started on an older index, or if the status // file was deleted since indexing) QString idxfn = path2qs(theconfig->getIdxStatusFile()); QFile qf(idxfn); qf.open(QIODevice::ReadWrite); qf.setPermissions(QFile::ReadOwner|QFile::WriteOwner); qf.close(); m_watcher.addPath(idxfn); setupStatusBar(); setupMenus(); (void)new HelpClient(this); HelpClient::installMap((const char *)this->objectName().toUtf8(), "RCL.SEARCH.GUI.SIMPLE"); // Set the focus to the search terms entry: sSearch->takeFocus(); enbSynAction->setDisabled(prefs.synFile.isEmpty()); enbSynAction->setChecked(prefs.synFileEnable); setupToolbars(); //////// 3 versions of results category filtering: buttons, combobox, menu setupCategoryFiltering(); restable = new ResTable(this); resultsHLayout->insertWidget(1, restable); actionShowResultsAsTable->setChecked(prefs.showResultsAsTable); showResultsAsTable(prefs.showResultsAsTable); onNewShortcuts(); Preview::listShortcuts(); SnippetsW::listShortcuts(); AdvSearch::listShortcuts(); connect(&SCBase::scBase(), SIGNAL(shortcutsChanged()), this, SLOT(onNewShortcuts())); connect(&m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(updateIdxStatus())); connect(sSearch, SIGNAL(startSearch(std::shared_ptr, bool)), this, SLOT(startSearch(std::shared_ptr, bool))); connect(sSearch, SIGNAL(ssearchTypeChanged(int)), this, SLOT(onSSearchTypeChanged(int))); connect(sSearch, SIGNAL(setDescription(QString)), this, SLOT(onSetDescription(QString))); connect(sSearch, SIGNAL(clearSearch()), this, SLOT(resetSearch())); connect(this, SIGNAL(uiPrefsChanged()), sSearch, SLOT(setPrefs())); connect(preferencesMenu, SIGNAL(triggered(QAction*)), this, SLOT(setStemLang(QAction*))); connect(preferencesMenu, SIGNAL(aboutToShow()), this, SLOT(adjustPrefsMenu())); connect(fileExitAction, SIGNAL(triggered()), this, SLOT(fileExit())); connect(actionSwitch_Config, SIGNAL(triggered()), this, SLOT(showConfigSwitch())); connect(fileToggleIndexingAction, SIGNAL(triggered()), this, SLOT(toggleIndexing())); connect(fileStartMonitorAction, SIGNAL(triggered()), this, SLOT(startMonitor())); connect(fileBumpIndexingAction, SIGNAL(triggered()), this, SLOT(bumpIndexing())); connect(fileRebuildIndexAction, SIGNAL(triggered()), this, SLOT(rebuildIndex())); connect(actionSpecial_Indexing, SIGNAL(triggered()), this, SLOT(showSpecIdx())); connect(fileEraseDocHistoryAction, SIGNAL(triggered()), this, SLOT(eraseDocHistory())); connect(fileEraseSearchHistoryAction, SIGNAL(triggered()), this, SLOT(eraseSearchHistory())); connect(fileExportSSearchHistoryAction, SIGNAL(triggered()), this, SLOT(exportSimpleSearchHistory())); connect(actionSave_last_query, SIGNAL(triggered()), this, SLOT(saveLastQuery())); connect(actionLoad_saved_query, SIGNAL(triggered()), this, SLOT(loadSavedQuery())); connect(actionShow_index_statistics, SIGNAL(triggered()), this, SLOT(showIndexStatistics())); connect(helpAbout_RecollAction, SIGNAL(triggered()), this, SLOT(showAboutDialog())); connect(showMissingHelpers_Action, SIGNAL(triggered()), this, SLOT(showMissingHelpers())); connect(showActiveTypes_Action, SIGNAL(triggered()), this, SLOT(showActiveTypes())); connect(userManualAction, SIGNAL(triggered()), this, SLOT(startManual())); connect(onlineManualAction, SIGNAL(triggered()), this, SLOT(startOnlineManual())); connect(toolsDoc_HistoryAction, SIGNAL(triggered()), this, SLOT(showDocHistory())); connect(toolsAdvanced_SearchAction, SIGNAL(triggered()), this, SLOT(showAdvSearchDialog())); connect(toolsSpellAction, SIGNAL(triggered()), this, SLOT(showSpellDialog())); connect(actionWebcache_Editor, SIGNAL(triggered()), this, SLOT(showWebcacheDialog())); connect(actionQuery_Fragments, SIGNAL(triggered()), this, SLOT(showFragButs())); connect(indexConfigAction, SIGNAL(triggered()), this, SLOT(showIndexConfig())); connect(pTransAction, SIGNAL(triggered()), this, SLOT(showPTrans())); connect(indexScheduleAction, SIGNAL(triggered()), this, SLOT(showIndexSched())); connect(queryPrefsAction, SIGNAL(triggered()), this, SLOT(showUIPrefs())); connect(extIdxAction, SIGNAL(triggered()), this, SLOT(showExtIdxDialog())); connect(enbSynAction, SIGNAL(toggled(bool)), this, SLOT(setSynEnabled(bool))); connect(actionSortByDateAsc, SIGNAL(toggled(bool)), this, SLOT(sortByDateAsc(bool))); connect(actionSortByDateDesc, SIGNAL(toggled(bool)), this, SLOT(sortByDateDesc(bool))); connect(actionShowResultsAsTable, SIGNAL(toggled(bool)), this, SLOT(showResultsAsTable(bool))); connect(toggleFullScreenAction, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); zoomInAction->setShortcut(QKeySequence::ZoomIn); connect(zoomInAction, SIGNAL(triggered()), this, SLOT(zoomIn())); zoomOutAction->setShortcut(QKeySequence::ZoomOut); connect(zoomOutAction, SIGNAL(triggered()), this, SLOT(zoomOut())); connect(actionShowQueryDetails, SIGNAL(triggered()), reslist, SLOT(showQueryDetails())); connect(periodictimer, SIGNAL(timeout()), this, SLOT(periodic100())); restable->setRclMain(this, true); connect(actionSaveResultsAsCSV, SIGNAL(triggered()), restable, SLOT(saveAsCSV())); connect(this, SIGNAL(docSourceChanged(std::shared_ptr)), restable, SLOT(setDocSource(std::shared_ptr))); connect(this, SIGNAL(searchReset()), restable, SLOT(resetSource())); connect(this, SIGNAL(resultsReady()), restable, SLOT(readDocSource())); connect(this, SIGNAL(sortDataChanged(DocSeqSortSpec)), restable, SLOT(onSortDataChanged(DocSeqSortSpec))); connect(this, SIGNAL(sortDataChanged(DocSeqSortSpec)), this, SLOT(onSortDataChanged(DocSeqSortSpec))); connect(this, SIGNAL(uiPrefsChanged()), restable, SLOT(onUiPrefsChanged())); connect(restable->getModel(), SIGNAL(sortDataChanged(DocSeqSortSpec)), this, SLOT(onExtSortDataChanged(DocSeqSortSpec))); connect(restable, SIGNAL(docPreviewClicked(int, Rcl::Doc, int)), this, SLOT(startPreview(int, Rcl::Doc, int))); connect(restable, SIGNAL(docExpand(Rcl::Doc)), this, SLOT(docExpand(Rcl::Doc))); connect(restable, SIGNAL(showSubDocs(Rcl::Doc)), this, SLOT(showSubDocs(Rcl::Doc))); connect(restable, SIGNAL(openWithRequested(Rcl::Doc, std::string)), this, SLOT(openWith(Rcl::Doc, std::string))); reslist->setRclMain(this, true); connect(this, SIGNAL(docSourceChanged(std::shared_ptr)), reslist, SLOT(setDocSource(std::shared_ptr))); connect(firstPageAction, SIGNAL(triggered()), reslist, SLOT(resultPageFirst())); connect(prevPageAction, SIGNAL(triggered()), reslist, SLOT(resPageUpOrBack())); connect(nextPageAction, SIGNAL(triggered()), reslist, SLOT(resPageDownOrNext())); connect(this, SIGNAL(searchReset()), reslist, SLOT(resetList())); connect(this, SIGNAL(resultsReady()), reslist, SLOT(readDocSource())); connect(this, SIGNAL(uiPrefsChanged()), reslist, SLOT(onUiPrefsChanged())); #if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) connect(qApp->styleHints(), SIGNAL(colorSchemeChanged(Qt::ColorScheme)), this, SLOT(setUIPrefs())); #endif connect(reslist, SIGNAL(hasResults(int)), this, SLOT(resultCount(int))); connect(reslist, SIGNAL(wordSelect(QString)), sSearch, SLOT(addTerm(QString))); connect(reslist, SIGNAL(wordReplace(const QString&, const QString&)), sSearch, SLOT(onWordReplace(const QString&, const QString&))); connect(reslist, SIGNAL(nextPageAvailable(bool)), this, SLOT(enableNextPage(bool))); connect(reslist, SIGNAL(prevPageAvailable(bool)), this, SLOT(enablePrevPage(bool))); connect(reslist, SIGNAL(docExpand(Rcl::Doc)), this, SLOT(docExpand(Rcl::Doc))); connect(reslist, SIGNAL(showSnippets(Rcl::Doc)), this, SLOT(showSnippets(Rcl::Doc))); connect(reslist, SIGNAL(showSubDocs(Rcl::Doc)), this, SLOT(showSubDocs(Rcl::Doc))); connect(reslist, SIGNAL(docSaveToFileClicked(Rcl::Doc)), this, SLOT(saveDocToFile(Rcl::Doc))); connect(reslist, SIGNAL(editRequested(Rcl::Doc)), this, SLOT(startNativeViewer(Rcl::Doc))); connect(reslist, SIGNAL(openWithRequested(Rcl::Doc, std::string)), this, SLOT(openWith(Rcl::Doc, std::string))); connect(reslist, SIGNAL(docPreviewClicked(int, Rcl::Doc, int)), this, SLOT(startPreview(int, Rcl::Doc, int))); connect(reslist, SIGNAL(previewRequested(Rcl::Doc)), this, SLOT(startPreview(Rcl::Doc))); setFilterCtlStyle(prefs.filterCtlStyle); if (prefs.keepSort && prefs.sortActive) { m_sortspec.field = (const char *)prefs.sortField.toUtf8(); m_sortspec.desc = prefs.sortDesc; emit sortDataChanged(m_sortspec); } QSettings settings; restoreGeometry(settings.value("/Recoll/geometry/maingeom").toByteArray()); QVariant saved = settings.value(settingskey_sidefilterssize); if (saved != QVariant()) { sideFiltersSPLT->restoreState(saved.toByteArray()); } else { QList sizes; sizes << 200 << 600; sideFiltersSPLT->setSizes(sizes); } // We don't want the side filters part of the splitter to change width when the window is // resized sideFiltersSPLT->setStretchFactor(0, 0); sideFiltersSPLT->setStretchFactor(1, 1); populateSideFilters(SFUR_INIT); enableTrayIcon(prefs.showTrayIcon); fileRebuildIndexAction->setEnabled(false); fileToggleIndexingAction->setEnabled(false); fileRetryFailedAction->setEnabled(false); // Start timer on a slow period (used for checking ^C). Will be // speeded up during indexing periodictimer->start(1000); setUIPrefs(); reslist->resetList(); #ifdef RCL_SHOW_FOCUS_CHANGES // Help with understanding where the focus goes... The focus order should probably be // explicitely set with QWidget::setTabOrder(). connect(qApp, &QApplication::focusChanged, [this](QWidget *oldWidget, QWidget *newWidget) { QString msg("Focus changed from: "); msg += oldWidget ? oldWidget->objectName() : QString("(none)"); msg += " to "; msg += newWidget ? newWidget->objectName() : QString("(none)"); this->statusBar()->showMessage(msg, 2000); }); #endif } void RclMain::onSSearchTypeChanged(int typ) { enableSideFilters(typ == SSearch::SST_LANG); if (m_sortspecsearchtype == -1) { // init. Keep the possible sortspec from specs m_sortspecsearchtype = typ; return; } if (m_sortspecsearchtype != typ) { m_sortspecsearchtype = typ; // Reset sort when changing modes. m_sortspec.desc = false; m_sortspec.field.clear(); if (typ == SSearch::SST_FNM) { // If this is a file name search sort by mtype so that directories // come first (see the rclquery sort key generator) m_sortspec.field = "mtype"; } } } void RclMain::zoomIn() { prefs.zoomincr++; emit uiPrefsChanged(); } void RclMain::zoomOut() { prefs.zoomincr--; emit uiPrefsChanged(); } void RclMain::onNewShortcuts() { SCBase& scb = SCBase::scBase(); QKeySequence ks; SETSHORTCUT(sSearch, "main:347", tr("Main Window"), tr("Clear search"), "Ctrl+S", m_clearsearchsc, clearAll); SETSHORTCUT(sSearch, "main:349", tr("Main Window"), tr("Move keyboard focus to search entry"), "Ctrl+L", m_focustosearchsc, takeFocus); SETSHORTCUT(sSearch, "main:352", tr("Main Window"), tr("Move keyboard focus to search, alt."), "Ctrl+Shift+S", m_focustosearcholdsc, takeFocus); // We could set this as an action shortcut, but then, it would not // be editable SETSHORTCUT(this, "main:357", tr("Main Window"), tr("Toggle tabular display"), "Ctrl+T", m_toggletablesc, toggleTable); SETSHORTCUT(this, "main:373", tr("Main Window"), tr("Show menu search dialog"), "Alt+/", m_actionssearchsc, showActionsSearch); ks = scb.get("rclmain:361", tr("Main Window"), tr("Move keyboard focus to table"), "Ctrl+R"); if (!ks.isEmpty()) { delete m_focustotablesc; m_focustotablesc = new QShortcut(ks, this); if (displayingTable) { connect(m_focustotablesc, SIGNAL(activated()), restable, SLOT(takeFocus())); } else { disconnect(m_focustotablesc, SIGNAL(activated()), restable, SLOT(takeFocus())); } } SETSHORTCUT(this, "main:389", tr("Main Window"), tr("Show advanced search dialog"), "Alt+s", m_showadvsearchsc, showAdvSearchDialog); } void RclMain::setupToolbars() { if (nullptr == m_toolsTB) { m_toolsTB = new QToolBar(tr("Tools"), this); m_toolsTB->setObjectName(QString::fromUtf8("m_toolsTB")); m_toolsTB->addAction(toolsAdvanced_SearchAction); m_toolsTB->addAction(toolsDoc_HistoryAction); m_toolsTB->addAction(toolsSpellAction); m_toolsTB->addAction(actionQuery_Fragments); } QSettings settings; int val; if (!prefs.noToolbars) { val = settings.value(settingskey_toolarea).toInt(); this->addToolBar(int2area(val), m_toolsTB); m_toolsTB->show(); } else { m_toolsTB->hide(); } if (nullptr == m_resTB) { m_resTB = new QToolBar(tr("Results"), this); m_resTB->setObjectName(QString::fromUtf8("m_resTB")); } if (!prefs.noToolbars) { val = settings.value(settingskey_resarea).toInt(); this->addToolBar(int2area(val), m_resTB); m_resTB->show(); } else { m_resTB->hide(); } } void RclMain::setupStatusBar() { auto bar = statusBar(); if (prefs.noStatusBar) { bar->hide(); } else { bar->show(); } } void RclMain::setupMenus() { if (prefs.noMenuBar) { menuBar()->hide(); sSearch->menuPB->show(); butmenuSC = new QShortcut(QKeySequence("Alt+m"), this); connect(butmenuSC, SIGNAL(activated()), sSearch->menuPB, SLOT(showMenu())); } else { menuBar()->show(); sSearch->menuPB->hide(); deleteZ(butmenuSC); } } void RclMain::enableTrayIcon(bool on) { on = on && QSystemTrayIcon::isSystemTrayAvailable(); if (on) { if (nullptr == m_trayicon) { m_trayicon = new RclTrayIcon(this, QIcon(QString(":/images/recoll.png"))); } m_trayicon->show(); } else { deleteZ(m_trayicon); } } void RclMain::setupCategoryFiltering() { // This is just to get the common catg strings into the message file static const char* catg_strings[] = { QT_TR_NOOP("All"), QT_TR_NOOP("media"), QT_TR_NOOP("message"), QT_TR_NOOP("other"), QT_TR_NOOP("presentation"), QT_TR_NOOP("spreadsheet"), QT_TR_NOOP("text"), QT_TR_NOOP("sorted"), QT_TR_NOOP("filtered") }; //// Combobox version m_filtCMB = new QComboBox(m_resTB); m_filtCMB->setEditable(false); m_filtCMB->addItem(tr("All")); m_filtCMB->setToolTip(tr("Document filter")); //// Buttons version m_filtFRM = new QFrame(this); m_filtFRM->setObjectName(QString::fromUtf8("m_filtFRM")); QHBoxLayout *bgrphbox = new QHBoxLayout(m_filtFRM); verticalLayout->insertWidget(1, m_filtFRM); QSizePolicy sizePolicy2(QSizePolicy::Preferred, QSizePolicy::Maximum); sizePolicy2.setHorizontalStretch(0); sizePolicy2.setVerticalStretch(0); sizePolicy2.setHeightForWidth(m_filtFRM->sizePolicy().hasHeightForWidth()); m_filtFRM->setSizePolicy(sizePolicy2); m_filtBGRP = new QButtonGroup(m_filtFRM); QRadioButton *allRDB = new QRadioButton(m_filtFRM); allRDB->setObjectName("allRDB"); allRDB->setText(tr("All")); bgrphbox->addWidget(allRDB); int bgrpid = 0; m_filtBGRP->addButton(allRDB, bgrpid++); allRDB->setChecked(true); m_filtFRM->setLayout(bgrphbox); //// Menu version of the document filter control m_filtMN = new QMenu(menuBar()); m_filtMN->setObjectName("m_filtMN"); menuBar()->insertMenu(viewMenu->menuAction(), m_filtMN); buttonTopMenu->insertMenu(viewMenu->menuAction(), m_filtMN); m_filtMN->setTitle(tr("F&ilter")); QActionGroup *fltag = new QActionGroup(this); fltag->setExclusive(true); QAction *act = fltag->addAction(tr("All")); m_filtMN->addAction(act); act->setCheckable(true); act->setData((int)0); //// Go through the categories list and setup menu, buttons and combobox vector cats; theconfig->getGuiFilterNames(cats); m_catgbutvec.push_back(catg_strings[0]); for (const auto& cat : cats) { QRadioButton *but = new QRadioButton(m_filtFRM); QString catgnm = u8s2qs(cat); m_catgbutvec.push_back(cat); // We strip text before the first colon before setting the button name. // This is so that the user can decide the order of buttons by naming // the filter,ie, a:media b:messages etc. QString but_txt = catgnm; int colon = catgnm.indexOf(':'); if (colon != -1) { but_txt = catgnm.right(catgnm.size()-(colon+1)); } but->setText(tr(but_txt.toUtf8())); m_filtCMB->addItem(tr(but_txt.toUtf8())); bgrphbox->addWidget(but); m_filtBGRP->addButton(but, bgrpid++); QAction *act = fltag->addAction(tr(but_txt.toUtf8())); m_filtMN->addAction(act); act->setCheckable(true); act->setData((int)(m_catgbutvec.size()-1)); } m_filtMN->connect(m_filtMN, SIGNAL(triggered(QAction *)), this, SLOT(catgFilter(QAction *))); #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) connect(m_filtBGRP, SIGNAL(idClicked(int)), this, SLOT(catgFilter(int))); #else connect(m_filtBGRP, SIGNAL(buttonClicked(int)), this, SLOT(catgFilter(int))); #endif connect(m_filtCMB, SIGNAL(activated(int)), this, SLOT(catgFilter(int))); } void RclMain::setSynEnabled(bool on) { prefs.synFileEnable = on; if (uiprefs) uiprefs->synFileCB->setChecked(prefs.synFileEnable); } void RclMain::resultCount(int n) { actionSortByDateAsc->setEnabled(n>0); actionSortByDateDesc->setEnabled(n>0); } void RclMain::setFilterCtlStyle(int stl) { switch (stl) { case PrefsPack::FCS_MN: setupResTB(false); m_filtFRM->setVisible(false); m_filtMN->menuAction()->setVisible(true); break; case PrefsPack::FCS_CMB: setupResTB(true); m_filtFRM->setVisible(false); m_filtMN->menuAction()->setVisible(false); break; case PrefsPack::FCS_BT: default: setupResTB(false); m_filtFRM->setVisible(true); m_filtMN->menuAction()->setVisible(false); } } // Set up the "results" toolbox, adding the filter combobox or not depending // on config option void RclMain::setupResTB(bool combo) { m_resTB->clear(); m_resTB->addAction(firstPageAction); m_resTB->addAction(prevPageAction); m_resTB->addAction(nextPageAction); m_resTB->addSeparator(); m_resTB->addAction(actionSortByDateAsc); m_resTB->addAction(actionSortByDateDesc); if (combo) { m_resTB->addSeparator(); m_filtCMB->show(); m_resTB->addWidget(m_filtCMB); } else { m_filtCMB->hide(); } m_resTB->addSeparator(); m_resTB->addAction(actionShowResultsAsTable); } // This is called by a timer right after we come up. Try to open // the database and talk to the user if we can't void RclMain::initDbOpen() { bool nodb = false; string reason; bool maindberror; if (!maybeOpenDb(reason, true, &maindberror)) { nodb = true; if (maindberror) { if (theconfig && !path_exists(theconfig->getDbDir())) { FirstIdxDialog fidia(this); connect(fidia.idxconfCLB, SIGNAL(clicked()), this, SLOT(execIndexConfig())); connect(fidia.idxschedCLB, SIGNAL(clicked()), this, SLOT(execIndexSched())); connect(fidia.runidxPB, SIGNAL(clicked()), this, SLOT(rebuildIndex())); fidia.exec(); // Don't open adv search or run cmd line search in this case. return; } else { QMessageBox::warning( 0, "Recoll", tr("Main index open error: ") + u8s2qs(reason) + tr(". The index may be corrupted. Maybe try to run xapian-check or " "rebuild the index ?.")); } } else { QMessageBox::warning(0, "Recoll", tr("Could not open external index. Db not " "open. Check external index list.")); } } if (prefs.startWithAdvSearchOpen) showAdvSearchDialog(); // If we have something in the search entry, it comes from a // command line argument if (!nodb && sSearch->hasSearchString()) QTimer::singleShot(0, sSearch, SLOT(startSimpleSearch())); if (!m_urltoview.isEmpty()) viewUrl(); } void RclMain::setStemLang(QAction *id) { LOGDEB("RclMain::setStemLang(" << id << ")\n"); // Check that the menu entry is for a stemming language change // (might also be "show prefs" etc. bool isLangId = false; for (const auto& entry : m_stemLangToId) { if (id == entry.second) isLangId = true; } if (!isLangId) return; // Set the "checked" item state for lang entries for (auto& entry : m_stemLangToId) { entry.second->setChecked(false); } id->setChecked(true); // Retrieve language value (also handle special cases), set prefs, // notify that we changed QString lang; if (id == m_idNoStem) { lang = ""; } else if (id == m_idAllStem) { lang = "ALL"; } else { lang = id->text(); } prefs.queryStemLang = lang; LOGDEB("RclMain::setStemLang(" << id << "): lang [" << qs2utf8s(prefs.queryStemLang) << "]\n"); rwSettings(true); emit stemLangChanged(lang); } // Set the checked stemming language item before showing the prefs menu void RclMain::setStemLang(const QString& lang) { LOGDEB("RclMain::setStemLang(" << qs2utf8s(lang) << ")\n"); QAction *id; if (lang == "") { id = m_idNoStem; } else if (lang == "ALL") { id = m_idAllStem; } else { auto it = m_stemLangToId.find(lang); if (it == m_stemLangToId.end()) return; id = it->second; } for (const auto& entry : m_stemLangToId) { entry.second->setChecked(false); } id->setChecked(true); } // Prefs menu about to show void RclMain::adjustPrefsMenu() { setStemLang(prefs.queryStemLang); } void RclMain::showTrayMessage(const QString& text) { if (m_trayicon && prefs.trayMessages) m_trayicon->showMessage("Recoll", text, QSystemTrayIcon::Information, 2000); } void RclMain::closeEvent(QCloseEvent *ev) { LOGDEB("RclMain::closeEvent\n"); if (isFullScreen()) { prefs.showmode = PrefsPack::SHOW_FULL; } else if (isMaximized()) { prefs.showmode = PrefsPack::SHOW_MAX; } else { prefs.showmode = PrefsPack::SHOW_NORMAL; } ev->ignore(); if (prefs.closeToTray && m_trayicon && m_trayicon->isVisible()) { hide(); return; } fileExit(); } void RclMain::fileExit() { LOGDEB("RclMain: fileExit\n"); // Have to do this both in closeEvent (for close to tray) and fileExit // (^Q, doesnt go through closeEvent) if (isFullScreen()) { prefs.showmode = PrefsPack::SHOW_FULL; } else if (isMaximized()) { prefs.showmode = PrefsPack::SHOW_MAX; } else { prefs.showmode = PrefsPack::SHOW_NORMAL; } if (m_trayicon) { m_trayicon->setVisible(false); } // Don't save geometry if we're currently maximized. At least under X11 // this saves the maximized size. otoh isFullscreen() does not seem needed QSettings settings; if (!isMaximized()) { settings.setValue("/Recoll/geometry/maingeom", saveGeometry()); } if (!prefs.noToolbars) { settings.setValue(settingskey_toolarea, toolBarArea(m_toolsTB)); settings.setValue(settingskey_resarea, toolBarArea(m_resTB)); } restable->saveColState(); settings.setValue(settingskey_sidefilterssize, sideFiltersSPLT->saveState()); prefs.ssearchTyp = sSearch->getSearchType(); rwSettings(true); deleteAllTempFiles(); #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && !defined(PREVIEW_FORCETEXTBROWSER) // For some reason, qt5 qApp->exit(0) here stops desktop shutdown (at least on KDE and // Cinnamon). Recoll exits but the shutdown is aborted. _exit(0); #else qApp->exit(0); #endif } // Start a db query and set the reslist docsource void RclMain::startSearch(std::shared_ptr sdata, bool issimple) { LOGDEB("RclMain::startSearch. Indexing " << (m_idxproc?"on":"off") << " Active " << m_queryActive << "\n"); if (m_queryActive) { LOGDEB("startSearch: already active\n"); return; } m_queryActive = true; restable->setEnabled(false); m_source = std::shared_ptr(); m_searchIsSimple = issimple; // The db may have been closed at the end of indexing string reason; // If indexing is being performed, we reopen the db at each query. if (!maybeOpenDb(reason, m_idxproc != 0)) { QMessageBox::critical(0, "Recoll", u8s2qs(reason)); m_queryActive = false; restable->setEnabled(true); return; } if (prefs.synFileEnable && !prefs.synFile.isEmpty()) { if (!rcldb->setSynGroupsFile(qs2path(prefs.synFile))) { QMessageBox::warning(0, "Recoll", tr("Can't set synonyms file (parse error?)")); return; } } else { rcldb->setSynGroupsFile(""); } #ifdef ENABLE_SEMANTIC if (issimple && sSearch->getSearchType() == SSearch::SST_SEM) { // Special case the semantic search class SemWalker: public Rcl::SdataWalker { public: virtual bool clause(Rcl::SearchDataClause* _clp) { auto clp = dynamic_cast(_clp); m_text = clp->gettext(); return true; } std::string m_text; }; SemWalker walker; Rcl::sdataWalk(sdata.get(), walker); // We just need the search m_source = std::make_shared(qs2utf8s(tr("Query results")), rcldb, walker.m_text); } else { #endif // SEMANTIC Rcl::Query *query = new Rcl::Query(rcldb.get()); query->setCollapseDuplicates(prefs.collapseDuplicates); curPreview = 0; DocSequenceDb *src = new DocSequenceDb(rcldb, std::shared_ptr(query), qs2utf8s(tr("Query results")), sdata); src->setAbstractParams(prefs.queryBuildAbstract, prefs.queryReplaceAbstract); m_source = std::shared_ptr(src); m_source->setSortSpec(m_sortspec); setFiltSpec(); #ifdef ENABLE_SEMANTIC } #endif //SEMANTIC emit docSourceChanged(m_source); emit sortDataChanged(m_sortspec); initiateQuery(); } class QueryThread : public QThread { std::shared_ptr m_source; public: QueryThread(std::shared_ptr source) : m_source(source) {} ~QueryThread() {} virtual void run() { cnt = m_source->getResCnt(); } int cnt; }; void RclMain::hideToolTip() { QToolTip::hideText(); } void RclMain::initiateQuery() { if (!m_source) return; QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QueryThread qthr(m_source); qthr.start(); QProgressDialog progress(this); progress.setLabelText(tr("Query in progress.
" "Due to limitations of the indexing library,
" "cancelling will exit the program")); progress.setWindowModality(Qt::WindowModal); progress.setRange(0,0); // For some reason setMinimumDuration() does not seem to work with // a busy dialog (range 0,0) Have to call progress.show() inside // the loop. // progress.setMinimumDuration(2000); // Also the multiple processEvents() seem to improve the responsiveness?? for (int i = 0;;i++) { qApp->processEvents(); if (qthr.wait(100)) { break; } if (i == 20) progress.show(); qApp->processEvents(); if (progress.wasCanceled()) { // Just get out of there asap. exit(1); } qApp->processEvents(); } progress.close(); int cnt = qthr.cnt; QString msg; if (cnt > 0) { QString str; msg = tr("Result count (est.)") + ": " + str.setNum(cnt); } else { msg = tr("No results found"); } statusBar()->showMessage(msg, 0); QApplication::restoreOverrideCursor(); m_queryActive = false; restable->setEnabled(true); emit resultsReady(); } void RclMain::resetSearch() { m_source = std::shared_ptr(); emit searchReset(); } void RclMain::onSortCtlChanged() { if (m_sortspecnochange) return; LOGDEB("RclMain::onSortCtlChanged()\n"); m_sortspec.reset(); if (actionSortByDateAsc->isChecked()) { m_sortspec.field = "mtime"; m_sortspec.desc = false; prefs.sortActive = true; prefs.sortDesc = false; prefs.sortField = "mtime"; } else if (actionSortByDateDesc->isChecked()) { m_sortspec.field = "mtime"; m_sortspec.desc = true; prefs.sortActive = true; prefs.sortDesc = true; prefs.sortField = "mtime"; } else { prefs.sortActive = prefs.sortDesc = false; prefs.sortField = ""; // If this is a file name search sort by mtype so that directories // come first (see the rclquery sort key generator) if (sSearch->getSearchType() == SSearch::SST_FNM) { m_sortspec.field = "mtype"; m_sortspec.desc = false; } } if (m_source) m_source->setSortSpec(m_sortspec); emit sortDataChanged(m_sortspec); } void RclMain::onExtSortDataChanged(DocSeqSortSpec spec) { onSortDataChanged(spec); initiateQuery(); } void RclMain::onSortDataChanged(DocSeqSortSpec spec) { LOGDEB("RclMain::onSortDataChanged\n"); m_sortspecnochange = true; if (spec.field.compare("mtime")) { actionSortByDateDesc->setChecked(false); actionSortByDateAsc->setChecked(false); } else { actionSortByDateDesc->setChecked(spec.desc); actionSortByDateAsc->setChecked(!spec.desc); } m_sortspecnochange = false; if (m_source) m_source->setSortSpec(spec); m_sortspec = spec; prefs.sortField = QString::fromUtf8(spec.field.c_str()); prefs.sortDesc = spec.desc; prefs.sortActive = !spec.field.empty(); std::string fld; if (!m_sortspec.field.empty()) { fld = qs2utf8s(RecollModel::displayableField(m_sortspec.field)); } DocSequence::set_translations( qs2utf8s(tr("sorted")) + ": " + fld + (m_sortspec.desc?" ↓":" ↑"), qs2utf8s(tr("filtered"))); } // Needed only because an action is not a widget, so can't be used // with SETSHORTCUT void RclMain::toggleTable() { actionShowResultsAsTable->toggle(); } void RclMain::showResultsAsTable(bool on) { LOGDEB("RclMain::showResultsAsTable(" << on << ")\n"); prefs.showResultsAsTable = on; displayingTable = on; restable->setVisible(on); reslist->setVisible(!on); actionSaveResultsAsCSV->setEnabled(on); if (!on) { int docnum = restable->getDetailDocNumOrTopRow(); if (docnum >= 0) { reslist->resultPageFor(docnum); } if (m_focustotablesc) disconnect(m_focustotablesc, SIGNAL(activated()), restable, SLOT(takeFocus())); sSearch->takeFocus(); } else { int docnum = reslist->pageFirstDocNum(); if (docnum >= 0) { restable->makeRowVisible(docnum); } nextPageAction->setEnabled(false); prevPageAction->setEnabled(false); firstPageAction->setEnabled(false); if (m_focustotablesc) connect(m_focustotablesc, SIGNAL(activated()), restable, SLOT(takeFocus())); // This should not be necessary, but it fixes a display issue with qt 5.12/5.15 // (focal/jammy) at least, where the restable area is not fully painted (but gets updated if // you move the pointer around or resize / move the window, depending). The problem is // slightly random or timing-dependant (not occurring every time). The hide/show does not // seem to hurt performance visibly. restable->hide(); restable->show(); } } void RclMain::sortByDateAsc(bool on) { LOGDEB("RclMain::sortByDateAsc(" << on << ")\n"); if (on) { if (actionSortByDateDesc->isChecked()) { actionSortByDateDesc->setChecked(false); // Let our buddy work. return; } } onSortCtlChanged(); initiateQuery(); } void RclMain::sortByDateDesc(bool on) { LOGDEB("RclMain::sortByDateDesc(" << on << ")\n"); if (on) { if (actionSortByDateAsc->isChecked()) { actionSortByDateAsc->setChecked(false); // Let our buddy work. return; } } onSortCtlChanged(); initiateQuery(); } void RclMain::saveDocToFile(Rcl::Doc doc) { QString s = QFileDialog::getSaveFileName( this, tr("Save file"), path2qs(path_home())); string tofile = qs2path(s); TempFile temp; // not used because tofile is set. if (!FileInterner::idocToFile(temp, tofile, theconfig, doc)) { QMessageBox::warning(0, "Recoll", tr("Cannot extract document or create temporary file")); return; } } void RclMain::showSubDocs(Rcl::Doc doc) { LOGDEB("RclMain::showSubDocs\n"); string reason; if (!maybeOpenDb(reason, false)) { QMessageBox::critical(0, "Recoll", QString(reason.c_str())); return; } vector docs; if (!rcldb->getSubDocs(doc, docs)) { QMessageBox::warning(0, "Recoll", QString("Can't get subdocs")); return; } DocSequenceDocs *src = new DocSequenceDocs(rcldb, docs, qs2utf8s(tr("Sub-documents and attachments"))); src->setDescription(qs2utf8s(tr("Sub-documents and attachments"))); std::shared_ptr source(new DocSource(theconfig, std::shared_ptr(src))); ResTable *res = new ResTable(); res->setRclMain(this, false); res->setDocSource(source); res->readDocSource(); res->show(); } // Search for document 'like' the selected one. We ask rcldb/xapian to find // significant terms, and add them to the simple search entry. void RclMain::docExpand(Rcl::Doc doc) { LOGDEB("RclMain::docExpand()\n"); if (!rcldb) return; list terms; terms = m_source->expand(doc); if (terms.empty()) { LOGDEB("RclMain::docExpand: no terms\n"); return; } // Do we keep the original query. I think we'd better not. // rcldb->expand is set to keep the original query terms instead. QString text;// = sSearch->queryText->currentText(); for (list::iterator it = terms.begin(); it != terms.end(); it++) { text += u8s2qs(std::string(" \"") + *it + "\""); } // We need to insert item here, its not auto-done like when the user types // CR sSearch->setSearchString(text); sSearch->setAnyTermMode(); sSearch->startSimpleSearch(); } void RclMain::showDocHistory() { LOGDEB("RclMain::showDocHistory\n"); resetSearch(); curPreview = 0; string reason; if (!maybeOpenDb(reason, false)) { QMessageBox::critical(0, "Recoll", QString(reason.c_str())); return; } // Construct a bogus SearchData structure auto searchdata = std::make_shared(Rcl::SCLT_AND, cstr_null); searchdata->setDescription((const char *)tr("History data").toUtf8()); // If you change the title, also change it in eraseDocHistory() DocSequenceHistory *src = new DocSequenceHistory(rcldb, g_dynconf, qs2utf8s(tr("Document history"))); src->setDescription(qs2utf8s(tr("History data"))); DocSource *source = new DocSource(theconfig, std::shared_ptr(src)); m_source = std::shared_ptr(source); m_source->setSortSpec(m_sortspec); setFiltSpec(); emit docSourceChanged(m_source); emit sortDataChanged(m_sortspec); initiateQuery(); } // Erase all memory of documents viewed void RclMain::eraseDocHistory() { // Clear file storage if (g_dynconf) g_dynconf->eraseAll(docHistSubKey); // Clear possibly displayed history if (reslist->displayingHistory()) { showDocHistory(); } } void RclMain::eraseSearchHistory() { int rep = QMessageBox::warning( 0, tr("Confirm"), tr("Erasing simple and advanced search history lists, please click Ok to confirm"), QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::NoButton); if (rep == QMessageBox::Ok) { prefs.ssearchHistory.clear(); if (sSearch) sSearch->clearAll(); if (g_advshistory) g_advshistory->clear(); } } void RclMain::exportSimpleSearchHistory() { QFileDialog dialog(0, "Saving simple search history"); dialog.setFileMode(QFileDialog::AnyFile); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setViewMode(QFileDialog::List); QFlags flags = QDir::NoDotAndDotDot|QDir::Files; dialog.setFilter(flags); if (dialog.exec() != QDialog::Accepted) { return; } string path = qs2utf8s(dialog.selectedFiles().value(0)); LOGDEB("Chosen path: " << path << "\n"); std::fstream fp; if (!path_streamopen(path, std::ios::out | std::ios::trunc, fp)) { QMessageBox::warning(0, "Recoll", tr("Could not open/create file")); return; } for (int i = 0; i < prefs.ssearchHistory.count(); i++) { fp << qs2utf8s(prefs.ssearchHistory[i]) << "\n"; } fp.close(); } // Called when the uiprefs dialog is ok'd or the desktop dark/light pref changes void RclMain::setUIPrefs() { LOGDEB("Recollmain::setUIPrefs\n"); populateSideFilters(SFUR_USERCONFIG); ::applyStyle(); emit uiPrefsChanged(); enbSynAction->setDisabled(prefs.synFile.isEmpty()); enbSynAction->setChecked(prefs.synFileEnable); } void RclMain::enableNextPage(bool yesno) { if (!displayingTable) nextPageAction->setEnabled(yesno); } void RclMain::enablePrevPage(bool yesno) { if (!displayingTable) { prevPageAction->setEnabled(yesno); firstPageAction->setEnabled(yesno); } } void RclMain::onSetDescription(QString desc) { m_queryDescription = desc; } QString RclMain::getQueryDescription() { if (!m_source) return ""; return m_queryDescription.isEmpty() ? u8s2qs(m_source->getDescription()) : m_queryDescription; } // Set filter, action style void RclMain::catgFilter(QAction *act) { int id = act->data().toInt(); catgFilter(id); } // User pressed a filter button: set filter params in reslist void RclMain::catgFilter(int id) { LOGDEB("RclMain::catgFilter: id " << id << "\n"); if (id < 0 || id >= int(m_catgbutvec.size())) return; auto fbuttons = m_filtBGRP->buttons(); auto factions = m_filtMN->actions(); switch (prefs.filterCtlStyle) { case PrefsPack::FCS_MN: m_filtCMB->setCurrentIndex(id); fbuttons[id]->setChecked(true); break; case PrefsPack::FCS_CMB: fbuttons[id]->setChecked(true); factions[id]->setChecked(true); break; case PrefsPack::FCS_BT: default: m_filtCMB->setCurrentIndex(id); factions[id]->setChecked(true); } m_catgbutvecidx = id; setFiltSpec(); initiateQuery(); } void RclMain::setFiltSpec() { m_filtspec.reset(); if (nullptr == m_source) return; // "Category" buttons if (m_catgbutvecidx != 0) { string catg = m_catgbutvec[m_catgbutvecidx]; string frag; theconfig->getGuiFilter(catg, frag); m_filtspec.orCrit(DocSeqFiltSpec::DSFS_QLANG, frag); } // Fragments from the fragbuts buttonbox tool if (fragbuts) { vector frags; fragbuts->getfrags(frags); for (const auto& frag : frags) { m_filtspec.orCrit(DocSeqFiltSpec::DSFS_QLANG, frag); } } if (dateFilterCB->isEnabled()) { // The CB is only disabled when we are not in query language mode auto treedirs = idxTreeGetDirs(); if (!treedirs.empty()) { bool first{true}; const std::string prefix{"dir:"}; std::string clause; for (const auto& dir : treedirs) { if (first) { first = false; } else { clause += " OR "; } #ifdef _WIN32 clause += prefix + makeCString(path_slashdrive(dir)); #else clause += prefix + makeCString(dir); #endif } LOGDEB0("Sidefilter dir clause: [" << clause << "]\n"); m_filtspec.orCrit(DocSeqFiltSpec::DSFS_QLANG, clause); } if (dateFilterCB->isChecked()) { QString mindate = minDateFilterDTEDT->date().toString("yyyy-MM-dd"); QString maxdate = maxDateFilterDTEDT->date().toString("yyyy-MM-dd"); std::string clause = std::string("date:") + qs2utf8s(mindate) + "/" + qs2utf8s(maxdate); LOGDEB1("RclMain::setFiltSpec: date clause " << clause << "\n"); m_filtspec.orCrit(DocSeqFiltSpec::DSFS_QLANG, clause); } } #ifdef EXT4_BIRTH_TIME if (birthDateFilterCB->isEnabled()) { // The CB is only disabled when we are not in query language mode auto treedirs = idxTreeGetDirs(); if (!treedirs.empty()) { bool first{true}; const std::string prefix{"dir:"}; std::string clause; for (const auto& dir : treedirs) { if (first) { first = false; } else { clause += " OR "; } #ifdef _WIN32 clause += prefix + makeCString(path_slashdrive(dir)); #else clause += prefix + makeCString(dir); #endif } LOGDEB0("Sidefilter dir clause: [" << clause << "]\n"); m_filtspec.orCrit(DocSeqFiltSpec::DSFS_QLANG, clause); } if (birthDateFilterCB->isChecked()) { QString mindate = minBirthDateFilterDTEDT->date().toString("yyyy-MM-dd"); QString maxdate = maxBirthDateFilterDTEDT->date().toString("yyyy-MM-dd"); std::string clause = std::string("birtime:") + qs2utf8s(mindate) + "/" + qs2utf8s(maxdate); LOGDEB1("RclMain::setFiltSpec: birth date clause " << clause << "\n"); m_filtspec.orCrit(DocSeqFiltSpec::DSFS_QLANG, clause); } } #endif m_source->setFiltSpec(m_filtspec); } void RclMain::onFragmentsChanged() { setFiltSpec(); initiateQuery(); } void RclMain::toggleFullScreen() { if (isFullScreen()) showNormal(); else showFullScreen(); } void RclMain::showEvent(QShowEvent *ev) { sSearch->takeFocus(); QMainWindow::showEvent(ev); } void RclMain::resultsSetFixedGeometry() { const char *cp = getenv("RECOLL_RESULTS_GEOMETRY"); if (nullptr == cp) return; std::vector swh; stringToTokens(cp, swh, "xX"); if (swh.size() != 2) { LOGERR("Bad RECOLL_RESULTS_GEOMETRY: " << cp); return; } int w = atoi(swh[0].c_str()); int h = atoi(swh[1].c_str()); if (w <= 0 || h <= 0) { LOGERR("Bad RECOLL_RESULTS_GEOMETRY: " << cp); return; } resultsLayoutWidget->setParent(nullptr); auto scrollArea = new QScrollArea(sideFiltersSPLT); scrollArea->setObjectName(QString::fromUtf8("scrollArea")); scrollArea->setWidgetResizable(true); reslist->setGeometry(QRect(0, 0, w, h)); QSizePolicy sizePolicy2(QSizePolicy::Fixed, QSizePolicy::Fixed); sizePolicy2.setHorizontalStretch(0); sizePolicy2.setVerticalStretch(0); sizePolicy2.setHeightForWidth(reslist->sizePolicy().hasHeightForWidth()); reslist->setSizePolicy(sizePolicy2); reslist->setMinimumSize(QSize(w, h)); reslist->setMaximumSize(QSize(w, h)); scrollArea->setWidget(resultsLayoutWidget); sideFiltersSPLT->replaceWidget(1, scrollArea); } recoll-1.43.12/qtgui/viewaction_w.h0000644000175000017500000000322115121730573016446 0ustar dockesdockes/* Copyright (C) 2006-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _VIEWACTION_W_H_INCLUDED_ #define _VIEWACTION_W_H_INCLUDED_ #include #include "ui_viewaction.h" class QMouseEvent; class QTableWidget; class ViewAction : public QDialog, public Ui::ViewActionBase { Q_OBJECT public: ViewAction(QWidget* parent = 0) : QDialog(parent) { setupUi(this); init(); } ~ViewAction() {} ViewAction(const ViewAction&) = delete; ViewAction& operator=(const ViewAction&) = delete; void selectMT(const QString& mt); public slots: virtual void editActions(); virtual void onCurrentItemChanged(QTableWidgetItem *, QTableWidgetItem *); virtual void onUseDesktopCBToggled(int); virtual void onSetExceptCBToggled(int); virtual void onSelSameClicked(); virtual void onClose(); private: virtual void init(); virtual void fillLists(); }; #endif /* _VIEWACTION_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/ssearch_w.cpp0000644000175000017500000006664515125756472016316 0ustar dockesdockes/* Copyright (C) 2006-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" // For ENABLE_SEMANTIC #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "log.h" #include "guiutils.h" #include "searchdata.h" #include "ssearch_w.h" #include "textsplit.h" #include "wasatorcl.h" #include "rclhelp.h" #include "xmltosd.h" #include "smallut.h" #include "rcldb.h" #include "recoll.h" #include "scbase.h" #include "base64.h" // If text does not end with space, return last (partial) word and its start offset (>=0) else // return -1 static int getPartialWord(const QString& txt, QString& word) { // Extract last word in text if (txt.isEmpty()) { return -1; } int lstidx = txt.size()-1; // If the input ends with a space or dquote (phrase input), or // dquote+qualifiers, no partial word. if (txt[lstidx] == ' ') { return -1; } int cs = txt.lastIndexOf("\""); if (cs > 0) { bool dquoteToEndNoSpace{true}; for (int i = cs; i <= lstidx; i++) { if (txt[i] == ' ') { dquoteToEndNoSpace = false; break; } } if (dquoteToEndNoSpace) { return -1; } } cs = txt.lastIndexOf(" "); if (cs < 0) cs = 0; else cs++; word = txt.right(txt.size() - cs); return cs; } // Max db term matches fetched from the index static const int maxdbtermmatch = 20; // Visible rows for the completer listview static const int completervisibleitems = 20; void RclCompleterModel::init() { if (!clockPixmap.load(":/images/clock.png") || !interroPixmap.load(":/images/interro.png")) { LOGERR("SSearch: pixmap loading failed\n"); } } int RclCompleterModel::rowCount(const QModelIndex &) const { LOGDEB1("RclCompleterModel::rowCount: " << currentlist.size() << "\n"); return static_cast(currentlist.size()); } int RclCompleterModel::columnCount(const QModelIndex &) const { return 2; } QVariant RclCompleterModel::data(const QModelIndex &index, int role) const { LOGDEB1("RclCompleterModel::data: row: " << index.row() << " role " << role << "\n"); if (role != Qt::DisplayRole && role != Qt::EditRole && role != Qt::DecorationRole) { return QVariant(); } if (index.row() < 0 || index.row() >= int(currentlist.size())) { return QVariant(); } if (index.column() == 0) { if (role == Qt::DecorationRole) { LOGDEB1("RclCompleterModel::data: returning pixmap\n"); return index.row() < firstfromindex ? QVariant(clockPixmap) : QVariant(interroPixmap); } else { LOGDEB1("RclCompleterModel::data: return: " << qs2u8s(currentlist[index.row()].first) << "\n"); return QVariant(currentlist[index.row()].first); } } else if (index.column() == 1 && prefs.showcompleterhitcounts) { if (currentlist[index.row()].second > 0) { return QVariant(QString("%1").arg(currentlist[index.row()].second) + tr(" Hits")); } } return QVariant(); } // Compute possible completion for current search state. Entering a space first requests a history // list. Otherwise, list a partial word against history and index and fill the model void RclCompleterModel::onPartialWord(int tp, const QString& _qtext, const QString& qpartial) { std::string partial = qs2u8s(qpartial); QString qtext = _qtext.trimmed(); bool onlyspace = qtext.isEmpty(); LOGDEB1("RclCompleterModel::onPartialWord: [" << partial << "] onlyspace "<< onlyspace << "\n"); currentlist.clear(); beginResetModel(); if ((prefs.ssearchNoComplete && !onlyspace) || tp == SSearch::SST_FNM) { // Nocomplete: only look at history by entering space // Filename: no completion for now. We'd need to termatch with the right prefix? endResetModel(); return; } int maxhistmatch = prefs.ssearchCompleterHistCnt; int histmatch = 0; // Look for matches between the full entry and the search history // (anywhere in the string) for (int i = 0; i < prefs.ssearchHistory.count(); i++) { LOGDEB1("[" << qs2u8s(prefs.ssearchHistory[i]) << "] contains ["<= maxhistmatch) break; currentlist.push_back({prefs.ssearchHistory[i], -1}); } } firstfromindex = static_cast(currentlist.size()); // Look for Recoll terms beginning with the partial word. If the index is not stripped, only do // this after the partial has at least 2 characters, else the syn/diac/case expansion is too // expensive int mintermsizeforexpand = o_index_stripchars ? 1 : 2; if (qpartial.trimmed().size() >= mintermsizeforexpand && partial.find_first_of("[?*") == std::string::npos) { Rcl::TermMatchResult rclmatches; if (!rcldb->termMatch(Rcl::Db::ET_WILD, "", partial + "*", rclmatches, maxdbtermmatch)) { LOGDEB1("RclCompleterModel: termMatch failed: [" << partial + "*" << "]\n"); } else { LOGDEB1("RclCompleterModel: termMatch cnt: " << rclmatches.entries.size() << '\n'); } for (const auto& entry : rclmatches.entries) { LOGDEB1("RclCompleterModel: match " << entry.term << '\n'); currentlist.push_back({u8s2qs(entry.term), entry.wcf}); } } endResetModel(); QTimer::singleShot(0, m_parent, SLOT(onCompleterShown())); } void SSearch::init() { // See enum in .h and keep in order ! searchTypCMB->addItem(tr("Any term")); searchTypCMB->addItem(tr("All terms")); searchTypCMB->addItem(tr("File name")); searchTypCMB->addItem(tr("Query language")); #ifdef ENABLE_SEMANTIC searchTypCMB->addItem(tr("Semantic")); #endif connect(queryText, SIGNAL(returnPressed()), this, SLOT(startSimpleSearch())); connect(queryText, SIGNAL(textChanged(const QString&)), this, SLOT(searchTextChanged(const QString&))); connect(queryText, SIGNAL(textEdited(const QString&)), this, SLOT(searchTextEdited(const QString&))); connect(clearqPB, SIGNAL(clicked()), queryText, SLOT(clear())); connect(searchPB, SIGNAL(clicked()), this, SLOT(startSimpleSearch())); connect(searchTypCMB, SIGNAL(activated(int)), this, SLOT(onSearchTypeChanged(int))); m_completermodel = new RclCompleterModel(this); m_completer = new QCompleter(m_completermodel, this); auto popup = new QTableView(); popup->setShowGrid(false); popup->setWordWrap(false); popup->horizontalHeader()->hide(); popup->verticalHeader()->hide(); m_completer->setPopup(popup); // We need unfilteredPopupCompletion, else the completer does not work for completing the last // word of a multiword entry (filters against the whole line contents). Tried // setCompletionPrefix() with no success. m_completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion); m_completer->setFilterMode(Qt::MatchContains); m_completer->setCaseSensitivity(Qt::CaseInsensitive); m_completer->setMaxVisibleItems(completervisibleitems); queryText->setCompleter(m_completer); m_completer->popup()->installEventFilter(this); queryText->installEventFilter(this); connect(this, SIGNAL(partialWord(int, const QString&, const QString&)), m_completermodel, SLOT(onPartialWord(int,const QString&,const QString&))); connect(m_completer, SIGNAL(activated(const QString&)), this, SLOT(onCompletionActivated(const QString&))); connect(historyPB, SIGNAL(clicked()), this, SLOT(onHistoryClicked())); int searchtype = prefs.ssearchTypSav ? prefs.ssearchTyp : SSearch::SST_LANG; onSearchTypeChanged(searchtype); setupButtons(); onNewShortcuts(); connect(&SCBase::scBase(), SIGNAL(shortcutsChanged()),this, SLOT(onNewShortcuts())); } SSearch::SSearchType SSearch::getSearchType() { return (SSearchType)searchTypCMB->currentIndex(); } void SSearch::onNewShortcuts() { SETSHORTCUT(this, "ssearch:197", tr("Simple search"), tr("History"), "Ctrl+H", m_histsc, onHistoryClicked); } void SSearch::setupButtons() { if (prefs.noClearSearch) { clearqPB->hide(); searchPB->hide(); queryText->setClearButtonEnabled(true); } else { clearqPB->show(); searchPB->show(); queryText->setClearButtonEnabled(false); } if (prefs.noSSTypCMB) { searchTypCMB->hide(); } else { searchTypCMB->show(); } } void SSearch::takeFocus() { LOGDEB1("SSearch: take focus\n"); queryText->setFocus(Qt::ShortcutFocusReason); // If the focus was already in the search entry, the text is not selected. // Do it for consistency queryText->selectAll(); } QString SSearch::currentText() { return queryText->text(); } void SSearch::clearAll() { queryText->clear(); } void SSearch::onCompleterShown() { QCompleter *completer = queryText->completer(); if (!completer) { LOGDEB0("SSearch::onCompleterShown: no completer\n"); return; } QAbstractItemView *popup = completer->popup(); if (!popup) { LOGDEB0("SSearch::onCompleterShown: no popup\n"); return; } auto tb = (QTableView*)popup; tb->resizeColumnToContents(0); tb->resizeRowsToContents(); QVariant data = popup->model()->data(popup->currentIndex()); if (!data.isValid()) { LOGDEB0("SSearch::onCompleterShown: data not valid\n"); return; } // Test if the completer text begins with the current input. QString text = data.toString(); if (text.lastIndexOf(queryText->text()) != 0) { return; } LOGDEB0("SSearch::onCompleterShown:" << " current [" << qs2utf8s(currentText()) << "] saved [" << qs2utf8s(m_savedEditText) << "] popup [" << qs2utf8s(text) << "]\n"); if (!prefs.ssearchCompletePassive) { // We append the completion part to the end of the current input, line, and select it so // that the user has a clear indication of what will happen if they type Enter. int pos = queryText->cursorPosition(); int len = text.size() - currentText().size(); queryText->setText(text); queryText->setCursorPosition(pos); queryText->setSelection(pos, len); } } // This is to avoid that if the user types Backspace or Del while we have inserted / selected the // current completion, the lineedit text goes back to what it was, the completion fires, and it // looks like nothing was typed. Disable the completion after Del or Backspace is typed. bool SSearch::eventFilter(QObject *target, QEvent *event) { Q_UNUSED(target); LOGDEB1("SSearch::eventFilter: event\n"); if (event->type() != QEvent::KeyPress) { return false; } QKeyEvent *keyEvent = (QKeyEvent *)event; LOGDEB1("SSearch::eventFilter: KeyPress event: " << keyEvent->key() << " Target " << target << " popup "<popup() << " lineedit "<key() == Qt::Key_Backspace || keyEvent->key()==Qt::Key_Delete) { LOGDEB("SSearch::eventFilter: backspace/delete\n"); queryText->setCompleter(nullptr); return false; } else if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return) { if (prefs.ssearchCompletePassive && queryText->completer() && queryText->completer()->popup() && queryText->completer()->popup()->isVisible()) { queryText->completer()->popup()->hide(); restoreText(true); return true; } } else if (nullptr == queryText->completer() && m_completer) { queryText->setCompleter(m_completer); } return false; } // onCompletionActivated() is called when an entry is selected in the popup, but the edit text is // going to be replaced in any case if there is a current match (we can't prevent it in the // signal). If there is no match (e.g. the user clicked the history button and selected an entry), // the query text will not be set. So: // - We set the query text to the popup activation value in all cases // - We schedule a callback to set the text to what we want (which is the concatenation of the user // entry before the current partial word and the pop up data. // - Note that a history click will replace a current partial word, so that the effect is different // if there is a space at the end of the entry or not: pure concatenation vs replacement of the // last (partial) word. void SSearch::restoreText(bool startsearch) { LOGDEB("SSearch::restoreText: ss " << startsearch << " savedEdit: " << qs2u8s(m_savedEditText) << '\n'); if (!m_savedEditText.trimmed().isEmpty()) { // If the popup text begins with the saved text, just let it replace if (currentText().lastIndexOf(m_savedEditText) != 0) { queryText->setText(m_savedEditText.trimmed() + " " + currentText()); } m_savedEditText = ""; } queryText->setFocus(); if (startsearch || prefs.ssearchStartOnComplete) { QTimer::singleShot(0, this, SLOT(startSimpleSearch())); } } void SSearch::onCompletionActivated(const QString& text) { LOGDEB("SSearch::onCompletionActivated: queryText [" << qs2u8s(currentText()) << "] text [" << qs2u8s(text) << "]\n"); queryText->setText(text); QTimer::singleShot(0, this, SLOT(restoreText())); } void SSearch::onHistoryClicked() { if (m_completermodel) { queryText->setCompleter(m_completer); m_completermodel->onPartialWord(SST_LANG, "", ""); queryText->completer()->complete(); } } // Connected to queryText::textEdited void SSearch::searchTextEdited(const QString& text) { LOGDEB1("SSearch::searchTextEdited: text [" << qs2u8s(text) << "]\n"); QString pword; int cs = getPartialWord(currentText(), pword); int tp = getSearchType(); m_savedEditText = text.left(cs); LOGDEB1("SSearch::searchTextEdited: cs " <= 0) { emit partialWord(tp, currentText(), pword); } else { emit partialWord(tp, currentText(), " "); } } void SSearch::searchTextChanged(const QString& text) { LOGDEB1("SSearch::searchTextChanged: text [" << qs2u8s(text) << "]\n"); if (text.isEmpty()) { searchPB->setEnabled(false); clearqPB->setEnabled(false); queryText->setFocus(); emit clearSearch(); } else { searchPB->setEnabled(true); clearqPB->setEnabled(true); } } void SSearch::onSearchTypeChanged(int typ) { LOGDEB1("SSearch::onSearchTypeChanged: type now " << typ << "\n"); // This may come from the menus or the combobox. Ensure that things are in sync. No loop because // we are connected to combobox or menu activated(), not currentIndexChanged() searchTypCMB->setCurrentIndex(typ); // Adjust context help if (typ == SST_LANG) { HelpClient::installMap(qs2u8s(objectName()), "RCL.SEARCH.LANG"); } else { HelpClient::installMap(qs2u8s(objectName()), "RCL.SEARCH.GUI.SIMPLE"); } // Also fix tooltips switch (typ) { case SST_LANG: queryText->setToolTip( // Do not modify the text here, test with the // sshelp/qhelp.html file and a browser, then use // sshelp/helphtmltoc.sh to turn to code and insert here tr("") + tr("

Query language cheat-sheet. In doubt: click Show Query Details. ") + tr("You should really look at the manual (F1)

") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("") + tr("
WhatExamples
Andone two   one AND two   one && two
Orone OR two   one || two
Complex boolean. OR has priority, use parentheses ") + tr("where needed(one AND two) OR three
Not-term
Phrase\"pride and prejudice\"
Ordered proximity (slack=1)\"pride prejudice\"o1
Unordered proximity (slack=1)\"prejudice pride\"po1
Unordered prox. (default slack=10)\"prejudice pride\"p
Capitalize to suppress stem expansionFloor
Field-specificauthor:austen  title:prejudice
AND inside field (no order)author:jane,austen
OR inside fieldauthor:austen/bronte
Field namestitle/subject/caption  author/from
recipient/to  filename  ext
Directory path filterdir:/home/me  dir:doc
MIME type filtermime:text/plain mime:video/*
Date intervalsdate:2018-01-01/2018-31-12
") + tr("date:2018  date:2018-01-01/P12M
Sizesize>100k size<1M
") ); break; case SST_FNM: queryText->setToolTip(tr("Enter file name wildcard expression.")); break; case SST_ANY: case SST_ALL: default: queryText->setToolTip(tr("Enter search terms here.")); } emit ssearchTypeChanged(typ); } void SSearch::startSimpleSearch() { // Avoid a double search if we are fired on CR and the completer is active if (queryText->completer() && queryText->completer()->popup()->isVisible() && !queryText->completer()->currentCompletion().isEmpty()) { return; } auto u8 = qs2u8s(queryText->text()); trimstring(u8); if (u8.length() == 0) return; if (!startSimpleSearch(u8)) return; // Search terms history. // New text at the front and erase any older identical entry QString txt = currentText().trimmed(); if (txt.isEmpty()) return; if (prefs.historysize) { prefs.ssearchHistory.insert(0, txt); prefs.ssearchHistory.removeDuplicates(); } if (prefs.historysize >= 0) { for (int i = (int)prefs.ssearchHistory.count(); i > prefs.historysize; i--) { prefs.ssearchHistory.removeLast(); } } } void SSearch::setPrefs() { } std::string SSearch::asXML() { return m_xml; } bool SSearch::startSimpleSearch(const std::string& u8, int maxexp) { LOGDEB("SSearch::startSimpleSearch(" << u8 << ")\n"); auto stemlang = prefs.stemlang(); std::ostringstream xml; xml << "\n"; xml << " " << stemlang << "\n"; xml << " " << base64_encode(u8) << "\n"; auto tp = getSearchType(); std::shared_ptr sdata; if (tp == SST_LANG) { xml << " QL\n"; std::string reason; if (prefs.autoSuffsEnable) { sdata = wasaStringToRcl(theconfig, stemlang, u8, reason, qs2u8s(prefs.autoSuffs)); if (!prefs.autoSuffs.isEmpty()) { xml << " " << qs2u8s(prefs.autoSuffs) << "\n"; } } else { sdata = wasaStringToRcl(theconfig, stemlang, u8, reason); } if (!sdata) { QMessageBox::warning(0, "Recoll", tr("Bad query string") + ": " + u8s2qs(reason)); return false; } } else { sdata = std::make_shared(Rcl::SCLT_OR, stemlang); if (!sdata) { QMessageBox::warning(0, "Recoll", tr("Out of memory")); return false; } Rcl::SearchDataClause *clp = 0; if (tp == SST_FNM) { xml << " FN\n"; clp = new Rcl::SearchDataClauseFilename(u8); } else { // AND/OR modes have no subsearches so it's ok to set the no wild cards flag on the top // and only SearchData object if (prefs.ignwilds) sdata->setNoWildExp(true); // ANY or ALL, several words. if (tp == SST_ANY) { xml << " OR\n"; clp = new Rcl::SearchDataClauseSimple(Rcl::SCLT_OR, u8); } else if (tp == SST_ALL) { xml << " AND\n"; clp = new Rcl::SearchDataClauseSimple(Rcl::SCLT_AND, u8); #ifdef ENABLE_SEMANTIC } else if (tp == SST_SEM) { xml << " SEM\n"; clp = new Rcl::SearchDataClauseSimple(Rcl::SCLT_AND, u8); #endif // SEMANTIC } else { std::cerr << "UNEXPECTED SEARCH TYPE\n"; abort(); } } sdata->addClause(clp); } if (tp != SST_SEM) { if (prefs.ssearchAutoPhrase && rcldb) { xml << " \n"; sdata->maybeAddAutoPhrase(*rcldb, prefs.ssearchAutoPhraseThreshPC / 100.0); } if (maxexp != -1) { sdata->setMaxExpand(maxexp); } } for (const auto& dbdir : prefs.activeExtraDbs) { xml << " " << base64_encode(dbdir) << ""; } xml << "\n"; m_xml = xml.str(); LOGDEB("SSearch::startSimpleSearch:xml:[" << m_xml << "]\n"); emit setDescription(u8s2qs(u8)); emit startSearch(sdata, true); return true; } bool SSearch::checkExtIndexes(const std::vector& dbs) { std::string reason; if (!maybeOpenDb(reason, false)) { QMessageBox::critical(0, "Recoll", tr("Can't open index") + u8s2qs(reason)); return false; } if (!rcldb->setExtraQueryDbs(dbs)) { return false; } return true; } bool SSearch::fromXML(const SSearchDef& fxml) { std::string asString; std::set cur; std::set stored; // Retrieve current list of stemlangs. prefs returns a // space-separated list Warn if stored differs from current, // but don't change the latter. stringToStrings(prefs.stemlang(), cur); stored = std::set(fxml.stemlangs.begin(), fxml.stemlangs.end()); stringsToString(fxml.stemlangs, asString); if (cur != stored) { QMessageBox::warning( 0, "Recoll", tr("Stemming languages for stored query: ") + QString::fromUtf8(asString.c_str()) + tr(" differ from current preferences (kept)")); } // Same for autosuffs stringToStrings(qs2u8s(prefs.autoSuffs), cur); stored = std::set(fxml.autosuffs.begin(), fxml.autosuffs.end()); stringsToString(fxml.stemlangs, asString); if (cur != stored) { QMessageBox::warning( 0, "Recoll", tr("Auto suffixes for stored query: ") + QString::fromUtf8(asString.c_str()) + tr(" differ from current preferences (kept)")); } if (!checkExtIndexes(fxml.extindexes)) { stringsToString(fxml.extindexes, asString); QMessageBox::warning( 0, "Recoll", tr("Could not restore external indexes for stored query:
") + (rcldb ? u8s2qs(rcldb->getReason()) : tr("???")) + QString("
") + tr("Using current preferences.")); std::string s; maybeOpenDb(s, true); } else { prefs.useTmpActiveExtraDbs = true; prefs.tmpActiveExtraDbs = fxml.extindexes; } if (prefs.ssearchAutoPhrase && !fxml.autophrase) { QMessageBox::warning( 0, "Recoll", tr("Autophrase is set but it was unset for stored query")); } else if (!prefs.ssearchAutoPhrase && fxml.autophrase) { QMessageBox::warning( 0, "Recoll", tr("Autophrase is unset but it was set for stored query")); } setSearchString(QString::fromUtf8(fxml.text.c_str())); // We used to use prefs.ssearchTyp here. Not too sure why? // Minimize user surprise factor ? Anyway it seems cleaner to // restore the saved search type searchTypCMB->setCurrentIndex(fxml.mode); return true; } void SSearch::setSearchString(const QString& txt) { queryText->setText(txt); } bool SSearch::hasSearchString() { return !currentText().isEmpty(); } // Add term to simple search. Term comes out of double-click in reslist or preview. // It would probably be better to cleanup in preview.ui.h and reslist.cpp and do the proper html // stuff in the latter case (which is different because it format is explicit richtext instead of // auto as for preview, needed because it's built by fragments?). static const char* punct = " \t()<>\"'[]{}!^*.,:;\n\r"; void SSearch::addTerm(QString term) { auto t = qs2u8s(term); LOGDEB("SSearch::AddTerm: [" << t << "]\n"); std::string::size_type pos = t.find_last_not_of(punct); if (pos == std::string::npos) return; t = t.substr(0, pos+1); pos = t.find_first_not_of(punct); if (pos != std::string::npos) t = t.substr(pos); if (t.empty()) return; term = u8s2qs(t); QString text = currentText(); text += " " + term; queryText->setText(text); } void SSearch::onWordReplace(const QString& o, const QString& n) { LOGDEB("SSearch::onWordReplace: o [" << qs2u8s(o) << "] n [" << qs2u8s(n) << "]\n"); QString txt = currentText(); QRegularExpression exp(QString("\\b") + o + QString("\\b"), QRegularExpression::CaseInsensitiveOption); txt.replace(exp, n); queryText->setText(txt); Qt::KeyboardModifiers mods = QApplication::keyboardModifiers(); if (mods == Qt::NoModifier) startSimpleSearch(); } void SSearch::setAnyTermMode() { searchTypCMB->setCurrentIndex(SST_ANY); } recoll-1.43.12/qtgui/spell.ui0000644000175000017500000000764114753313315015270 0ustar dockesdockes SpellBase 0 0 520 465 0 0 100 100 Term Explorer 100 0 Match Case Accents false Qt::NoFocus &Expand Alt+E true Qt::NoFocus &Close Alt+C 7 No db info. 2 2 false false baseWordLE expandPB dismissPB stemLangCMB recoll-1.43.12/qtgui/rtitool.h0000644000175000017500000000255615121730573015456 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _RTITOOL_W_H_INCLUDED_ #define _RTITOOL_W_H_INCLUDED_ #include #include "ui_rtitool.h" class QPushButton; class RTIToolW : public QDialog, public Ui::RTIToolW { Q_OBJECT public: RTIToolW(QWidget * parent = 0) : QDialog(parent) { setupUi(this); init(); } public slots: #ifdef _WIN32 void sesclicked(bool) {} void accept() {} private: void init() {} #else void sesclicked(bool); void accept(); private: void init(); std::string getautostartfn(); std::string confignick; #endif }; #endif /* _RTITOOL_W_H_INCLUDED_ */ recoll-1.43.12/qtgui/webcache.cpp0000644000175000017500000002771715121730573016064 0ustar dockesdockes/* Copyright (C) 2016-2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "recoll.h" #include "webcache.h" #include "webstore.h" #include "circache.h" #include "conftree.h" #include "rclmain_w.h" #include "smallut.h" #include "log.h" #include "copyfile.h" using namespace std; class CEnt { public: CEnt(const string& ud, const string& ur, const string& mt) : udi(ud), url(ur), mimetype(mt) { } string udi; string url; string mimetype; string date; string size; // Only useful in the filtered list. Corresponding index in the // complete one int allidx{-1}; }; class WebcacheModelInternal { public: std::unique_ptr cache; // The complete list vector all; // The entries matching the current filter (displayed) vector disp; }; WebcacheModel::WebcacheModel(QObject *parent) : QAbstractTableModel(parent), m(new WebcacheModelInternal()) { } WebcacheModel::~WebcacheModel() { delete m; } void WebcacheModel::reload() { int idx = 0; m->all.clear(); m->disp.clear(); if (!(m->cache = std::unique_ptr(new WebStore(theconfig)))) { goto out; } emit headerChanged(m->cache.get()); bool eof; m->cache->cc()->rewind(eof); while (!eof) { string udi, sdic; m->cache->cc()->getCurrent(udi, sdic); if (!udi.empty()) { ConfSimple dic(sdic); string mime, url, mtime, fbytes; dic.get("mimetype", mime); dic.get("url", url); dic.get("fmtime", mtime); dic.get("fbytes", fbytes); CEnt entry(udi, url, mime); entry.allidx = idx++; if (!mtime.empty()) { time_t clck = atoll(mtime.c_str()); entry.date = utf8datestring("%c", localtime(&clck)); } if (!fbytes.empty()) { entry.size = displayableBytes(atoll(fbytes.c_str())); } m->all.push_back(entry); m->disp.push_back(entry); } if (!m->cache->cc()->next(eof)) break; } out: emit dataChanged(createIndex(0,0), createIndex(1, static_cast(m->all.size()))); } bool WebcacheModel::deleteIdx(unsigned int idx) { if (idx > m->disp.size() || !m->cache) return false; return m->cache->cc()->erase(m->disp[idx].udi, true); } string WebcacheModel::getURL(unsigned int idx) { if (idx > m->disp.size() || !m->cache) return string(); return m->disp[idx].url; } string WebcacheModel::getData(unsigned int idx) { LOGDEB0("WebcacheModel::getData: idx " << idx << "\n"); if (idx > m->disp.size() || !m->cache) { LOGERR("WebcacheModel::getData: idx > m->disp.size()" << m->disp.size() << "\n"); return string(); } // Get index in the "all" list auto allidx = m->disp[idx].allidx; LOGDEB0("WebcacheModel::getData: allidx " << allidx << "\n"); if (allidx < 0 || allidx >= int(m->all.size())) { LOGERR("WebcacheModel::getData: allidx > m->all.size()" << m->all.size() << "\n"); return string(); } string udi = m->all[allidx].udi; // Compute the instance for this udi (in case we are configured to // not erase older instances). Valid instance values begin at 1 int instance = 0; for (unsigned int i = 0; i <= idx; i++) { if (m->all[i].udi == udi) { instance++; } } string dic, data; m->cache->cc()->get(udi, dic, &data, instance); LOGDEB0("WebcacheModel::getData: got " << data.size() << " bytes of data\n"); return data; } int WebcacheModel::rowCount(const QModelIndex&) const { //qDebug() << "WebcacheModel::rowCount(): " << m->disp.size(); return int(m->disp.size()); } int WebcacheModel::columnCount(const QModelIndex&) const { //qDebug() << "WebcacheModel::columnCount()"; return 4; } QVariant WebcacheModel::headerData (int col, Qt::Orientation orientation, int role) const { // qDebug() << "WebcacheModel::headerData()"; if (orientation != Qt::Horizontal || role != Qt::DisplayRole) { return QVariant(); } switch (col) { case 0: return QVariant(tr("MIME")); case 1: return QVariant(tr("Date")); case 2: return QVariant(tr("Size")); case 3: return QVariant(tr("URL")); default: return QVariant(); } } QVariant WebcacheModel::data(const QModelIndex& index, int role) const { //qDebug() << "WebcacheModel::data()"; Q_UNUSED(index); if (role != Qt::DisplayRole) { return QVariant(); } int row = index.row(); if (row < 0 || row >= int(m->disp.size())) { return QVariant(); } switch (index.column()) { case 0: return QVariant(u8s2qs(m->disp[row].mimetype)); case 1: return QVariant(u8s2qs(m->disp[row].date)); case 2: return QVariant(u8s2qs(m->disp[row].size)); case 3: return QVariant(u8s2qs(m->disp[row].url)); default: return QVariant(); } } void WebcacheModel::setSearchFilter(const QString& _txt) { SimpleRegexp re(qs2utf8s(_txt), SimpleRegexp::SRE_NOSUB|SimpleRegexp::SRE_ICASE); m->disp.clear(); for (unsigned int i = 0; i < m->all.size(); i++) { if (re(m->all[i].url)) { m->disp.push_back(m->all[i]); m->disp.back().allidx = i; } else { LOGDEB1("WebcacheModel::filter: match failed. exp" << qs2utf8s(_txt) << "data" << m->all[i].url); } } emit dataChanged(createIndex(0,0), createIndex(1, static_cast(m->all.size()))); } static const int ROWHEIGHTPAD = 2; static const char *cwnm = "/Recoll/prefs/webcachecolw"; static const char *wwnm = "/Recoll/prefs/webcachew"; static const char *whnm = "/Recoll/prefs/webcacheh"; static const QKeySequence closeKS(Qt::ControlModifier | Qt::Key_W); WebcacheEdit::WebcacheEdit(RclMain *parent) : QDialog(parent), m_recoll(parent), m_modified(false) { //qDebug() << "WebcacheEdit::WebcacheEdit()"; setupUi(this); m_model = new WebcacheModel(this); tableview->setModel(m_model); tableview->setSelectionBehavior(QAbstractItemView::SelectRows); tableview->setSelectionMode(QAbstractItemView::ExtendedSelection); tableview->setContextMenuPolicy(Qt::CustomContextMenu); tableview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QSettings settings; QStringList wl; wl = settings.value(cwnm).toStringList(); QHeaderView *header = tableview->horizontalHeader(); if (header) { if (int(wl.size()) == header->count()) { for (int i = 0; i < header->count(); i++) { header->resizeSection(i, wl[i].toInt()); } } } connect(header, SIGNAL(sectionResized(int,int,int)), this, SLOT(saveColState())); header = tableview->verticalHeader(); if (header) { QFontMetricsF fm(QApplication::font(header)); header->setDefaultSectionSize(fm.height() + ROWHEIGHTPAD); } int width = settings.value(wwnm, 0).toInt(); int height = settings.value(whnm, 0).toInt(); if (width && height) { resize(QSize(width, height)); } connect(searchLE, SIGNAL(textEdited(const QString&)), m_model, SLOT(setSearchFilter(const QString&))); connect(new QShortcut(closeKS, this), SIGNAL (activated()), this, SLOT (close())); connect(tableview, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(createPopupMenu(const QPoint&))); connect(m_model, SIGNAL(headerChanged(WebStore*)), this, SLOT(onHeaderChanged(WebStore*))); m_model->reload(); } void WebcacheEdit::onHeaderChanged(WebStore *ws) { headerInfoLBL->setText(tr("Maximum size %1 (Index config.). Current size %2. Write position %3.") .arg(u8s2qs(displayableBytes(ws->cc()->maxsize())), u8s2qs(displayableBytes(ws->cc()->size())), u8s2qs(displayableBytes(ws->cc()->writepos()))) ); } void WebcacheEdit::createPopupMenu(const QPoint& pos) { int selsz = tableview->selectionModel()->selectedRows().size(); if (selsz <= 0) { return; } QMenu *popup = new QMenu(this); if (selsz == 1) { popup->addAction(tr("Copy URL"), this, SLOT(copyURL())); popup->addAction(tr("Save to File"), this, SLOT(saveToFile())); } if (m_recoll) { RclMain::IndexerState ixstate = m_recoll->indexerState(); switch (ixstate) { case RclMain::IXST_UNKNOWN: QMessageBox::warning(0, "Recoll",tr("Unknown indexer state. Can't edit webcache file.")); break; case RclMain::IXST_RUNNINGMINE: case RclMain::IXST_RUNNINGNOTMINE: QMessageBox::warning(0, "Recoll", tr("Indexer is running. Can't edit webcache file.")); break; case RclMain::IXST_NOTRUNNING: popup->addAction(tr("Delete selection"), this, SLOT(deleteSelected())); break; } } popup->popup(tableview->mapToGlobal(pos)); } void WebcacheEdit::deleteSelected() { QModelIndexList selection = tableview->selectionModel()->selectedRows(); for (int i = 0; i < selection.size(); i++) { if (m_model->deleteIdx(selection[i].row())) { m_modified = true; } } m_model->reload(); m_model->setSearchFilter(searchLE->text()); tableview->clearSelection(); } void WebcacheEdit::copyURL() { QModelIndexList selection = tableview->selectionModel()->selectedRows(); if (selection.size() != 1) return; const string& url = m_model->getURL(selection[0].row()); if (!url.empty()) { QString qurl = path2qs(url); QApplication::clipboard()->setText(qurl, QClipboard::Selection); QApplication::clipboard()->setText(qurl, QClipboard::Clipboard); } } void WebcacheEdit::saveToFile() { QModelIndexList selection = tableview->selectionModel()->selectedRows(); if (selection.size() != 1) return; string data = m_model->getData(selection[0].row()); QString qfn = myGetFileName(false, "Saving webcache data"); if (qfn.isEmpty()) return; string reason; if (!stringtofile(data, qs2utf8s(qfn).c_str(), reason)) { QMessageBox::warning(0, "Recoll", tr("File creation failed: ") + u8s2qs(reason)); } } void WebcacheEdit::saveColState() { //qDebug() << "void WebcacheEdit::saveColState()"; QHeaderView *header = tableview->horizontalHeader(); QStringList newwidths; for (int vi = 0; vi < header->count(); vi++) { int li = header->logicalIndex(vi); newwidths.push_back(std::to_string(header->sectionSize(li)).c_str()); } QSettings settings; settings.setValue(cwnm, newwidths); } void WebcacheEdit::closeEvent(QCloseEvent *event) { if (m_modified) { QMessageBox::information(0, "Recoll", tr("Webcache was modified, you will need " "to run the indexer after closing this window.")); } if (!isFullScreen()) { QSettings settings; settings.setValue(wwnm, width()); settings.setValue(whnm, height()); } event->accept(); } recoll-1.43.12/qtgui/pv_search.cpp0000644000175000017500000002115215121730573016260 0ustar dockesdockes/* Copyright (C) 2005-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // For choosing the preview draw engine #include "autoconfig.h" #include "preview_w.h" #include #include "log.h" #include "recoll.h" #include "preview_plaintorich.h" #include "guiutils.h" #include "rclwebpage.h" #include "chrono.h" // Make an attempt at trimming wildcard exprs at both ends of string static void trimwildcards(std::string& elt) { if (elt.empty()) return; std::string::size_type initsize; do { initsize = elt.size(); // Trim wildcard chars. trimstring(elt, " *?"); // Trim wildcard char classes if (elt.size() && elt.back() == ']') { std::string::size_type offs = elt.find_last_of("["); if (offs != std::string::npos) { elt = elt.substr(0, offs); if (elt.size() && elt.back() == '[') { elt.erase(elt.end()-1); } } } if (elt.size() && elt.front() == '[') { std::string::size_type offs = elt.find_first_of("]"); if (offs != std::string::npos) { elt.erase(0, offs+1); } } } while (elt.size() && elt.size() != initsize); } void Preview::initSTermWalk() { for (const auto& ugroup : m_hData.ugroups) { QString s; for (auto elt : ugroup) { trimwildcards(elt); if (!elt.empty()) { if (!s.isEmpty()) { s.append(" "); } s.append(u8s2qs(elt)); } } s = s.trimmed(); searchTextCMB->addItem(s); } searchTextCMB->setCompleter(0); } void Preview::searchTextChanged(const QString & text) { LOGDEB("Preview::searchTextChanged:(" << qs2utf8s(text) << ") current: ("<< qs2utf8s(searchTextCMB->currentText()) << ") currentindex " << searchTextCMB->currentIndex() << "\n"); if (!searchTextCMB->itemText(searchTextCMB->currentIndex()).compare(text)) { // Then we assume that the text was set by selecting in the // combobox There does not seem to be another way to // discriminate select and hand edit. Note that the // activated() signal is called *after* the editTextChanged() // one, so it is useless. m_searchTextFromIndex = searchTextCMB->currentIndex(); doSearch("", false, false); } else { m_searchTextFromIndex = -1; if (text.isEmpty()) { m_dynSearchActive = false; clearPB->setEnabled(false); } else { m_dynSearchActive = true; clearPB->setEnabled(true); doSearch(text, false, false); } } } void Preview::walkAnchors(PreviewTextEdit *edit, bool reverse) { if (!edit->m_plaintorich->haveAnchors()) { LOGDEB("NO ANCHORS\n"); return; } // The combobox indices are equal to the search ugroup indices in hldata, that's how we built // the list. int anchornum; if (reverse) { anchornum = edit->m_plaintorich->prevAnchorNum(m_searchTextFromIndex); } else { anchornum = edit->m_plaintorich->nextAnchorNum(m_searchTextFromIndex); } auto totanchors = edit->m_plaintorich->anchorCount(m_searchTextFromIndex); QString txt = QString("%1/%2").arg(anchornum).arg(totanchors); hitIndicatorLBL->setText(txt); QString aname = edit->m_plaintorich->curAnchorName(); #ifdef PREVIEW_TEXTBROWSER LOGDEB("Calling scrollToAnchor(" << qs2utf8s(aname) << ")\n"); edit->scrollToAnchor(aname); // Position the cursor at the anchor (top of viewport) so that searches start from here QTextCursor cursor = edit->cursorForPosition(QPoint(0, 0)); edit->setTextCursor(cursor); #else LOGDEB1("Highlighting anchor name " << qs2utf8s(aname) << "\n"); std::string sjs = R"-( var elements = document.getElementsByClassName('rclhighlight'); for (let i = 0; i < elements.length; i++) { elements.item(i).classList.remove('rclhighlight'); } var element = document.getElementById('%1'); if (element) { element.classList.add('rclhighlight'); element.scrollIntoView(); var style = window.getComputedStyle(element, null).getPropertyValue('font-size'); var fontSize = parseFloat(style); window.scrollBy(0,-%2 * fontSize); } )-"; QString js = QString::fromUtf8(sjs.c_str()).arg(aname).arg(prefs.previewLinesOverAnchor); LOGDEB2("Running JS: " << qs2utf8s(js) << "\n"); #if defined(PREVIEW_WEBKIT) edit->page()->mainFrame()->evaluateJavaScript(js); #elif defined(PREVIEW_WEBENGINE) edit->page()->runJavaScript(js); #endif #endif // !TEXTBROWSER } // Perform text search. If next is true, we look for the next match of the current search, trying to // advance and possibly wrapping around. If next is false, the search string has been modified, we // search for the new string, starting from the current position void Preview::doSearch(const QString &_text, bool next, bool reverse, bool wordOnly) { LOGDEB0("Preview::doSearch: text [" << qs2utf8s(_text) << "] idx " << m_searchTextFromIndex << " next " << next << " rev " << reverse << " word " << wordOnly << "\n"); bool matchCase = casematchCB->isChecked(); PreviewTextEdit *edit = currentEditor(); if (edit == 0) { LOGERR("Preview::doSearch: no current editor\n"); // ?? return; } QString text = _text; // Are we walking hit lists ? if (text.isEmpty() || m_searchTextFromIndex != -1) { walkAnchors(edit, reverse); return; } // Performing incremental text search hitIndicatorLBL->clear(); #ifdef PREVIEW_TEXTBROWSER // If next is false, the user added characters to the current search string. We need to reset // the cursor position to the start of the previous match, else incremental search is going to // look for the next occurrence instead of trying to lenghten the current match if (!next) { QTextCursor cursor = edit->textCursor(); cursor.setPosition(cursor.anchor(), QTextCursor::KeepAnchor); edit->setTextCursor(cursor); } Chrono chron; LOGDEB("Preview::doSearch: first find call\n"); // FindFlags is a QFlags class with default constructor to empty. QTextDocument::FindFlags flags; if (reverse) flags |= QTextDocument::FindBackward; if (wordOnly) flags |= QTextDocument::FindWholeWords; if (matchCase) flags |= QTextDocument::FindCaseSensitively; bool found = edit->find(text, flags); LOGDEB("Preview::doSearch: first find call return: found " << found << " " << chron.secs() << " S\n"); // If not found, try to wrap around. if (!found) { LOGDEB("Preview::doSearch: wrapping around\n"); if (reverse) { edit->moveCursor (QTextCursor::End); } else { edit->moveCursor (QTextCursor::Start); } LOGDEB("Preview::doSearch: 2nd find call\n"); chron.restart(); found = edit->find(text, flags); LOGDEB("Preview::doSearch: 2nd find call return found " << found << " " << chron.secs() << " S\n"); } if (found) { m_canBeep = true; } else { if (m_canBeep && !prefs.noBeeps) QApplication::beep(); m_canBeep = false; } #else WEBPAGE::FindFlags flags; if (reverse) flags |= WEBPAGE::FindBackward; if (matchCase) flags |= WEBPAGE::FindCaseSensitively; edit->findText(text, flags); #endif // !TEXTBROWSER LOGDEB("Preview::doSearch: return\n"); } void Preview::nextPressed() { LOGDEB2("Preview::nextPressed\n"); doSearch(searchTextCMB->currentText(), true, false); } void Preview::prevPressed() { LOGDEB2("Preview::prevPressed\n"); doSearch(searchTextCMB->currentText(), true, true); } recoll-1.43.12/qtgui/ptrans_w.cpp0000644000175000017500000001162215121730573016144 0ustar dockesdockes/* Copyright (C) 2006-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "recoll.h" #include "guiutils.h" #include "conftree.h" #include "ptrans_w.h" void PTransEdit::init(const std::string& dbdir) { auto initdbdir = path_canon(dbdir); connect(transTW, SIGNAL(itemDoubleClicked(QTableWidgetItem *)), this, SLOT(onItemDoubleClicked(QTableWidgetItem *))); connect(cancelPB, SIGNAL(clicked()), this, SLOT(close())); connect(savePB, SIGNAL(clicked()), this, SLOT(savePB_clicked())); connect(addPB, SIGNAL(clicked()), this, SLOT(addPB_clicked())); connect(delPB, SIGNAL(clicked()), this, SLOT(delPB_clicked())); connect(transTW, SIGNAL(itemSelectionChanged()), this, SLOT(transTW_itemSelectionChanged())); connect(whatIdxCMB, SIGNAL(currentTextChanged(const QString&)), this, SLOT(curIdxChanged(const QString&))); QStringList labels(tr("Path in index")); labels.push_back(tr("Translated path")); transTW->setHorizontalHeaderLabels(labels); resize(QSize(640, 300).expandedTo(minimumSizeHint())); // Initialize the combobox with the list of extra indexes auto dbsorted = prefs.allExtraDbs; dbsorted.push_back(theconfig->getDbDir()); for (auto& dir: dbsorted) { dir = path_canon(dir); } std::sort(dbsorted.begin(), dbsorted.end(), [] (const std::string& l, const std::string& r) {return r < l;}); for (const auto& dbdir : dbsorted) { whatIdxCMB->addItem(path2qs(dbdir)); } if (!initdbdir.empty()) { whatIdxCMB->setCurrentText(path2qs(initdbdir)); } curIdxChanged(whatIdxCMB->currentText()); } void PTransEdit::curIdxChanged(const QString& qidx) { auto dbdir = qs2path(qidx); setCurrentDb(dbdir); } void PTransEdit::setCurrentDb(const std::string& dbdir) { ConfSimple *conftrans = theconfig->getPTrans(); if (!conftrans) return; whatIdxCMB->setCurrentText(path2qs(dbdir)); int row = 0; auto opaths = conftrans->getNames(dbdir); for (const auto& opath : opaths) { transTW->setRowCount(row+1); transTW->setItem(row, 0, new QTableWidgetItem(path2qs(opath))); std::string npath; conftrans->get(opath, npath, dbdir); transTW->setItem(row, 1, new QTableWidgetItem(path2qs(npath))); row++; } } void PTransEdit::onItemDoubleClicked(QTableWidgetItem *item) { transTW->editItem(item); } void PTransEdit::savePB_clicked() { ConfSimple *conftrans = theconfig->getPTrans(); if (!conftrans) { QMessageBox::warning(0, "Recoll", tr("Config error")); return; } conftrans->holdWrites(true); auto dbdir = qs2path(whatIdxCMB->currentText()); conftrans->eraseKey(dbdir); for (int row = 0; row < transTW->rowCount(); row++) { QTableWidgetItem *item0 = transTW->item(row, 0); auto from = qs2path(item0->text()); QTableWidgetItem *item1 = transTW->item(row, 1); auto to = qs2path(item1->text()); conftrans->set(from, to, dbdir); } conftrans->holdWrites(false); // The rcldb does not use the same configuration object, but a copy. // Force a reopen, this is quick. std::string reason; maybeOpenDb(reason, true); close(); } void PTransEdit::addPB_clicked() { transTW->setRowCount(transTW->rowCount()+1); int row = transTW->rowCount()-1; transTW->setItem(row, 0, new QTableWidgetItem(tr("Original path"))); transTW->setItem(row, 1, new QTableWidgetItem(tr("Local path"))); transTW->editItem(transTW->item(row, 0)); } void PTransEdit::delPB_clicked() { QModelIndexList indexes = transTW->selectionModel()->selectedIndexes(); std::vector rows; for (int i = 0; i < indexes.size(); i++) { rows.push_back(indexes.at(i).row()); } std::sort(rows.begin(), rows.end()); rows.resize(unique(rows.begin(), rows.end()) - rows.begin()); for (int i = static_cast(rows.size()-1); i >= 0; i--) { transTW->removeRow(rows[i]); } } void PTransEdit::transTW_itemSelectionChanged() { QModelIndexList indexes = transTW->selectionModel()->selectedIndexes(); delPB->setEnabled(indexes.size() >= 1); } recoll-1.43.12/qtgui/winschedtool.cpp0000644000175000017500000000637315121730573017020 0ustar dockesdockes/* Copyright (C) 2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "winschedtool.h" #include #include #include #include #include #include "recoll.h" #include "smallut.h" #include "rclutil.h" #include "log.h" #include "execmd.h" #include "pathut.h" using namespace std; void WinSchedToolW::init() { if (!theconfig) { QMessageBox::warning(0, tr("Error"), tr("Configuration not initialized")); return; } connect(startPB, SIGNAL(clicked()), this, SLOT(startWinScheduler())); // Use a short path on Windows if possible to avoid issues with // accented characters string confdir = path_shortpath(theconfig->getConfDir()); string recollindex = path_cat(path_thisexecdir(), "recollindex.exe"); LOGDEB("WinSchedTool: recollindex: " << recollindex << endl); string batchfile = path_cat(confdir, "winsched.bat"); LOGDEB("WinSchedTool: batch file " << batchfile << endl); if (!path_exists(batchfile)) { std::fstream fp; if (path_streamopen(batchfile, ios::out|ios::trunc, fp)) { fp << "\"" << recollindex << "\" -c \"" << confdir << "\"\n"; fp.close(); } else { QMessageBox::warning(0, tr("Error"), tr("Could not create batch file")); return; } } QString blurb = tr( "

Recoll indexing batch scheduling

" "

We use the standard Windows task scheduler for this. The program " "will be started when you click the button below.

" "

You can use either the full interface " "(Create task in the menu on the right), or the simplified " "Create Basic task wizard. In both cases Copy/Paste the " "batch file path listed below as the Action to be performed." "

" ); blurb.append("

").append(u8s2qs(batchfile)).append("

"); explainLBL->setText(blurb); explainLBL->setTextInteractionFlags(Qt::TextSelectableByMouse); } void WinSchedToolW::startWinScheduler() { if (m_cmd) { int status; if (m_cmd->maybereap(&status)) { delete m_cmd; } else { QMessageBox::warning(0, "Recoll", tr("Command already started")); return; } } m_cmd = new ExecCmd(); vector lcmd{"c:/windows/system32/taskschd.msc"}; m_cmd->startExec("rclstartw", lcmd, false, false); } recoll-1.43.12/qtgui/crontool.ui0000644000175000017500000001573714753313314016014 0ustar dockesdockes CronToolW 0 0 508 416 Cron Dialog 0 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Recoll</span> batch indexing schedule (cron) </p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Each field can contain a wildcard (*), a single numeric value, comma-separated lists (1,3,5) and ranges (1-7). More generally, the fields will be used <span style=" font-style:italic;">as is</span> inside the crontab file, and the full crontab syntax can be used, see crontab(5).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />For example, entering <span style=" font-family:'Courier New,courier';">*</span> in <span style=" font-style:italic;">Days, </span><span style=" font-family:'Courier New,courier';">12,19</span> in <span style=" font-style:italic;">Hours</span> and <span style=" font-family:'Courier New,courier';">15</span> in <span style=" font-style:italic;">Minutes</span> would start recollindex every day at 12:15 AM and 7:15 PM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A schedule with very frequent activations is probably less efficient than real time indexing.</p></body></html> true Days of week (* or 0-7, 0 or 7 is Sunday) Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Hours (* or 0-23) Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Minutes (0-59) Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click <span style=" font-style:italic;">Disable</span> to stop automatic batch indexing, <span style=" font-style:italic;">Enable</span> to activate it, <span style=" font-style:italic;">Cancel</span> to change nothing.</p></body></html> true Qt::Horizontal QDialogButtonBox::Cancel buttonBox accepted() CronToolW accept() 248 254 157 274 buttonBox rejected() CronToolW reject() 316 260 286 274 recoll-1.43.12/qtgui/confgui/0000755000175000017500000000000015121730572015232 5ustar dockesdockesrecoll-1.43.12/qtgui/confgui/confgui.cpp0000644000175000017500000006172515121730572017403 0ustar dockesdockes/* Copyright (C) 2005-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "confgui.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "smallut.h" namespace confgui { // Main layout spacing static const int spacing = 3; // left,top,right, bottom static QMargins margin(4,3,4,3); // Margin around text to explicitely set pushbutton sizes lower than // the default min (80?). Different on Mac OS for some reason #ifdef __APPLE__ static const int pbTextMargin = 30; #else static const int pbTextMargin = 15; #endif ConfTabsW::ConfTabsW(QWidget *parent, const QString& title, ConfLinkFact *fact) : QDialog(parent), m_makelink(fact) { setWindowTitle(title); tabWidget = new QTabWidget; buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |QDialogButtonBox::Apply | QDialogButtonBox::Cancel); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setSpacing(spacing); mainLayout->setContentsMargins(margin); mainLayout->addWidget(tabWidget); mainLayout->addWidget(buttonBox); setLayout(mainLayout); resize(QSize(500, 400).expandedTo(minimumSizeHint())); connect(buttonBox, SIGNAL(accepted()), this, SLOT(acceptChanges())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(rejectChanges())); connect(buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); } void ConfTabsW::hideButtons() { if (buttonBox) buttonBox->hide(); } bool ConfTabsW::modified() { for (auto& entry : m_panels) { if (entry->modified()) return true; } for (auto& entry : m_widgets) { if (entry->modified()) return true; } return false; } void ConfTabsW::acceptChanges() { for (auto& entry : m_panels) { entry->storeValues(); } for (auto& entry : m_widgets) { entry->storeValues(); } emit sig_prefsChanged(); if (!buttonBox->isHidden()) close(); } void ConfTabsW::buttonClicked(QAbstractButton* button) { // Testing the button text does not seem very reliable. We should create and store the buttons // and add them to the box, then test which it is. if (button->text() != tr("Apply")) return; for (auto& entry : m_panels) { entry->storeValues(); } for (auto& entry : m_widgets) { entry->storeValues(); } emit sig_prefsChanged(); } void ConfTabsW::rejectChanges() { reloadPanels(); if (!buttonBox->isHidden()) close(); } void ConfTabsW::reloadPanels() { for (auto& entry : m_panels) { entry->loadValues(); } for (auto& entry : m_widgets) { entry->loadValues(); } } int ConfTabsW::addPanel(const QString& title) { ConfPanelW *w = new ConfPanelW(this); m_panels.push_back(w); return tabWidget->addTab(w, title); } int ConfTabsW::addForeignPanel(ConfPanelWIF* w, const QString& title) { m_widgets.push_back(w); QWidget *qw = dynamic_cast(w); if (qw == 0) { qDebug() << "addForeignPanel: can't cast panel to QWidget"; abort(); } return tabWidget->addTab(qw, title); } void ConfTabsW::setCurrentIndex(int idx) { if (tabWidget) { tabWidget->setCurrentIndex(idx); } } QWidget *ConfTabsW::addBlurb(int tabindex, const QString& txt) { ConfPanelW *panel = (ConfPanelW*)tabWidget->widget(tabindex); if (panel == 0) { return 0; } QFrame *line = new QFrame(panel); line->setFrameShape(QFrame::HLine); line->setFrameShadow(QFrame::Sunken); panel->addWidget(line); QLabel *explain = new QLabel(panel); explain->setWordWrap(true); explain->setText(txt); panel->addWidget(explain); line = new QFrame(panel); line->setFrameShape(QFrame::HLine); line->setFrameShadow(QFrame::Sunken); panel->addWidget(line); return explain; } ConfParamW *ConfTabsW::addParam( int tabindex, ParamType tp, const QString& varname, const QString& label, const QString& tooltip, int ival, int maxval, const QStringList* sl) { ConfLink lnk = (*m_makelink)(varname); ConfPanelW *panel = (ConfPanelW*)tabWidget->widget(tabindex); if (panel == 0) { return 0; } ConfParamW *cp = 0; switch (tp) { case CFPT_BOOL: cp = new ConfParamBoolW(varname, this, lnk, label, tooltip, ival); break; case CFPT_INT: { size_t v = (size_t)sl; int v1 = (v & 0xffffffff); cp = new ConfParamIntW(varname, this, lnk, label, tooltip, ival, maxval, v1); break; } case CFPT_STR: cp = new ConfParamStrW(varname, this, lnk, label, tooltip); break; case CFPT_CSTR: cp = new ConfParamCStrW(varname, this, lnk, label, tooltip, *sl); break; case CFPT_FN: cp = new ConfParamFNW(varname, this, lnk, label, tooltip, ival); break; case CFPT_STRL: cp = new ConfParamSLW(varname, this, lnk, label, tooltip); break; case CFPT_DNL: cp = new ConfParamDNLW(varname, this, lnk, label, tooltip); break; case CFPT_CSTRL: cp = new ConfParamCSLW(varname, this, lnk, label, tooltip, *sl); break; } cp->setToolTip(tooltip); panel->addParam(cp); return cp; } ConfParamW *ConfTabsW::findParamW(const QString& varname) { for (const auto& panel : m_panels) { ConfParamW *w = panel->findParamW(varname); if (w) return w; } return nullptr; } void ConfTabsW::endOfList(int tabindex) { ConfPanelW *panel = dynamic_cast(tabWidget->widget(tabindex)); // panel may be null if this is a foreign panel (not a conftabsw) if (nullptr == panel) { return; } panel->endOfList(); } bool ConfTabsW::enableLink(ConfParamW* boolw, ConfParamW* otherw, bool revert) { ConfParamBoolW *bw = dynamic_cast(boolw); if (bw == 0) { std::cerr << "ConfTabsW::enableLink: not a boolw\n"; return false; } otherw->setEnabled(revert ? !bw->m_cb->isChecked() : bw->m_cb->isChecked()); if (revert) { connect(bw->m_cb, SIGNAL(toggled(bool)), otherw, SLOT(setDisabled(bool))); } else { connect(bw->m_cb, SIGNAL(toggled(bool)), otherw, SLOT(setEnabled(bool))); } return true; } ConfPanelW::ConfPanelW(QWidget *parent) : QWidget(parent) { m_vboxlayout = new QVBoxLayout(this); m_vboxlayout->setSpacing(spacing); m_vboxlayout->setAlignment(Qt::AlignTop); m_vboxlayout->setContentsMargins(margin); } void ConfPanelW::addParam(ConfParamW *w) { m_vboxlayout->addWidget(w); m_params.push_back(w); } void ConfPanelW::addWidget(QWidget *w) { m_vboxlayout->addWidget(w); } ConfParamW *ConfPanelW::findParamW(const QString& varname) { for (const auto& param : m_params) { if (varname == param->getVarName()) { return param; } } return nullptr; } void ConfPanelW::endOfList() { m_vboxlayout->addStretch(2); } bool ConfPanelW::modified() { for (auto& widgetp : m_params) { if (widgetp->modified()) return true; } return false; } void ConfPanelW::storeValues() { for (auto& widgetp : m_params) { widgetp->storeValue(); } } void ConfPanelW::loadValues() { for (auto& widgetp : m_params) { widgetp->loadValue(); } } static QString myGetFileName(bool isdir, QString caption = QString(), bool filenosave = false); static QString myGetFileName(bool isdir, QString caption, bool filenosave) { QFileDialog dialog(0, caption); if (isdir) { dialog.setFileMode(QFileDialog::Directory); dialog.setOptions(QFileDialog::ShowDirsOnly); } else { dialog.setFileMode(QFileDialog::AnyFile); if (filenosave) { dialog.setAcceptMode(QFileDialog::AcceptOpen); } else { dialog.setAcceptMode(QFileDialog::AcceptSave); } } dialog.setViewMode(QFileDialog::List); QFlags flags = QDir::NoDotAndDotDot | QDir::Hidden; if (isdir) { flags |= QDir::Dirs; } else { flags |= QDir::Dirs | QDir::Files; } dialog.setFilter(flags); if (dialog.exec() == QDialog::Accepted) { return dialog.selectedFiles().value(0); } return QString(); } void ConfParamW::setValue(const QString& value) { if (m_fsencoding) { #ifdef _WIN32 m_cflink->set(std::string((const char *)value.toUtf8())); #else m_cflink->set(std::string((const char *)value.toLocal8Bit())); #endif } else { m_cflink->set(std::string((const char *)value.toUtf8())); } } void ConfParamW::setValue(int value) { m_cflink->set(std::to_string(value)); } void ConfParamW::setValue(bool value) { m_cflink->set(std::to_string(value)); } extern void setSzPol(QWidget *w, QSizePolicy::Policy hpol, QSizePolicy::Policy vpol, int hstretch, int vstretch); void setSzPol(QWidget *w, QSizePolicy::Policy hpol, QSizePolicy::Policy vpol, int hstretch, int vstretch) { QSizePolicy policy(hpol, vpol); policy.setHorizontalStretch(hstretch); policy.setVerticalStretch(vstretch); policy.setHeightForWidth(w->sizePolicy().hasHeightForWidth()); w->setSizePolicy(policy); w->resize(w->sizeHint().width(), w->sizeHint().height()); } bool ConfParamW::createCommon(const QString& lbltxt, const QString& tltptxt) { m_hl = new QHBoxLayout(this); m_hl->setSpacing(spacing); m_hl->setContentsMargins(margin); QLabel *tl = new QLabel(this); tl->setToolTip(tltptxt); setSzPol(tl, QSizePolicy::Preferred, QSizePolicy::Fixed, 0, 0); tl->setText(lbltxt); m_hl->addWidget(tl); return true; } ConfParamIntW::ConfParamIntW( const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, int minvalue, int maxvalue, int defaultvalue) : ConfParamW(varnm, parent, cflink), m_defaultvalue(defaultvalue) { //qDebug() << "ConfParamIntW: nm [" << varnm << "] min " << minvalue << " max " << // maxvalue << " def " << defaultvalue;; if (!createCommon(lbltxt, tltptxt)) { return; } m_sb = new QSpinBox(this); m_sb->setMinimum(minvalue); m_sb->setMaximum(maxvalue); setSzPol(m_sb, QSizePolicy::Fixed, QSizePolicy::Fixed, 0, 0); m_hl->addWidget(m_sb); QFrame *fr = new QFrame(this); setSzPol(fr, QSizePolicy::Preferred, QSizePolicy::Fixed, 0, 0); m_hl->addWidget(fr); loadValue(); } void ConfParamIntW::storeValue() { if (m_origvalue != m_sb->value()) { setValue(m_sb->value()); m_origvalue = m_sb->value(); } } bool ConfParamIntW::modified() { return m_origvalue != m_sb->value(); } void ConfParamIntW::loadValue() { std::string s; if (m_cflink->get(s)) { m_sb->setValue(m_origvalue = atoi(s.c_str())); } else { m_sb->setValue(m_origvalue = m_defaultvalue); } } void ConfParamIntW::setImmediate() { connect(m_sb, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); } ConfParamStrW::ConfParamStrW( const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt) : ConfParamW(varnm, parent, cflink) { if (!createCommon(lbltxt, tltptxt)) { return; } m_le = new QLineEdit(this); setSzPol(m_le, QSizePolicy::Preferred, QSizePolicy::Fixed, 1, 0); m_hl->addWidget(m_le); loadValue(); } void ConfParamStrW::storeValue() { if (m_origvalue != m_le->text()) { setValue(m_le->text()); m_origvalue = m_le->text(); } } bool ConfParamStrW::modified() { return m_origvalue != m_le->text(); } void ConfParamStrW::loadValue() { std::string s; if (!m_cflink->get(s)) { s = m_strdefault; } if (m_fsencoding) { #ifdef _WIN32 m_le->setText(m_origvalue = QString::fromUtf8(s.c_str())); #else m_le->setText(m_origvalue = QString::fromLocal8Bit(s.c_str())); #endif } else { m_le->setText(m_origvalue = QString::fromUtf8(s.c_str())); } } void ConfParamStrW::setImmediate() { connect(m_le, SIGNAL(textChanged(const QString&)), this, SLOT(setValue(const QString&))); } ConfParamCStrW::ConfParamCStrW( const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, const QStringList& sl) : ConfParamW(varnm, parent, cflink) { if (!createCommon(lbltxt, tltptxt)) { return; } m_cmb = new QComboBox(this); m_cmb->setEditable(false); m_cmb->insertItems(0, sl); setSzPol(m_cmb, QSizePolicy::Preferred, QSizePolicy::Fixed, 1, 0); m_hl->addWidget(m_cmb); loadValue(); } void ConfParamCStrW::setList(const QStringList& sl) { m_cmb->clear(); m_cmb->insertItems(0, sl); loadValue(); } void ConfParamCStrW::storeValue() { if (m_origvalue != m_cmb->currentText()) { setValue(m_cmb->currentText()); m_origvalue = m_cmb->currentText(); } } bool ConfParamCStrW::modified() { return m_origvalue != m_cmb->currentText(); } void ConfParamCStrW::loadValue() { std::string s; if (!m_cflink->get(s)) { s = m_strdefault; } QString cs; if (m_fsencoding) { #ifdef _WIN32 cs = QString::fromUtf8(s.c_str()); #else cs = QString::fromLocal8Bit(s.c_str()); #endif } else { cs = QString::fromUtf8(s.c_str()); } for (int i = 0; i < m_cmb->count(); i++) { if (!cs.compare(m_cmb->itemText(i))) { m_cmb->setCurrentIndex(i); break; } } m_origvalue = cs; } void ConfParamCStrW::setImmediate() { connect(m_cmb, SIGNAL(textActivated(const QString&)), this, SLOT(setValue(const QString&))); } ConfParamBoolW::ConfParamBoolW( const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, bool deflt) : ConfParamW(varnm, parent, cflink), m_dflt(deflt) { // No createCommon because the checkbox has a label m_hl = new QHBoxLayout(this); m_hl->setSpacing(spacing); m_hl->setContentsMargins(margin); m_cb = new QCheckBox(lbltxt, this); setSzPol(m_cb, QSizePolicy::Fixed, QSizePolicy::Fixed, 0, 0); m_hl->addWidget(m_cb); m_cb->setToolTip(tltptxt); QFrame *fr = new QFrame(this); setSzPol(fr, QSizePolicy::Preferred, QSizePolicy::Fixed, 1, 0); m_hl->addWidget(fr); loadValue(); } void ConfParamBoolW::storeValue() { if (m_origvalue != m_cb->isChecked()) { setValue(m_cb->isChecked()); m_origvalue = m_cb->isChecked(); } } bool ConfParamBoolW::modified() { return m_origvalue != m_cb->isChecked(); } void ConfParamBoolW::loadValue() { std::string s; if (!m_cflink->get(s)) { m_origvalue = m_dflt; } else { m_origvalue = stringToBool(s); } m_cb->setChecked(m_origvalue); } void ConfParamBoolW::setImmediate() { connect(m_cb, SIGNAL(toggled(bool)), this, SLOT(setValue(bool))); } ConfParamFNW::ConfParamFNW( const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, bool isdir) : ConfParamW(varnm, parent, cflink), m_isdir(isdir) { if (!createCommon(lbltxt, tltptxt)) { return; } m_fsencoding = true; m_le = new QLineEdit(this); m_le->setMinimumSize(QSize(150, 0)); setSzPol(m_le, QSizePolicy::Preferred, QSizePolicy::Fixed, 1, 0); m_hl->addWidget(m_le); m_pb = new QPushButton(this); QString text = tr("Choose"); m_pb->setText(text); setSzPol(m_pb, QSizePolicy::Minimum, QSizePolicy::Fixed, 0, 0); m_hl->addWidget(m_pb); loadValue(); QObject::connect(m_pb, SIGNAL(clicked()), this, SLOT(showBrowserDialog())); } void ConfParamFNW::storeValue() { if (m_origvalue != m_le->text()) { setValue(m_le->text()); m_origvalue = m_le->text(); } } bool ConfParamFNW::modified() { return m_origvalue != m_le->text(); } void ConfParamFNW::loadValue() { std::string s; if (!m_cflink->get(s)) { s = m_strdefault; } #ifdef _WIN32 m_le->setText(m_origvalue = QString::fromUtf8(s.c_str())); #else m_le->setText(m_origvalue = QString::fromLocal8Bit(s.c_str())); #endif } void ConfParamFNW::showBrowserDialog() { QString s = myGetFileName(m_isdir); if (!s.isEmpty()) { m_le->setText(s); } } void ConfParamFNW::setImmediate() { connect(m_le, SIGNAL(textChanged(const QString&)), this, SLOT(setValue(const QString&))); } class SmallerListWidget: public QListWidget { public: SmallerListWidget(QWidget *parent) : QListWidget(parent) {} virtual QSize sizeHint() const { return QSize(150, 40); } }; ConfParamSLW::ConfParamSLW( const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt) : ConfParamW(varnm, parent, cflink) { // Can't use createCommon here cause we want the buttons below the label m_hl = new QHBoxLayout(this); m_hl->setSpacing(spacing); m_hl->setContentsMargins(margin); QVBoxLayout *vl1 = new QVBoxLayout(); vl1->setSpacing(spacing); vl1->setContentsMargins(margin); QHBoxLayout *hl1 = new QHBoxLayout(); hl1->setSpacing(spacing); hl1->setContentsMargins(margin); QLabel *tl = new QLabel(this); setSzPol(tl, QSizePolicy::Preferred, QSizePolicy::Fixed, 0, 0); tl->setText(lbltxt); tl->setToolTip(tltptxt); vl1->addWidget(tl); QPushButton *pbA = new QPushButton(this); QString text = tr("+"); pbA->setText(text); pbA->setToolTip(tr("Add entry")); int width = pbA->fontMetrics().boundingRect(text).width() + pbTextMargin; pbA->setMaximumWidth(width); setSzPol(pbA, QSizePolicy::Minimum, QSizePolicy::Fixed, 0, 0); hl1->addWidget(pbA); QObject::connect(pbA, SIGNAL(clicked()), this, SLOT(showInputDialog())); QPushButton *pbD = new QPushButton(this); text = tr("-"); pbD->setText(text); pbD->setToolTip(tr("Delete selected entries")); width = pbD->fontMetrics().boundingRect(text).width() + pbTextMargin; pbD->setMaximumWidth(width); setSzPol(pbD, QSizePolicy::Minimum, QSizePolicy::Fixed, 0, 0); hl1->addWidget(pbD); QObject::connect(pbD, SIGNAL(clicked()), this, SLOT(deleteSelected())); m_pbE = new QPushButton(this); text = tr("~"); m_pbE->setText(text); m_pbE->setToolTip(tr("Edit selected entries")); width = m_pbE->fontMetrics().boundingRect(text).width() + pbTextMargin; m_pbE->setMaximumWidth(width); setSzPol(m_pbE, QSizePolicy::Minimum, QSizePolicy::Fixed, 0, 0); hl1->addWidget(m_pbE); QObject::connect(m_pbE, SIGNAL(clicked()), this, SLOT(editSelected())); m_pbE->hide(); vl1->addLayout(hl1); m_hl->addLayout(vl1); m_lb = new SmallerListWidget(this); m_lb->setSelectionMode(QAbstractItemView::ExtendedSelection); connect(m_lb, SIGNAL(currentTextChanged(const QString&)), this, SIGNAL(currentTextChanged(const QString&))); setSzPol(m_lb, QSizePolicy::Preferred, QSizePolicy::Preferred, 1, 1); m_hl->addWidget(m_lb); setSzPol(this, QSizePolicy::Preferred, QSizePolicy::Preferred, 1, 1); loadValue(); } void ConfParamSLW::setEditable(bool onoff) { if (onoff) { m_pbE->show(); } else { m_pbE->hide(); } } std::string ConfParamSLW::listToString() { std::vector ls; for (int i = 0; i < m_lb->count(); i++) { // General parameters are encoded as utf-8. // Linux file names as local8bit There is no hope for 8bit // file names anyway except for luck: the original encoding is // unknown. In most modern configs, local8Bits will be UTF-8. // Except on Windows: we store file names as UTF-8 QString text = m_lb->item(i)->text(); if (m_fsencoding) { #ifdef _WIN32 ls.push_back((const char *)(text.toUtf8())); #else ls.push_back((const char *)(text.toLocal8Bit())); #endif } else { ls.push_back((const char *)(text.toUtf8())); } } std::string s; stringsToString(ls, s); return s; } void ConfParamSLW::storeValue() { std::string s = listToString(); if (m_origvalue != s) { m_cflink->set(s); m_origvalue = s; } } bool ConfParamSLW::modified() { return listToString() != m_origvalue; } void ConfParamSLW::loadValue() { m_origvalue.clear(); if (!m_cflink->get(m_origvalue)) { m_origvalue = m_strdefault; } std::vector ls; stringToStrings(m_origvalue, ls); QStringList qls; for (const auto& str : ls) { if (m_fsencoding) { #ifdef _WIN32 qls.push_back(QString::fromUtf8(str.c_str())); #else qls.push_back(QString::fromLocal8Bit(str.c_str())); #endif } else { qls.push_back(QString::fromUtf8(str.c_str())); } } m_lb->clear(); m_lb->insertItems(0, qls); } void ConfParamSLW::showInputDialog() { bool ok; QString s = QInputDialog::getText(this, "", "", QLineEdit::Normal, "", &ok); if (!ok || s.isEmpty()) { return; } performInsert(s); } void ConfParamSLW::performInsert(const QString& s) { QList existing = m_lb->findItems(s, Qt::MatchFixedString | Qt::MatchCaseSensitive); if (!existing.empty()) { m_lb->setCurrentItem(existing[0]); return; } m_lb->insertItem(0, s); m_lb->sortItems(); existing = m_lb->findItems(s, Qt::MatchFixedString | Qt::MatchCaseSensitive); if (existing.empty()) { std::cerr << "Item not found after insertion!" << "\n"; return; } m_lb->setCurrentItem(existing[0], QItemSelectionModel::ClearAndSelect); if (m_immediate) { std::string nv = listToString(); m_cflink->set(nv); } } void ConfParamSLW::deleteSelected() { // We used to repeatedly go through the list and delete the first // found selected item (then restart from the beginning). But it // seems (probably depends on the qt version), that, when deleting // a selected item, qt will keep the selection active at the same // index (now containing the next item), so that we'd end up // deleting the whole list. // // Instead, we now build a list of indices, and delete it starting // from the top so as not to invalidate lower indices std::vector idxes; for (int i = 0; i < m_lb->count(); i++) { if (m_lb->item(i)->isSelected()) { idxes.push_back(i); } } for (std::vector::reverse_iterator it = idxes.rbegin(); it != idxes.rend(); it++) { QListWidgetItem *item = m_lb->takeItem(*it); emit entryDeleted(item->text()); delete item; } if (m_immediate) { std::string nv = listToString(); m_cflink->set(nv); } if (m_lb->count()) { m_lb->setCurrentRow(0, QItemSelectionModel::ClearAndSelect); } } void ConfParamSLW::editSelected() { for (int i = 0; i < m_lb->count(); i++) { if (m_lb->item(i)->isSelected()) { bool ok; QString s = QInputDialog::getText( this, "", "", QLineEdit::Normal, m_lb->item(i)->text(), &ok); if (ok && !s.isEmpty()) { m_lb->item(i)->setText(s); if (m_immediate) { std::string nv = listToString(); m_cflink->set(nv); } } } } } // "Add entry" dialog for a file name list void ConfParamDNLW::showInputDialog() { QString s = myGetFileName(true); if (s.isEmpty()) { return; } performInsert(s); } // "Add entry" dialog for a constrained string list void ConfParamCSLW::showInputDialog() { bool ok; QString s = QInputDialog::getItem(this, "", "", m_sl, 0, false, &ok); if (!ok || s.isEmpty()) { return; } performInsert(s); } } // Namespace confgui recoll-1.43.12/qtgui/confgui/confguiindex.h0000644000175000017500000000501515121730572020066 0ustar dockesdockes/* Copyright (C) 2007 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _confguiindex_h_included_ #define _confguiindex_h_included_ /** * Classes to handle the gui for the indexing configuration. These group * confgui elements, linked to configuration parameters, into panels. */ #include #include #include #include #include #include #include #include #include #include #include "confgui.h" class ConfNull; class RclConfig; class ConfIndexW : public QWidget { Q_OBJECT public: ConfIndexW(QWidget *parent, RclConfig *config) : m_parent(parent), m_rclconf(config) {} public slots: void showPrefs(bool modal); void acceptChanges(); QWidget *getDialog() {return m_w;} signals: void idxConfigPossiblyChanged(); private: void initPanels(); bool setupTopPanel(int idx); bool setupWebHistoryPanel(int idx); bool setupSearchPanel(int idx); QWidget *m_parent; RclConfig *m_rclconf; ConfNull *m_conf{nullptr}; confgui::ConfTabsW *m_w{nullptr}; QStringList m_stemlangs; }; /** A special panel for parameters which may change in subdirectories: */ class ConfSubPanelW : public QWidget, public confgui::ConfPanelWIF { Q_OBJECT public: ConfSubPanelW(QWidget *parent, ConfNull **config, RclConfig *rclconf); virtual void storeValues(); virtual void loadValues(); private slots: void subDirChanged(QListWidgetItem *, QListWidgetItem *); void subDirDeleted(QString); void restoreEmpty(); private: std::string m_sk; ConfNull **m_config; confgui::ConfParamDNLW *m_subdirs; std::vector m_widgets; QGroupBox *m_groupbox; }; #endif /* _confguiindex_h_included_ */ recoll-1.43.12/qtgui/confgui/confgui.h0000644000175000017500000003450615121730572017045 0ustar dockesdockes/* Copyright (C) 2007-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _confgui_h_included_ #define _confgui_h_included_ /** * Utilities for a configuration/preferences settings user interface. * * This file declares a number of data input Qt widgets (virtual base: * ConfParamW), with a well defined virtual interface to configuration storage, * which may be QSettings or something else (e.g. conftree). * * Subclasses are defined for entering different kind of data, e.g. a string, * a file name, an integer, etc. * * Each GUI object is linked to the configuration data through * a "link" object which knows the details of interacting with the actual * configuration data, like the parameter name, the actual * configuration interface, etc. * * The link object is set when the input widget is created and cannot be * changed. * * The link object get() methods are called for reading the initial data. * * The set() methods for all the objects are normally called when the * user clicks "Accept", only if the current value() differs from the * value obtained by get() when the object was initialized. This can * be used to avoid cluttering the output with values which are * unmodified from the defaults. * * The setImmediate() method can be called on the individial controls * to ensure that set() is inconditionnaly called whenever the user * changes the related value. This can be especially useful if the * configuration state can't be fully represented in the GUI (for * example if the same parameter name can exist in different sections * depending on the value of another parameter). It allows using local * storage for the values, and flushing, for example, when * sig_prefsChanged() is emitted after the user clicks accept. * * The file also defines a multi-tabbed dialog container for the * parameter objects, with simple interface methods to add tabs and add * configuration elements to them. * * Some of the tab widgets can be defined as "foreign", with specific internals. * They just need to implement a loadValues() to be called at * initialisation and a storeValues(), called when the user commits * the changes. */ #include #include #include #include #include #include #include #include class QCheckBox; class QComboBox; class QDialogButtonBox; class QAbstractButton; class QHBoxLayout; class QLineEdit; class QListWidget; class QPushButton; class QSpinBox; class QTabWidget; class QVBoxLayout; namespace confgui { /** Interface between the GUI widget and the config storage mechanism: */ class ConfLinkRep { public: virtual ~ConfLinkRep() {} virtual bool set(const std::string& val) = 0; virtual bool get(std::string& val) = 0; }; typedef std::shared_ptr ConfLink; // May be used to store/manage data which has no direct representation // in the stored configuration. class ConfLinkNullRep : public ConfLinkRep { public: virtual ~ConfLinkNullRep() {} virtual bool set(const std::string&) { return true; } virtual bool get(std::string& val) {val = ""; return true;} }; /** Link maker class. Will be called back by addParam() to create the link */ class ConfLinkFact { public: virtual ~ConfLinkFact() {} virtual ConfLink operator()(const QString& nm) = 0; }; /** Interface for "foreign" panels. The object must also be a QWidget, which * we don't express by inheriting here to avoid qt issues */ class ConfPanelWIF { public: virtual ~ConfPanelWIF() {} virtual void storeValues() = 0; virtual void loadValues() = 0; virtual bool modified() {return false;} }; class ConfPanelW; class ConfParamW; /** The top level widget has tabs, each tab/panel has multiple widgets * for setting parameter values */ class ConfTabsW : public QDialog { Q_OBJECT public: ConfTabsW(QWidget *parent, const QString& title, ConfLinkFact *linkfact); enum ParamType {CFPT_BOOL, CFPT_INT, CFPT_STR, CFPT_CSTR, // Constrained string: from list CFPT_FN, // File/directory CFPT_STRL, CFPT_DNL, CFPT_CSTRL // lists of the same }; /** Add tab and return its identifier / index */ int addPanel(const QString& title); /** Add foreign tab where we only know to call loadvalues/storevalues. * The object has to derive from QWidget */ int addForeignPanel(ConfPanelWIF* w, const QString& title); /** Add parameter setter to specified tab */ ConfParamW *addParam( int tabindex, ParamType tp, const QString& varname, const QString& label, const QString& tooltip, int isdirorminval = 0, /* Dep. on type: directory flag or min value */ int maxval = 0, const QStringList* sl = 0); /** Add explanatory text between 2 horizontal lines */ QWidget *addBlurb(int tabindex, const QString& txt); /** Enable link between bool value and another parameter: the control will * be enabled depending on the boolean value (with possible inversion). Can * be called multiple times for the same bool to enable/disable * several controls */ bool enableLink(ConfParamW* boolw, ConfParamW* otherw, bool revert = false); /** Call this when you are done filling up a tab */ void endOfList(int tabindex); /** Find param widget associated with given variable name */ ConfParamW *findParamW(const QString& varname); void hideButtons(); bool modified(); public slots: void acceptChanges(); void rejectChanges(); void buttonClicked(QAbstractButton*); void reloadPanels(); void setCurrentIndex(int); signals: /** This is emitted when acceptChanges() is called, after the * values have been stored */ void sig_prefsChanged(); private: ConfLinkFact *m_makelink{nullptr}; // All ConfPanelW managed panels. Each has a load/store interface // and an internal list of controls std::vector m_panels; // "Foreign" panels. Just implement load/store std::vector m_widgets; QTabWidget *tabWidget{nullptr}; QDialogButtonBox *buttonBox{nullptr}; }; ///////////////////////////////////////////////// // The rest of the class definitions are only useful if you need to // access a specific element for customisation (use findParamW() and a // dynamic cast). /** A panel/tab contains multiple controls for parameters */ class ConfPanelW : public QWidget { Q_OBJECT public: ConfPanelW(QWidget *parent); void addParam(ConfParamW *w); void addWidget(QWidget *w); void storeValues(); bool modified(); void loadValues(); void endOfList(); /** Find param widget associated with given variable name */ ConfParamW *findParamW(const QString& varname); private: QVBoxLayout *m_vboxlayout; std::vector m_params; }; /** Config panel element: manages one configuration * parameter. Subclassed for specific parameter types. */ class ConfParamW : public QWidget { Q_OBJECT public: ConfParamW(const QString& varnm, QWidget *parent, ConfLink cflink) : QWidget(parent), m_varname(varnm), m_cflink(cflink), m_fsencoding(false) { } virtual void loadValue() = 0; // Call setValue() each time the control changes, instead of on accept. virtual void setImmediate() = 0; virtual void setFsEncoding(bool onoff) { m_fsencoding = onoff; } const QString& getVarName() { return m_varname; } void setStrDefault(const std::string& value) { m_strdefault = value; } virtual bool modified() = 0; public slots: virtual void setEnabled(bool) = 0; virtual void storeValue() = 0; protected slots: void setValue(const QString& newvalue); void setValue(int newvalue); void setValue(bool newvalue); protected: QString m_varname; ConfLink m_cflink; QHBoxLayout *m_hl; // File names are encoded as local8bit in the config files. Other // are encoded as utf-8 bool m_fsencoding; // Bool and Int have constructor parameters for the default value. Others may use this std::string m_strdefault; virtual bool createCommon(const QString& lbltxt, const QString& tltptxt); }; //////// Widgets for setting the different types of configuration parameters: /** Boolean */ class ConfParamBoolW : public ConfParamW { Q_OBJECT public: ConfParamBoolW(const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, bool deflt = false); virtual void loadValue(); virtual bool modified(); virtual void storeValue(); virtual void setImmediate(); public slots: virtual void setEnabled(bool i) { if (m_cb) { ((QWidget*)m_cb)->setEnabled(i); } } public: QCheckBox *m_cb; bool m_dflt; bool m_origvalue; }; // Int class ConfParamIntW : public ConfParamW { Q_OBJECT public: // The default value is only used if none exists in the sample // configuration file. Defaults are normally set in there. ConfParamIntW(const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, int minvalue = INT_MIN, int maxvalue = INT_MAX, int defaultvalue = 0); virtual void loadValue(); virtual bool modified(); virtual void storeValue(); virtual void setImmediate(); public slots: virtual void setEnabled(bool i) { if (m_sb) { ((QWidget*)m_sb)->setEnabled(i); } } protected: QSpinBox *m_sb; int m_defaultvalue; int m_origvalue; }; // Arbitrary string class ConfParamStrW : public ConfParamW { Q_OBJECT public: ConfParamStrW(const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt); virtual void loadValue(); virtual bool modified(); virtual void storeValue(); virtual void setImmediate(); public slots: virtual void setEnabled(bool i) { if (m_le) { ((QWidget*)m_le)->setEnabled(i); } } protected: QLineEdit *m_le; QString m_origvalue; }; // Constrained string: choose from list class ConfParamCStrW : public ConfParamW { Q_OBJECT public: ConfParamCStrW(const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, const QStringList& sl); virtual void loadValue(); virtual bool modified(); virtual void storeValue(); virtual void setList(const QStringList& sl); virtual void setImmediate(); public slots: virtual void setEnabled(bool i) { if (m_cmb) { ((QWidget*)m_cmb)->setEnabled(i); } } protected: QComboBox *m_cmb; QString m_origvalue; }; // File name class ConfParamFNW : public ConfParamW { Q_OBJECT public: ConfParamFNW(const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, bool isdir = false); virtual void loadValue(); virtual bool modified(); virtual void storeValue(); virtual void setImmediate(); protected slots: void showBrowserDialog(); public slots: virtual void setEnabled(bool i) { if (m_le) { ((QWidget*)m_le)->setEnabled(i); } if (m_pb) { ((QWidget*)m_pb)->setEnabled(i); } } protected: QLineEdit *m_le; QPushButton *m_pb; bool m_isdir; QString m_origvalue; }; // String list class ConfParamSLW : public ConfParamW { Q_OBJECT public: ConfParamSLW(const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt); virtual void loadValue(); virtual bool modified(); virtual void storeValue(); QListWidget *getListBox() { return m_lb; } virtual void setEditable(bool onoff); virtual void setImmediate() { m_immediate = true; } public slots: virtual void setEnabled(bool i) { if (m_lb) { ((QWidget*)m_lb)->setEnabled(i); } } protected slots: virtual void showInputDialog(); void deleteSelected(); void editSelected(); void performInsert(const QString&); signals: void entryDeleted(QString); void currentTextChanged(const QString&); protected: QListWidget *m_lb; std::string listToString(); std::string m_origvalue; QPushButton *m_pbE; bool m_immediate{false}; }; // Dir name list class ConfParamDNLW : public ConfParamSLW { Q_OBJECT public: ConfParamDNLW(const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt) : ConfParamSLW(varnm, parent, cflink, lbltxt, tltptxt) { m_fsencoding = true; } protected slots: virtual void showInputDialog(); }; // Constrained string list (chose from predefined) class ConfParamCSLW : public ConfParamSLW { Q_OBJECT public: ConfParamCSLW(const QString& varnm, QWidget *parent, ConfLink cflink, const QString& lbltxt, const QString& tltptxt, const QStringList& sl) : ConfParamSLW(varnm, parent, cflink, lbltxt, tltptxt), m_sl(sl) { } protected slots: virtual void showInputDialog(); protected: const QStringList m_sl; }; extern void setSzPol(QWidget *w, QSizePolicy::Policy hpol, QSizePolicy::Policy vpol, int hstretch, int vstretch); } // namespace confgui #endif /* _confgui_h_included_ */ recoll-1.43.12/qtgui/confgui/confguiindex.cpp0000644000175000017500000006621715121730572020434 0ustar dockesdockes/* Copyright (C) 2007 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using std::vector; using std::set; using std::string; #include "recoll.h" #include "confguiindex.h" #include "smallut.h" #include "log.h" #include "rcldb.h" #include "execmd.h" #include "rclconfig.h" #include "webstore.h" #include "circache.h" #include "conftree.h" static const int spacing = 3; static const int margin = 3; using namespace confgui; /* Link class for ConfTree. Has a subkey pointer member which makes it easy * to change the current subkey for multiple instances. */ class ConfLinkRclRep : public ConfLinkRep { public: ConfLinkRclRep(ConfNull **conf, const string& nm, string *sk = 0) : m_conf(conf), m_nm(nm), m_sk(sk) /* KEEP THE POINTER, shared data */ {} virtual ~ConfLinkRclRep() {} virtual bool set(const string& val) { if (!m_conf || !*m_conf) return false; LOGDEB("ConfLinkRclRep: set " << m_nm << " -> " << val << " sk " << getSk() << std::endl); bool ret = (*m_conf)->set(m_nm, val, getSk()); if (!ret) LOGERR("Value set failed\n" ); return ret; } virtual bool get(string& val) { if (!m_conf || !*m_conf) return false; bool ret = (*m_conf)->get(m_nm, val, getSk()); LOGDEB("ConfLinkRcl::get: [" << m_nm << "] sk [" << getSk() << "] -> [" << (ret ? val : "no value") << "]\n"); return ret; } private: string getSk() { return m_sk ? *m_sk : string(); } ConfNull **m_conf; const string m_nm; const string *m_sk; }; /* Special link for skippedNames and noContentSuffixes which are computed as set differences */ typedef std::function()> RclConfVecValueGetter; class ConfLinkPlusMinus : public ConfLinkRep { public: ConfLinkPlusMinus(RclConfig *rclconf, ConfNull **conf, const string& basename, RclConfVecValueGetter getter, string *sk = 0) : m_rclconf(rclconf), m_conf(conf), m_basename(basename), m_getter(getter), m_sk(sk) /* KEEP THE POINTER, shared data */ { } virtual ~ConfLinkPlusMinus() {} virtual bool set(const string& snval) { if (!m_conf || !*m_conf || !m_rclconf) return false; string sbase; (*m_conf)->get(m_basename, sbase, getSk()); std::set nval; stringToStrings(snval, nval); string splus, sminus; RclConfig::setPlusMinus(sbase, nval, splus, sminus); LOGDEB1("ConfLinkPlusMinus: base [" << sbase << "] nvalue [" << snval << "] splus [" << splus << "] sminus [" << sminus << "]\n"); if (!(*m_conf)->set(m_basename + "-", sminus, getSk())) { return false; } if (!(*m_conf)->set(m_basename + "+", splus, getSk())) { return false; } return true; } virtual bool get(string& val) { LOGDEB("ConfLinPlusMinus::get [" << m_basename << "]\n"); if (!m_conf || !*m_conf || !m_rclconf) return false; m_rclconf->setKeyDir(getSk()); vector vval = m_getter(); val = stringsToString(vval); LOGDEB1("ConfLinkPlusMinus: " << m_basename << " -> " << val << "\n"); return true; } private: string getSk() { return m_sk ? *m_sk : string(); } RclConfig *m_rclconf; ConfNull **m_conf; string m_basename; RclConfVecValueGetter m_getter; const string *m_sk; }; class MyConfLinkFactRCL : public ConfLinkFact { public: MyConfLinkFactRCL() {} MyConfLinkFactRCL(ConfNull **conf, string *sk = 0) : m_conf(conf), m_sk(sk) /* KEEP THE POINTER, shared data */ {} virtual ConfLink operator()(const QString& nm) { ConfLinkRep *lnk = new ConfLinkRclRep(m_conf, qs2utf8s(nm), m_sk); return ConfLink(lnk); } ConfNull **m_conf{nullptr}; string *m_sk{nullptr}; }; static string sknull; static MyConfLinkFactRCL conflinkfactory; void ConfIndexW::showPrefs(bool modal) { delete m_conf; if ((m_conf = m_rclconf->cloneMainConfig()) == 0) { return; } m_conf->holdWrites(true); if (nullptr == m_w) { QString title = u8s2qs("Recoll - Index Settings: "); title += path2qs(m_rclconf->getConfDir()); conflinkfactory = MyConfLinkFactRCL(&m_conf, &sknull); if (nullptr == (m_w = new ConfTabsW(this, title, &conflinkfactory))) { return; } connect(m_w, SIGNAL(sig_prefsChanged()), this, SLOT(acceptChanges())); initPanels(); } else { m_w->hide(); } m_w->reloadPanels(); if (modal) { m_w->exec(); m_w->setModal(false); } else { m_w->show(); } } void ConfIndexW::acceptChanges() { LOGDEB("ConfIndexW::acceptChanges()\n" ); if (!m_conf) { LOGERR("ConfIndexW::acceptChanges: no config\n" ); return; } if (!m_conf->holdWrites(false)) { QMessageBox::critical(0, "Recoll", tr("Can't write configuration file")); } // Delete local copy and update the main one from the file delete m_conf; m_conf = 0; m_rclconf->updateMainConfig(); emit idxConfigPossiblyChanged(); } void ConfIndexW::initPanels() { int idx = m_w->addPanel(tr("Global parameters")); setupTopPanel(idx); idx = m_w->addForeignPanel( new ConfSubPanelW(m_w, &m_conf, m_rclconf), tr("Local parameters")); idx = m_w->addPanel(tr("Web history")); setupWebHistoryPanel(idx); idx = m_w->addPanel(tr("Search parameters")); setupSearchPanel(idx); } bool ConfIndexW::setupTopPanel(int idx) { m_w->addParam(idx, ConfTabsW::CFPT_DNL, "topdirs", tr("Start folders"), tr("The list of folders/directories to be indexed, recursively with their " "sub-folders.
" "The '~' character expands to your home directory, which is the default " "initial value.")); ConfParamW *cparam = m_w->addParam( idx, ConfTabsW::CFPT_DNL, "skippedPaths", tr("Skipped paths"), tr("These are pathnames of directories which indexing " "will not enter.
Path elements may contain wildcards. " "The entries must match the paths seen by the indexer " "(e.g.: if topdirs includes '/home/me' and '/home' is " "actually a link to '/usr/home', a correct skippedPath entry " "would be '/home/me/tmp*', not '/usr/home/me/tmp*')")); cparam->setFsEncoding(true); ((confgui::ConfParamSLW*)cparam)->setEditable(true); if (m_stemlangs.empty()) { vector cstemlangs = Rcl::Db::getStemmerNames(); for (const auto &clang : cstemlangs) { m_stemlangs.push_back(u8s2qs(clang)); } } m_w->addParam(idx, ConfTabsW::CFPT_CSTRL, "indexstemminglanguages", tr("Stemming languages"), tr("The languages for which stemming expansion " "dictionaries will be built.
See the Xapian stemmer " "documentation for possible values. E.g. english, " "french, german..."), 0, 0, &m_stemlangs); m_w->addParam(idx, ConfTabsW::CFPT_FN, "logfilename", tr("Log file name"), tr("The file where the messages will be written.
" "Use 'stderr' for terminal output"), 0); m_w->addParam( idx, ConfTabsW::CFPT_INT, "loglevel", tr("Log verbosity level"), tr("This value adjusts the amount of messages,
from only " "errors to a lot of debugging data."), 0, 6); m_w->addParam(idx, ConfTabsW::CFPT_FN, "idxlogfilename", tr("Indexer log file name"), tr("If empty, the above log file name value will be used. " "It may useful to have a separate log for diagnostic " "purposes because the common log will be erased when
" "the GUI starts up."), 0); m_w->addParam(idx, ConfTabsW::CFPT_INT, "idxflushmb", tr("Index flush megabytes interval"), tr("This value adjust the amount of " "data which is indexed between flushes to disk.
" "This helps control the indexer memory usage. " "Default 10MB "), 0, 1000); m_w->addParam(idx, ConfTabsW::CFPT_INT, "maxfsoccuppc", tr("Disk full threshold percentage at which we stop indexing
" "(E.g. 90 to stop at 90% full, 0 or 100 means no limit)"), tr("This is the percentage of disk usage " "- total disk usage, not index size - at which " "indexing will fail and stop.
" "The default value of 0 removes any limit."), 0, 100); m_w->addParam(idx, ConfTabsW::CFPT_BOOL, "suspendonbattery", tr("Suspend the real time indexer when running on battery"), tr("The indexer will wait for a return on AC and reexec itself when it happens")); ConfParamW *bparam = m_w->addParam( idx, ConfTabsW::CFPT_BOOL, "noaspell", tr("No aspell usage") + tr(" (by default, aspell suggests mispellings when a query has no results)."), tr("Disables use of aspell to generate spelling " "approximation in the term explorer tool.
" "Useful if aspell is absent or does not work. ")); cparam = m_w->addParam( idx, ConfTabsW::CFPT_STR, "aspellLanguage", tr("Aspell language"), tr("The language for the aspell dictionary. " "The values are are 2-letter " "language codes, e.g. 'en', 'fr' ...
" "If this value is not set, the NLS environment " "will be used to compute it, which usually works. " "To get an idea of what is installed on your system, " "type 'aspell config' and look for .dat files inside " "the 'data-dir' directory.")); m_w->enableLink(bparam, cparam, true); m_w->addParam( idx, ConfTabsW::CFPT_FN, "dbdir", tr("Database directory"), tr("The name or path for a directory where to store the index
" "A non-absolute path is taken relative to the " "configuration directory. The default is 'xapiandb'."), true); m_w->addParam(idx, ConfTabsW::CFPT_STR, "unac_except_trans", tr("Unac exceptions"), tr("

These are exceptions to the unac mechanism " "which, by default, removes all diacritics, " "and performs canonic decomposition. You can override " "unaccenting for some characters, depending on your " "language, and specify additional decompositions, " "e.g. for ligatures. In each space-separated entry, " "the first character is the source one, and the rest " "is the translation." )); m_w->endOfList(idx); return true; } bool ConfIndexW::setupWebHistoryPanel(int idx) { ConfParamW *bparam = m_w->addParam( idx, ConfTabsW::CFPT_BOOL, "processwebqueue", tr("Process the Web history queue"), tr("Enables indexing Firefox visited pages.
" "(you need also install the Firefox Recoll plugin)")); ConfParamW *cparam = m_w->addParam( idx, ConfTabsW::CFPT_FN, "webcachedir", tr("Web page store directory name"), tr("The name for a directory where to store the copies of visited web pages.
" "A non-absolute path is taken relative to the configuration directory."), 1); m_w->enableLink(bparam, cparam); cparam = m_w->addParam( idx, ConfTabsW::CFPT_INT, "webcachemaxmbs", tr("Max. size for the web store (MB)"), tr("Entries will be recycled once the size is reached." "
" "Only increasing the size really makes sense because " "reducing the value will not truncate an existing file (only waste space at the end)." ), -1, 1000*1000); // Max 1TB... m_w->enableLink(bparam, cparam); QStringList intervals{"", "day", "week", "month", "year"}; cparam = m_w->addParam( idx, ConfTabsW::CFPT_CSTR, "webcachekeepinterval", tr("Page recycle interval"), tr("

By default, only one instance of an URL is kept in the cache. This " "can be changed by setting this to a value determining at what frequency " "we keep multiple instances ('day', 'week', 'month', 'year'). " "Note that increasing the interval will not erase existing entries."), 0, 0, &intervals); m_w->enableLink(bparam, cparam); int64_t sz = 0; auto ws = std::unique_ptr(new WebStore(m_rclconf)); if (ws && ws->cc()) { sz = ws->cc()->size(); } m_w->addBlurb(idx, tr("Note: old pages will be erased to make space for " "new ones when the maximum size is reached. " "Current size: %1").arg(u8s2qs(displayableBytes(sz)))); cparam = m_w->addParam( idx, ConfTabsW::CFPT_FN, "webdownloadsdir", tr("Browser add-on download folder"), tr("Only set this if you set the \"Downloads subdirectory\" parameter in the Web browser " "add-on settings.
In this case, it should be the full path to the directory " "(e.g. /home/[me]/Downloads/my-subdir)"), 1); m_w->enableLink(bparam, cparam); m_w->endOfList(idx); return true; } bool ConfIndexW::setupSearchPanel(int idx) { if (!o_index_stripchars) { m_w->addParam(idx, ConfTabsW::CFPT_BOOL, "autodiacsens", tr("Automatic diacritics sensitivity"), tr("

Automatically trigger diacritics sensitivity " "if the search term has accented characters " "(not in unac_except_trans). Else you need to " "use the query language and the D " "modifier to specify diacritics sensitivity.")); m_w->addParam(idx, ConfTabsW::CFPT_BOOL, "autocasesens", tr("Automatic character case sensitivity"), tr("

Automatically trigger character case " "sensitivity if the entry has upper-case " "characters in any but the first position. " "Else you need to use the query language and " "the C modifier to specify character-case " "sensitivity.")); } m_w->addParam(idx, ConfTabsW::CFPT_INT, "maxTermExpand", tr("Maximum term expansion count"), tr("

Maximum expansion count for a single term " "(e.g.: when using wildcards). The default " "of 10 000 is reasonable and will avoid " "queries that appear frozen while the engine is " "walking the term list."), 0, 100000); m_w->addParam(idx, ConfTabsW::CFPT_INT, "maxXapianClauses", tr("Maximum Xapian clauses count"), tr("

Maximum number of elementary clauses we " "add to a single Xapian query. In some cases, " "the result of term expansion can be " "multiplicative, and we want to avoid using " "excessive memory. The default of 100 000 " "should be both high enough in most cases " "and compatible with current typical hardware " "configurations."), 0, 1000000); m_w->addParam(idx, ConfTabsW::CFPT_BOOL, "idxlocalguisettings", tr("Store some GUI parameters locally to the index"), tr("

GUI settings are normally stored in a global file, valid for all " "indexes. Setting this parameter will make some settings, such as the result " "table setup, specific to the index")); m_w->endOfList(idx); return true; } ConfSubPanelW::ConfSubPanelW(QWidget *parent, ConfNull **config, RclConfig *rclconf) : QWidget(parent), m_config(config) { QVBoxLayout *vboxLayout = new QVBoxLayout(this); vboxLayout->setSpacing(spacing); vboxLayout->setContentsMargins(QMargins(margin,margin,margin,margin)); m_subdirs = new ConfParamDNLW( "bogus00", this, ConfLink(new confgui::ConfLinkNullRep()), QObject::tr("Customised subtrees"), QObject::tr("The list of subdirectories in the indexed " "hierarchy
where some parameters need " "to be redefined. Default: empty.")); m_subdirs->getListBox()->setSelectionMode(QAbstractItemView::SingleSelection); connect(m_subdirs->getListBox(), SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(subDirChanged(QListWidgetItem *, QListWidgetItem *))); connect(m_subdirs, SIGNAL(entryDeleted(QString)), this, SLOT(subDirDeleted(QString))); // We only retrieve the subkeys from the user's config (shallow), // no use to confuse the user by showing the subtrees which are // customized in the system config like .thunderbird or // .purple. This doesn't prevent them to add and customize them // further. vector allkeydirs = (*config)->getSubKeys(true); QStringList qls; for (const auto& dir: allkeydirs) { qls.push_back(u8s2qs(dir)); } m_subdirs->getListBox()->insertItems(0, qls); vboxLayout->addWidget(m_subdirs); QFrame *line2 = new QFrame(this); line2->setFrameShape(QFrame::HLine); line2->setFrameShadow(QFrame::Sunken); vboxLayout->addWidget(line2); QLabel *explain = new QLabel(this); explain->setWordWrap(true); explain->setText( QObject::tr( "The parameters that follow are set either at the " "top level, if nothing " "or an empty line is selected in the listbox above, " "or for the selected subdirectory. " "You can add or remove directories by clicking " "the +/- buttons.")); vboxLayout->addWidget(explain); m_groupbox = new QGroupBox(this); setSzPol(m_groupbox, QSizePolicy::Preferred, QSizePolicy::Preferred, 1, 3); QGridLayout *gl1 = new QGridLayout(m_groupbox); gl1->setSpacing(spacing); gl1->setContentsMargins(QMargins(margin,margin,margin,margin)); int gridy = 0; ConfParamSLW *eskn = new ConfParamSLW( "skippedNames", m_groupbox, ConfLink(new ConfLinkPlusMinus(rclconf, config, "skippedNames", std::bind(&RclConfig::getSkippedNames, rclconf), &m_sk)), QObject::tr("Skipped names"), QObject::tr("These are patterns for file or directory names which should not be indexed.")); eskn->setFsEncoding(true); eskn->setImmediate(); m_widgets.push_back(eskn); gl1->addWidget(eskn, gridy, 0); vector amimes = rclconf->getAllMimeTypes(); QStringList amimesq; for (const auto& mime: amimes) { amimesq.push_back(u8s2qs(mime)); } ConfParamCSLW *eincm = new ConfParamCSLW( "indexedmimetypes", m_groupbox, ConfLink(new ConfLinkRclRep(config, "indexedmimetypes", &m_sk)), tr("Only mime types"), tr("An exclusive list of indexed mime types.
Nothing " "else will be indexed. Normally empty and inactive"), amimesq); eincm->setImmediate(); m_widgets.push_back(eincm); gl1->addWidget(eincm, gridy++, 1); ConfParamCSLW *eexcm = new ConfParamCSLW( "excludedmimetypes", m_groupbox, ConfLink(new ConfLinkRclRep(config, "excludedmimetypes", &m_sk)), tr("Exclude mime types"), tr("Mime types not to be indexed"), amimesq); eexcm->setImmediate(); m_widgets.push_back(eexcm); gl1->addWidget(eexcm, gridy, 0); ConfParamSLW *encs = new ConfParamSLW( "noContentSuffixes", m_groupbox, ConfLink(new ConfLinkPlusMinus( rclconf, config, "noContentSuffixes", std::bind(&RclConfig::getStopSuffixes, rclconf), &m_sk)), QObject::tr("Ignored endings"), QObject::tr("These are file name endings for files which will be " "indexed by name only \n(no MIME type identification " "attempt, no decompression, no content indexing).")); encs->setImmediate(); encs->setFsEncoding(true); m_widgets.push_back(encs); gl1->addWidget(encs, gridy++, 1); vector args; args.push_back("-l"); ExecCmd ex; string icout; string cmd = "iconv"; int status = ex.doexec(cmd, args, 0, &icout); if (status) { LOGERR("Can't get list of charsets from 'iconv -l'"); } icout = neutchars(icout, ","); vector ccsets; stringToStrings(icout, ccsets); QStringList charsets; charsets.push_back(""); for (const auto& charset : ccsets) { charsets.push_back(u8s2qs(charset)); } ConfParamCStrW *e21 = new ConfParamCStrW( "defaultcharset", m_groupbox, ConfLink(new ConfLinkRclRep(config, "defaultcharset", &m_sk)), QObject::tr("Default
character set"), QObject::tr("Character set used for reading files " "which do not identify the character set " "internally, for example pure text files.
" "The default value is empty, " "and the value from the NLS environnement is used." ), charsets); e21->setImmediate(); m_widgets.push_back(e21); gl1->addWidget(e21, gridy++, 0); ConfParamBoolW *e3 = new ConfParamBoolW( "followLinks", m_groupbox, ConfLink(new ConfLinkRclRep(config, "followLinks", &m_sk)), QObject::tr("Follow symbolic links"), QObject::tr("Follow symbolic links while " "indexing. The default is no, " "to avoid duplicate indexing")); e3->setImmediate(); m_widgets.push_back(e3); gl1->addWidget(e3, gridy, 0); ConfParamBoolW *eafln = new ConfParamBoolW( "indexallfilenames", m_groupbox, ConfLink(new ConfLinkRclRep(config, "indexallfilenames", &m_sk)), QObject::tr("Index all file names"), QObject::tr("Index the names of files for which the contents " "cannot be identified or processed (no or " "unsupported mime type). Default true")); eafln->setImmediate(); m_widgets.push_back(eafln); gl1->addWidget(eafln, gridy++, 1); ConfParamIntW *ezfmaxkbs = new ConfParamIntW( "compressedfilemaxkbs", m_groupbox, ConfLink(new ConfLinkRclRep(config, "compressedfilemaxkbs", &m_sk)), tr("Max. compressed file size (KB)"), tr("This value sets a threshold beyond which compressed" "files will not be processed. Set to -1 for no " "limit, to 0 for no decompression ever."), -1, 1000000, -1); ezfmaxkbs->setImmediate(); m_widgets.push_back(ezfmaxkbs); gl1->addWidget(ezfmaxkbs, gridy, 0); ConfParamIntW *etxtmaxmbs = new ConfParamIntW( "textfilemaxmbs", m_groupbox, ConfLink(new ConfLinkRclRep(config, "textfilemaxmbs", &m_sk)), tr("Max. text file size (MB)"), tr("This value sets a threshold beyond which text " "files will not be processed. Set to -1 for no " "limit. \nThis is for excluding monster " "log files from the index."), -1, 1000000); etxtmaxmbs->setImmediate(); m_widgets.push_back(etxtmaxmbs); gl1->addWidget(etxtmaxmbs, gridy++, 1); ConfParamIntW *etxtpagekbs = new ConfParamIntW( "textfilepagekbs", m_groupbox, ConfLink(new ConfLinkRclRep(config, "textfilepagekbs", &m_sk)), tr("Text file page size (KB)"), tr("If this value is set (not equal to -1), text " "files will be split in chunks of this size for " "indexing.\nThis will help searching very big text " " files (ie: log files)."), -1, 1000000); etxtpagekbs->setImmediate(); m_widgets.push_back(etxtpagekbs); gl1->addWidget(etxtpagekbs, gridy, 0); ConfParamIntW *efiltmaxsecs = new ConfParamIntW( "filtermaxseconds", m_groupbox, ConfLink(new ConfLinkRclRep(config, "filtermaxseconds", &m_sk)), tr("Max. filter exec. time (s)"), tr("External filters working longer than this will be " "aborted. This is for the rare case (ie: postscript) " "where a document could cause a filter to loop. " "Set to -1 for no limit.\n"), -1, 10000); efiltmaxsecs->setImmediate(); m_widgets.push_back(efiltmaxsecs); gl1->addWidget(efiltmaxsecs, gridy++, 1); vboxLayout->addWidget(m_groupbox); subDirChanged(0, 0); LOGDEB("ConfSubPanelW::ConfSubPanelW: done\n"); } void ConfSubPanelW::loadValues() { LOGDEB("ConfSubPanelW::loadValues\n"); for (auto widget : m_widgets) { widget->loadValue(); } LOGDEB("ConfSubPanelW::loadValues done\n"); } void ConfSubPanelW::storeValues() { for (auto widget : m_widgets) { widget->storeValue(); } } void ConfSubPanelW::subDirChanged(QListWidgetItem *current, QListWidgetItem *) { LOGDEB("ConfSubPanelW::subDirChanged\n"); if (current == 0 || current->text() == "") { m_sk = ""; m_groupbox->setTitle(tr("Global")); } else { m_sk = qs2utf8s(current->text()); m_groupbox->setTitle(current->text()); } LOGDEB("ConfSubPanelW::subDirChanged: now [" << m_sk << "]\n"); loadValues(); LOGDEB("ConfSubPanelW::subDirChanged: done\n"); } void ConfSubPanelW::subDirDeleted(QString sbd) { LOGDEB("ConfSubPanelW::subDirDeleted(" << qs2utf8s(sbd) << ")\n"); if (sbd == "") { // Can't do this, have to reinsert it QTimer::singleShot(0, this, SLOT(restoreEmpty())); return; } // Have to delete all entries for submap (*m_config)->eraseKey(qs2utf8s(sbd)); } void ConfSubPanelW::restoreEmpty() { LOGDEB("ConfSubPanelW::restoreEmpty()\n"); m_subdirs->getListBox()->insertItem(0, ""); } recoll-1.43.12/qtgui/webcache.ui0000644000175000017500000000262215121730573015703 0ustar dockesdockes Webcache 0 0 400 300 Webcache editor TextLabel Search regexp searchLE QAbstractItemView::NoEditTriggers true false recoll-1.43.12/qtgui/preview_plaintorich.h0000644000175000017500000000623715121730573020037 0ustar dockesdockes/* Copyright (C) 2015 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _PREVIEW_PLAINTORICH_H_INCLUDED_ #define _PREVIEW_PLAINTORICH_H_INCLUDED_ #include "autoconfig.h" #include #include #include #include #include #include #include "plaintorich.h" /** Preview text highlighter */ class PlainToRichQtPreview : public PlainToRich { public: PlainToRichQtPreview(); void clear(); bool haveAnchors(); virtual std::string header(); virtual std::string startMatch(unsigned int grpidx); virtual std::string endMatch(); virtual std::string termAnchorName(int i) const; virtual std::string startChunk(); // Advance of rewind the current anchor. Returns the current anchor number inside the group // (which may be the total if we're walking the full list), as [1-N]. int nextAnchorNum(int grpidx); int prevAnchorNum(int grpidx); int anchorCount(int grpidx); QString curAnchorName() const; private: // Lists of anchor numbers (hit locations) for the term/groups in the query. The map key is an // index into the HighlightData.index_term_groups vector. Using a map and not a vector parallel // to the hldata one because the hits for this specific document will usually be a subset of // index_term_groups std::map> m_groupanchors; // Total number of anchors, all terms/groups counfounded. This is equal to the sum of sizes of // the above vectors, kept for convenience. int m_lastanchor; // Current anchor number when walking the hits with an empty search term. This goes from 0 to // m_lastanchor. int m_curanchor; // Walking the lists of matches inside a group: this stores the current index into the anchor // vector from m_groupanchors for the group of identical key. std::map m_groupcuranchors; bool m_spacehack{false}; }; /* A thread to convert to rich text (mark search terms) */ class ToRichThread : public QThread { Q_OBJECT public: ToRichThread(const std::string &i, const HighlightData& hd, std::shared_ptr ptr, QStringList& qrichlst, // Output QObject *parent = 0); virtual void run(); private: const std::string &m_input; const HighlightData &m_hdata; std::shared_ptr m_ptr; QStringList &m_output; }; #endif /* _PREVIEW_PLAINTORICH_H_INCLUDED_ */ recoll-1.43.12/qtgui/searchclause_w.cpp0000644000175000017500000001363715121730573017307 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "recoll.h" #include "log.h" #include "searchclause_w.h" #include #include #include #include #include #include #include using std::string; using namespace Rcl; /* * Constructs a SearchClauseW as a child of 'parent', with the * name 'name' and widget flags set to 'f'. */ SearchClauseW::SearchClauseW(QWidget* parent) : QWidget(parent) { QHBoxLayout* hLayout = new QHBoxLayout(this); sTpCMB = new QComboBox(this); sTpCMB->setEditable(false); hLayout->addWidget(sTpCMB); fldCMB = new QComboBox(this); fldCMB->setEditable(false); hLayout->addWidget(fldCMB); proxSlackSB = new QSpinBox(this); hLayout->addWidget(proxSlackSB); wordsLE = new QLineEdit(this); wordsLE->setMinimumSize(QSize(190, 0)); hLayout->addWidget(wordsLE); languageChange(); resize(QSize(0, 0).expandedTo(minimumSizeHint())); connect(sTpCMB, SIGNAL(activated(int)), this, SLOT(tpChange(int))); } /* * Sets the strings of the subwidgets using the current * language. */ void SearchClauseW::languageChange() { sTpCMB->clear(); sTpCMB->addItem(tr("Any")); // 0 sTpCMB->addItem(tr("All")); //1 sTpCMB->addItem(tr("None"));//2 sTpCMB->addItem(tr("Phrase"));//3 sTpCMB->addItem(tr("Proximity"));//4 sTpCMB->addItem(tr("File name"));//5 // sTpCMB->insertItem(tr("Complex clause"));//6 fldCMB->addItem(tr("No field")); if (theconfig) { auto fields = theconfig->getIndexedFields(); for (const auto& fld : fields) { // Some fields don't make sense here if (fld != "filename") { fldCMB->addItem(QString::fromUtf8(fld.c_str())); } } } // Ensure that the spinbox will be enabled/disabled depending on // combobox state tpChange(0); sTpCMB->setToolTip(tr("Select the type of query that will be performed with the words")); proxSlackSB->setToolTip(tr("Number of additional words that may be interspersed " "with the chosen ones")); } // Translate my window state into an Rcl search clause SearchDataClause *SearchClauseW::getClause() const { if (wordsLE->text().isEmpty()) return 0; string field; if (fldCMB->currentIndex() != 0) { field = (const char *)fldCMB->currentText().toUtf8(); } string text = (const char *)wordsLE->text().toUtf8(); switch (sTpCMB->currentIndex()) { case 0: return new SearchDataClauseSimple(SCLT_OR, text, field); case 1: return new SearchDataClauseSimple(SCLT_AND, text, field); case 2: { SearchDataClauseSimple *cl = new SearchDataClauseSimple(SCLT_OR, text, field); cl->setexclude(true); return cl; } case 3: return new SearchDataClauseDist(SCLT_PHRASE, text, proxSlackSB->value(), field); case 4: return new SearchDataClauseDist(SCLT_NEAR, text, proxSlackSB->value(), field); case 5: return new SearchDataClauseFilename(text); case 6: default: return 0; } } void SearchClauseW::setFromClause(SearchDataClauseSimple *cl) { LOGDEB("SearchClauseW::setFromClause\n" ); switch(cl->getTp()) { case SCLT_OR: if (cl->getexclude()) tpChange(2); else tpChange(0); break; case SCLT_AND: tpChange(1); break; case SCLT_PHRASE: tpChange(3); break; case SCLT_NEAR: tpChange(4); break; case SCLT_FILENAME: tpChange(5); break; default: return; } LOGDEB("SearchClauseW::setFromClause: calling erase\n" ); clear(); QString text = QString::fromUtf8(cl->gettext().c_str()); QString field = QString::fromUtf8(cl->getfield().c_str()); switch(cl->getTp()) { case SCLT_OR: case SCLT_AND: case SCLT_PHRASE: case SCLT_NEAR: if (!field.isEmpty()) { int idx = fldCMB->findText(field); if (idx >= 0) { fldCMB->setCurrentIndex(idx); } else { fldCMB->setEditText(field); } } /* FALLTHROUGH */ case SCLT_FILENAME: wordsLE->setText(text); break; default: break; } switch(cl->getTp()) { case SCLT_PHRASE: case SCLT_NEAR: { SearchDataClauseDist *cls = dynamic_cast(cl); proxSlackSB->setValue(cls->getslack()); } break; default: break; } } void SearchClauseW::clear() { wordsLE->setText(""); fldCMB->setCurrentIndex(0); proxSlackSB->setValue(0); } // Handle combobox change: may need to enable/disable the distance // spinbox and field spec void SearchClauseW::tpChange(int index) { if (index < 0 || index > 5) return; if (sTpCMB->currentIndex() != index) sTpCMB->setCurrentIndex(index); switch (index) { case 3: case 4: proxSlackSB->show(); proxSlackSB->setEnabled(true); if (index == 4) proxSlackSB->setValue(10); else proxSlackSB->setValue(0); break; default: proxSlackSB->close(); } if (index == 5) { fldCMB->close(); } else { fldCMB->show(); } } recoll-1.43.12/sampleconf/0000755000175000017500000000000015134672441014602 5ustar dockesdockesrecoll-1.43.12/sampleconf/mimemap0000644000175000017500000002327415121730573016157 0ustar dockesdockes# (C) 2004-2024 J.F.Dockes - GPL v2 # # Associations of file name extensions to MIME types. This is the first identification method tried # by recollindex, and it stops there if it succeeds. # If a file has no extension or an unknown extension, recollindex then checks internally if it # might be an mbox, then possibly executes the "file" or "xdg-mime" command, or, either on Windows # or on Linux for recent versions (1.38+), uses libmagic. # # All entries must be in lower case characters. File name extensions are lower-cased for comparison # during indexing, meaning that an upper or mixed case entry will never be matched. # # When creating a temporary file for a MIME type (e.g. temp file for display), the FIRST entry for # the MIME type will be used to determine the file suffix. This may be important if the app used # does not grok all the possible suffixes. .txt = text/plain .text = text/plain .rst = text/plain .md = text/markdown .gv = text/plain .desktop = text/plain .json = text/plain # .log is in the default noContentSuffixes, so this will also need a recoll.conf setting to do # anything .log = text/plain .srt = text/x-srt .ini = text/x-ini .csv = text/x-csv .bib = text/x-bibtex .org = text/x-orgmode # Source files. # Defining them with specific types allows using a specific ext viewer (in # mimeview). You can in general use rcltext to wrap them in html for # indexing the contents (and rough preview). You could also just set them # as text/plain (index as text, use text viewer) # It seems that basic source files have no specific MIME? .bas = text/plain .cpp = text/x-c .h = text/x-c .hpp = text/x-c++ .c = text/x-c .cc = text/x-c .cxx = text/x-c .hxx = text/x-c .cs = text/x-csharp .css = text/css .java = text/x-java .js = application/javascript .lua = text/x-lua .f = text/x-fortran .py = text/x-python .awk = application/x-awk .pl = application/x-perl .rb = text/x-ruby .sh = application/x-shellscript .sql = application/sql .tcl = text/x-tcl .el = text/x-lisp .ipynb = application/x-ipynb+json .xml = text/xml .opf = text/xml .note = application/x-gnote .rtf = text/rtf .html = text/html .htm = text/html .shtml = text/html .php = text/html .ics = text/calendar # .eml is used as an extension by several mail apps for a single message # saved in raw MIME format. Mainly used here to get Thunderbird to open an # extracted message. Also used by Windows Live Mail .eml = message/rfc822 .pst = application/vnd.ms-outlook .ost = application/vnd.ms-outlook .pdf = application/pdf .ps = application/postscript .eps = application/postscript .ai = application/postscript .tex = application/x-tex .dvi = application/x-dvi .djvu = image/vnd.djvu .svg = image/svg+xml .dia = application/x-dia-diagram # Compressed files .gz = application/x-gzip .Z = application/x-gzip .bz2 = application/x-bzip2 .lzma = application/x-lzma .xz = application/x-xz .zst = application/x-zstd # Archives .rar = application/x-rar .zip = application/zip .maff = application/zip .7z = application/x-7z-compressed # The rcltar.py module can handle compressed tar formats internally so we # use application/x-tar for all tar files compressed or not. Note that tar # file indexing is disabled by default, you'll need to copy and uncomment # the application/x-tar commented line from mimeconf into your personal config .tar = application/x-tar .tar.gz = application/x-tar .tgz = application/x-tar .tbz = application/x-tar .tar.bz2 = application/x-tar .hwp = application/x-hwp .doc = application/msword .dot = application/msword .ppt = application/vnd.ms-powerpoint .pps = application/vnd.ms-powerpoint .pot = application/vnd.ms-powerpoint .xls = application/vnd.ms-excel .xla = application/vnd.ms-excel .chm = application/x-chm .epub = application/epub+zip .kepub = application/epub+zip .mobi = application/x-mobipocket-ebook .lit = application/x-ms-reader # OpenOffice / opendocument. We handle opendocument as old openoffice files for now .ods = application/vnd.sun.xml.calc .sxc = application/vnd.sun.xml.calc .stc = application/vnd.sun.xml.calc.template .odg = application/vnd.sun.xml.draw .sxd = application/vnd.sun.xml.draw .std = application/vnd.sun.xml.draw.template .odp = application/vnd.sun.xml.impress .sxi = application/vnd.sun.xml.impress .sti = application/vnd.sun.xml.impress.template .sxm = application/vnd.sun.xml.math .odt = application/vnd.sun.xml.writer .sxw = application/vnd.sun.xml.writer .sxg = application/vnd.sun.xml.writer.global .stw = application/vnd.sun.xml.writer.template .fodp = application/vnd.oasis.opendocument.presentation-flat-xml .fodt = application/vnd.oasis.opendocument.text-flat-xml .fods = application/vnd.oasis.opendocument.spreadsheet-flat-xml # Apple .pages = application/vnd.apple.pages .numbers = application/vnd.apple.numbers .key = application/vnd.apple.keynote # ms openxml # .docm = application/vnd.ms-word.document.macroEnabled.12 .docm = application/vnd.openxmlformats-officedocument.wordprocessingml.document .docx = application/vnd.openxmlformats-officedocument.wordprocessingml.document # .dotm = application/vnd.ms-word.template.macroEnabled.12 .dotm = application/vnd.openxmlformats-officedocument.wordprocessingml.template .dotx = application/vnd.openxmlformats-officedocument.wordprocessingml.template # .potm = application/vnd.ms-powerpoint.template.macroEnabled.12 .potm = application/vnd.openxmlformats-officedocument.presentationml.template .potx = application/vnd.openxmlformats-officedocument.presentationml.template # .ppam = application/vnd.ms-powerpoint.addin.macroEnabled.12 .ppam = application/vnd.openxmlformats-officedocument.presentationml.presentation # .ppsm = application/vnd.ms-powerpoint.slideshow.macroEnabled.12 .ppsm = application/vnd.openxmlformats-officedocument.presentationml.presentation # .ppsx = application/vnd.openxmlformats-officedocument.presentationml.slideshow .ppsx = application/vnd.openxmlformats-officedocument.presentationml.presentation # .pptm = application/vnd.ms-powerpoint.presentation.macroEnabled.12 .pptm = application/vnd.openxmlformats-officedocument.presentationml.presentation .pptx = application/vnd.openxmlformats-officedocument.presentationml.presentation .vsdx = application/vnd.ms-visio.drawing .xlam = application/vnd.ms-excel.addin.macroEnabled.12 .xlsb = application/vnd.ms-excel.sheet.binary.macroEnabled.12 .xlsm = application/vnd.ms-excel.sheet.macroEnabled.12 .xlsx = application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xlsm = application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xltm = application/vnd.ms-excel.template.macroEnabled.12 .xltx = application/vnd.openxmlformats-officedocument.spreadsheetml.template .abw = application/x-abiword .lyx = application/x-lyx .sla = application/x-scribus .scd = application/x-scribus .info = application/x-gnuinfo .kwd = application/x-kword .gnumeric = application/x-gnumeric .gnm = application/x-gnumeric .wpd = application/vnd.wordperfect # Note: file -i says audio/x-midi, but soft karaoke files are special. .aiff = audio/x-aiff .aif = audio/x-aiff .aac = audio/aac .ape = audio/ape .dsf = audio/x-dsf .dff = audio/x-dff .flac = audio/flac .kar = audio/x-karaoke .m4a = audio/mp4 .mid = audio/x-karaoke .mp3 = audio/mpeg .mpc = audio/x-musepack .oga = application/ogg .ogg = application/ogg .ogx = audio/ogg .opus = audio/ogg .wav = audio/x-wav .wv = audio/x-wavpack .mkv = video/x-matroska .ogv = video/ogg .flv = video/x-flv .mp4 = video/mp4 .avi = video/x-msvideo .ts = video/MP2T .avci = image/avif .avcs = image/avif .bmp = image/bmp .gif = image/gif .heic = image/heic .heics = image/heic-sequence .heif = image/heif .heifs =image/heif-sequence .hif = image/avif .jp2 = image/jp2 .jpeg = image/jpeg .jpg = image/jpeg .nef = image/x-nikon-nef .nrw = image/x-nikon-nef .png = image/png .tif = image/tiff .tiff = image/tiff .xcf = image/x-xcf .xpm = image/x-xpmi .fb2 = text/x-fictionbook # This been used by Recoll for the Konqueror tar+gz web page archive forever. Unfortunately it # appears that this is supposed to be the MIME for the different Mac OS webarchive format. .war = application/x-webarchive # Because of back compat, use local MIME for the macos format .webarchive = application/x-mac-webarch .zip.html = application/x-sfz .mht = application/x-mimehtml .mhtml = application/x-mimehtml # Note: recoll_noindex has been obsoleted and moved to recoll.conf as # noContentSuffixes. recoll_noindex from your personal mimemap file is # still taken into account for now, but you should move its contents to the # new recoll.conf variable. # Special handling of .txt files inside ~/.gaim and ~/.purple directories [~/.gaim] .txt = text/x-gaim-log [~/.purple] .txt = text/x-purple-log .html = text/x-purple-html-log # Special handling of aptosid manual menu system [/usr/share/aptosid-manual] .htm = text/x-html-aptosid-man .html = text/x-html-aptosid-man # Special handling of sidux manual menu system [/usr/share/sidux-manual] .htm = text/x-html-sidux-man .html = text/x-html-sidux-man # Manual files. You may want to adjust the location for your system # We can't use the default text/troff type because this doesn't say # what macro set to use (groff -man) [/usr/share/man] .0p = text/x-man .1 = text/x-man .1m = text/x-man .1p = text/x-man .1ssl = text/x-man .1x = text/x-man .2 = text/x-man .3 = text/x-man .3curses = text/x-man .3form = text/x-man .3gl = text/x-man .3menu = text/x-man .3ncurses = text/x-man .3p = text/x-man .3pm = text/x-man .3ssl = text/x-man .3tiff = text/x-man .3x = text/x-man .4 = text/x-man .5 = text/x-man .5ssl = text/x-man .6 = text/x-man .6x = text/x-man .7 = text/x-man .7ssl = text/x-man .8 = text/x-man .9 = text/x-man .n = text/x-man # Special handling for okular notes [~/.kde4/share/apps/okular/docdata] .xml = application/x-okular-notes [~/.kde/share/apps/okular/docdata] .xml = application/x-okular-notes recoll-1.43.12/sampleconf/backends0000644000175000017500000000130315121730573016271 0ustar dockesdockes# This configuration file has a description of the active external indexers. See the manual for more # detail: Programming interface -> Python API -> Creating Python external indexers # # This file should be copied to your configuration directory (e.g. ~/.recoll) an possibly edited. # Unlike the other configuration files, no defaults are obtained from the shared configuration # directory: only the values from the user configuration are used. # The Joplin indexer is installed with recoll (filters/rcljoplin.py). # Because the indexer script is in the "filters" directory, there is no need for absolute paths [JOPLIN] fetch = rcljoplin.py fetch makesig = rcljoplin.py makesig index = rcljoplin.py index recoll-1.43.12/sampleconf/recoll-dark.css0000644000175000017500000000027415121730573017513 0ustar dockesdockes recoll-1.43.12/sampleconf/mimeview0000644000175000017500000002435615133361511016351 0ustar dockesdockes# @(#$Id: mimeview,v 1.16 2008-09-15 08:03:37 dockes Exp $ (C) 2004 J.F.Dockes ## ########################################## # External viewers, launched by the recoll GUI when you click on a result # 'edit' link # Mime types which we should not uncompress if they are found gzipped or # bzipped because the native viewer knows how to handle. These would be # exceptions and the list is normally empty #nouncompforviewmts = # For releases 1.18 and later: exceptions when using the x-all entry: these # types will use their local definition. This is useful, e.g.: # # - for pdf, where we can pass additional parameters like page to open and # search string # - For pages of CHM and EPUB documents where we can choose to open the # parent document instead of a temporary html file. # Use xallexcepts- and xallexcepts+ in a user file to add or remove from # the default xallexcepts list # Visio xml is in there because the desktops tend to try and open it as an # archive xallexcepts = application/pdf application/postscript application/x-dvi \ text/html|gnuinfo text/html|chm text/html|epub text/html|rclman \ application/vnd.ms-visio.drawing application/x-ipynb+json \ text/x-orgmode text/x-orgmode-sub application/x-joplin-note [view] # Pseudo entry used if the 'use desktop' preference is set in the GUI. # Note that we use %U to url-encode the parameter application/x-all = xdg-open %U # But do use the uncoded url for help (F1) because the fragment in there must # actually be processed. The way we process URLs is preposterous and needs a complete overhaul text/html|rclman = xdg-open %u application/epub+zip = ebook-viewer %f # Open the parent epub document for epub parts instead of opening them as # html documents. This is almost always what we want. text/html|epub = ebook-viewer %F;ignoreipath=1 application/x-ipynb+json = jupyter notebook %f application/x-gnote = gnote %f # Note %u not U hence the exception? application/x-joplin-note = xdg-open %u application/x-mobipocket-ebook = ebook-viewer %f application/x-kword = kword %f application/x-abiword = abiword %f application/x-hwp = libreoffice # Note: the evince clones, atril and xread, have the same options application/pdf = evince --page-index=%p --find=%S %f # Or: #application/pdf = qpdfview --search %s %f#%p # Or okular. Old versions had no --find option so you may need to edit this. #application/pdf = okular --unique --find %s -p %p %f application/postscript = evince --page-index=%p --find=%s %f application/x-dvi = evince --page-index=%p --find=%s %f application/x-lyx = lyx %f application/x-scribus = scribus %f application/msword = libreoffice %f application/vnd.ms-excel = libreoffice %f application/vnd.ms-powerpoint = libreoffice %f application/vnd.oasis.opendocument.text = libreoffice %f application/vnd.oasis.opendocument.presentation = libreoffice %f application/vnd.oasis.opendocument.spreadsheet = libreoffice %f application/vnd.oasis.opendocument.graphics = libreoffice %f application/vnd.oasis.opendocument.presentation-flat-xml = libreoffice %f application/vnd.oasis.opendocument.spreadsheet-flat-xml = libreoffice %f application/vnd.oasis.opendocument.text-flat-xml = libreoffice %f application/vnd.oasis.opendocument.text-template = libreoffice %f application/vnd.openxmlformats-officedocument.wordprocessingml.document = libreoffice %f application/vnd.openxmlformats-officedocument.wordprocessingml.template = libreoffice %f application/vnd.openxmlformats-officedocument.presentationml.template = libreoffice %f application/vnd.ms-visio.drawing = libreoffice %f application/vnd.openxmlformats-officedocument.presentationml.presentation = libreoffice %f application/vnd.openxmlformats-officedocument.spreadsheetml.sheet = libreoffice %f application/vnd.openxmlformats-officedocument.spreadsheetml.template = libreoffice %f application/vnd.sun.xml.calc = libreoffice %f application/vnd.sun.xml.calc.template = libreoffice %f application/vnd.sun.xml.draw = libreoffice %f application/vnd.sun.xml.draw.template = libreoffice %f application/vnd.sun.xml.impress = libreoffice %f application/vnd.sun.xml.impress.template = libreoffice %f application/vnd.sun.xml.math = libreoffice %f application/vnd.sun.xml.writer = libreoffice %f application/vnd.sun.xml.writer.global = libreoffice %f application/vnd.sun.xml.writer.template = libreoffice %f application/vnd.wordperfect = libreoffice %f application/vnd.apple.pages = libreoffice %f application/vnd.apple.numbers = libreoffice %f application/vnd.apple.keynote = libreoffice %f text/rtf = libreoffice %f application/rtf = libreoffice %f application/x-dia-diagram = dia %f # Both dolphin and nautilus can pre-select a file inside a directory. Thunar can't afaik. xdg-open # can't pass additional parameters, so the directory MIME types used to be included in xallexcepts, # but this caused problems to Mint Cinnamon (nemo) users. So the default for directories is now # switched back to using desktop default, to be customized by adventurous users. application/x-fsdirectory = dolphin %f inode/directory = dolphin %f application/x-fsdirectory|parentopen = dolphin --select %(childurl) %f inode/directory|parentopen = dolphin --select %(childurl) %f #application/x-fsdirectory|parentopen = nautilus -w -s %(childurl) #inode/directory|parentopen = nautilus -w -s %(childurl) application/x-gnuinfo = xterm -e "info -f %f" application/x-gnumeric = gnumeric %f application/x-flac = vlc --start-time %p %f audio/flac = vlc --start-time %p %f audio/mpeg = vlc --start-time %p %f audio/aac = vlc --start-time %p %f audio/ape = vlc --start-time %p %f audio/mp4 = vlc --start-time %p %f audio/ogg = vlc --start-time %p %f audio/x-musepack = vlc --start-time %p %f audio/x-wavpack = vlc --start-time %p %f application/ogg = vlc --start-time %p %f audio/x-karaoke = kmid %f image/vnd.djvu = djview %f image/jpeg = ristretto %f image/jp2 = ristretto %f image/png = ristretto %f image/tiff = ristretto %f image/gif = ristretto %f image/bmp = ristretto %f image/x-ms-bmp = ristretto %f image/x-xpmi = ristretto %f image/heic = ristretto %f image/heic-sequence = ristretto %f image/heif = ristretto %f image/heif-sequence = ristretto %f image/avif = ristretto %f image/x-xcf = gimp %f image/x-nikon-nef = ufraw %f image/svg+xml = inkview %f # Opening email messages: the method will depend on your email client. # See: https://www.recoll.org/faqsandhowtos/email-opening.html # - Evolution: you need to extract and store the Message-Id headers. See page linked above. # - Thunderbird: will only open a single-message file if it has an .eml # extension, else they will open a 'create message' window with the file as an attachment. # Use an intermediate shell script to create a symbolic link with a ".eml" extension. The script # is distributed with recoll, so just enable it. # - "sylpheed %f" seems to work ok as of version 3.3 # - "kmail --view %u" works # - "claws-mail --select %f" works message/rfc822 = thunderbird-open-message.sh %f # Evolution: this needs the following in $RECOLL_CONFDIR/fields: # [stored] # msgid= # [mail] # Message-Id = msgid #message/rfc822 = evolution mid:%(msgid) text/x-mail = thunderbird -file %f application/x-mimehtml = thunderbird -file %f text/calendar = evolution %f application/x-okular-notes = okular %f application/x-rar = ark %f application/x-tar = ark %f application/zip = ark %f application/x-7z-compressed = ark %f application/javascript = emacsclient --no-wait %f application/x-awk = emacsclient --no-wait %f application/x-bibtex = emacsclient --no-wait %f application/x-csharp = emacsclient --no-wait %f application/x-java = emacsclient --no-wait %f application/x-perl = emacsclient --no-wait %f application/x-php = emacsclient --no-wait %f application/x-ruby = emacsclient --no-wait %f application/x-shellscript = emacsclient --no-wait %f text/x-bibtex = emacsclient --no-wait %f text/css = emacsclient --no-wait %f text/x-csharp = emacsclient --no-wait %f text/x-java = emacsclient --no-wait %f text/x-lisp = emacsclient --no-wait %f text/x-perl = emacsclient --no-wait %f text/x-ruby = emacsclient --no-wait %f text/x-shellscript = emacsclient --no-wait %f text/x-srt = emacsclient --no-wait %f text/x-tcl = emacsclient --no-wait %f # Or firefox -remote "openFile(%u)" text/html = firefox %u application/x-chm-html = %u text/x-chm-html = %u # gnu info nodes are translated to html with a "gnuinfo" # rclaptg. rclshowinfo knows how to start the info command on the right # node text/html|gnuinfo = rclshowinfo %F %(title);ignoreipath=1 application/x-webarchive = konqueror %f application/x-mac-webarch = safari %f text/x-fictionbook = ebook-viewer %f application/x-javascript = emacsclient --no-wait %f application/sql = emacsclient --no-wait %f application/x-tex = emacsclient --no-wait %f application/xml = emacsclient --no-wait %f text/xml = emacsclient --no-wait %f text/x-tex = emacsclient --no-wait %f text/markdown = emacsclient --no-wait %f text/plain = emacsclient --no-wait %f text/x-awk = emacsclient --no-wait %f text/x-c = emacsclient --no-wait %f text/x-lua = emacsclient --no-wait %f text/x-c+ = emacsclient --no-wait %f text/x-c++ = emacsclient --no-wait %f text/x-csv = libreoffice %f text/x-html-sidux-man = konqueror %f text/x-html-aptosid-man = iceweasel %f text/x-orgmode-sub = emacsclient --no-wait %F text/x-orgmode = emacsclient --no-wait %f application/x-chm = kchmviewer %f # Html pages inside a chm have a chm rclaptg set by the filter. Kchmviewer # knows how to use the ipath (which is the internal chm path) to open the # file at the right place text/html|chm = kchmviewer --url %i %F text/x-ini = emacsclient --no-wait %f text/x-man = xterm -u8 -e "groff -T ascii -man %f | more" text/x-python = idle %f text/x-gaim-log = emacsclient --no-wait %f text/x-purple-html-log = emacsclient --no-wait %f text/x-purple-log = emacsclient --no-wait %f # The video types will usually be handled by the desktop default, but they need entries here to get # an "Open" link (this is not the case any more). Anyway, could be used to set exceptions. video/3gpp = vlc --start-time %p %f video/mp2p = vlc --start-time %p %f video/mp2t = vlc --start-time %p %f video/mp4 = vlc --start-time %p %f video/mpeg = vlc --start-time %p %f video/quicktime = vlc --start-time %p %f video/x-matroska = vlc --start-time %p %f video/x-ms-asf = vlc --start-time %p %f video/x-msvideo = vlc --start-time %p %f recoll-1.43.12/sampleconf/recoll.qss0000644000175000017500000000360114753313624016613 0ustar dockesdockes/* Copyright (C) 2004 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* This is an embryonic example Qt style sheet for Recoll. It is not really supposed to be less ugly than the default look, it's just provided in hope that someone with better taste will want to step in, or you can use it to indulge your preference for bright red backgrounds... If you do want to use it, and encounter a difficulty due to (lack of) widget object names or whatever, please get in touch, I'll fix what needs to be. Please check http://developer.qt.nokia.com/doc/qt-4.8/stylesheet.html for Qt style sheet information. */ /* Use a light grey background by default (lighter than the usual qt default): */ * { background: #eeeeee; } /* Use a light yellow background for all text display areas: */ QComboBox[editable="true"], QTextEdit, QLineEdit, QTextBrowser, QTableView, QWebView, QPlainTextEdit { background: #ffffee; color: black; } /* Keep a white background for the QTextEdit inside the Preview window This is rather arbitrary, just to show how to do it: */ Preview QTextEdit { background: white; color: black; font-family: Serif; font-size: 12pt; } recoll-1.43.12/sampleconf/fragment-buttons.xml0000644000175000017500000000345415121730573020626 0ustar dockesdockes -rclbes:BGL rclbes:BGL issub:0 issub:1 date:2010-01-01/2010-12-31 ext:cpp OR ext:cxx dir:/my/great/directory recoll-1.43.12/sampleconf/macos/0000755000175000017500000000000015121730573015701 5ustar dockesdockesrecoll-1.43.12/sampleconf/macos/mimeview0000644000175000017500000000045115121730573017446 0ustar dockesdockes# External viewers, launched by the recoll GUI when you click on a result # 'Open' link - MAC version # On the MAC, we use "open" for everything, no exceptions at the moment. xallexcepts = [view] # Pseudo entry used if the 'use desktop' preference is set in the GUI application/x-all = open %f recoll-1.43.12/sampleconf/recoll-common.css0000644000175000017500000000021315121730573020053 0ustar dockesdockes recoll-1.43.12/sampleconf/recoll-dark.qss0000644000175000017500000000354315121730573017533 0ustar dockesdockes/* Embryonic dark mode If you do want to use and improve it, and encounter a difficulty due to (lack of) widget object names or whatever, please get in touch, I'll fix what needs to be. You can have a look at http://doc.qt.io/qt-5/stylesheet-syntax.html for Qt style sheet information. Select the file from the GUI with: Preferences->GUI configuration->User interface->Style sheet->Choose You will also need to change the HTML style which controls the result list: Preferences->GUI configuration->Result list-> Edit result page html header insert See recoll-dark.css in src/sampleconf of share/examples */ /* Light on dark text everywhere*/ * { background-color: #373737; color: #ffffff; selection-background-color: #424e72; selection-color: #ffffff; } QTableView { alternate-background-color: #474747; background-color: #373737; } QHeaderView::section { background-color: #373737; } QToolTip { background-color: yellow; color: black; } QMenuBar::item:selected { background: #424e72; } /* I have used the colour values that were in QTabWidget QTabBar::tab for * QTabWidget QTabBar::tab:selected, and vice-versa. Also, though, I have * brightened the whites.*/ QTabWidget QTabBar::tab { background: #5f5f5f; color: #ffffff; } QTabWidget QTabBar::tab:selected { background: #2f4f4f; color: #ffffff; } /* Slightly *darker* background for text entry areas. */ QComboBox[editable="true"], QTextEdit[editable="true"], QLineEdit, QPlainTextEdit { background-color: #101010; color: #ffffff; } QPushButton:!enabled { background-color: #505050; } QToolButton:on { background-color: #505050; } /* Did not find a way to set the background on the indicator/icon part */ QMenu::item:checked { background: #505050; } QMenu::item:!enabled { color: #808080; } recoll-1.43.12/sampleconf/mimeconf0000644000175000017500000005404215121730573016324 0ustar dockesdockes# (C) 2004 J.F.Dockes # This file contains most of the data which determines how we # handle the different mime types (also see the "mimeview" file). # Sections: # top-level: Decompression parameters. Should not be at top-level, historical. # [index] : Associations of mime types to the filters that translate them # to plain text or html. # [icons] : Associations of mime types to result list icons (GUI) # [categories] : groupings of mime types (media, text, message etc.) # [guifilters] : defines the filtering checkboxes in the GUI. Uses the # above categories by default ## ####################################### # Decompression: these types need a first pass to create a temp file to # work with. We use a script because uncompress utilities usually work in # place, which is not suitable. # # Obviously this should be in a [decompress] section or such, but it was # once forgotten and remained global for compatibility. The first word # 'uncompress' should have been the section name and has no other meaning. # # The second word is the name of a script or program to execute to # produce an uncompressed copy (e.g.: rcluncomp). It must output the # uncompressed file name on stdout, and produce no data out of the # temporary directory given as parameter. The uncompressed file name should # preserve the original file extension (i.e. use gunzip myfile.doc.gz not # gunzip < myfile.doc.gz > myfile.whateverwrongextension) # # The %t parameter will be substituted to the name of a temporary directory # by recoll. This directory is guaranteed empty when calling the filter. # # The %f parameter will be substituted with the input file. # # Note that it should be possible to improve performance a lot by writing a # compressor-specific script instead of the generic rcluncomp which will # copy the compressed file into the temporary directory as a first step in # all cases. # application/gzip = uncompress rcluncomp gunzip %f %t application/x-bzip2 = uncompress rcluncomp bunzip2 %f %t application/x-compress = uncompress rcluncomp gunzip %f %t application/x-gzip = uncompress rcluncomp gunzip %f %t application/x-lzma = uncompress rcluncomp unxz %f %t application/x-xz = uncompress rcluncomp unxz %f %t application/x-zstd = uncompress rcluncomp "unzstd --rm -q" %f %t ## ################################### # Filters for indexing and internal preview. # The "internal" filters are hardwired in the c++ code. # The external "exec" filters are typically scripts. By default, they output the # document in simple html format, have a look at the scripts. # A different format (ie text/plain), and a character set can be defined for # each filter, see the exemples below (ie: msword) [index] # MSWORD: the rcldoc script handles a number of marginal case that raw # antiword won't: # - with wvWare: "text stream of this file is too small to handle" # - with unrtf: rtf files disguising as doc files. # The default is now again to use rcldoc. Use raw antiword if speed is more # important for you than catching all data, application/msword = execm rcldoc.py #application/msword = exec antiword -t -i 1 -m UTF-8;mimetype=text/plain # You can also use wvware directly but it's much slower. # application/msword = exec wvWare --charset=utf-8 --nographics application/vnd.ms-excel = execm rclxls.py application/vnd.ms-outlook = execm rclpst.py application/vnd.ms-powerpoint = execm rclppt.py # Also handle the mime type returned by "file -i" for a suffix-less word file. # This could probably just as well be an excel file, but we have to chose one. application/vnd.ms-office = execm rcldoc.py application/vnd.sun.xml.writer = internal xsltproc \ meta meta.xml opendoc-meta.xsl \ body content.xml opendoc-body.xsl application/vnd.sun.xml.draw = as application/vnd.sun.xml.writer application/vnd.sun.xml.draw.template = as application/vnd.sun.xml.writer application/vnd.sun.xml.impress = as application/vnd.sun.xml.writer application/vnd.sun.xml.impress.template = as application/vnd.sun.xml.writer application/vnd.sun.xml.math = as application/vnd.sun.xml.writer application/vnd.sun.xml.writer.global = as application/vnd.sun.xml.writer application/vnd.sun.xml.writer.template = as application/vnd.sun.xml.writer # Really big spreadsheets cause libxml/xslt memory issues, but are converted ok by soffice, which is # too slow to start for small spreadsheets. application/vnd.sun.xml.calc = decide sizekbs < 3000 ? \ internal xsltproc meta meta.xml opendoc-meta.xsl body content.xml opendoc-body.xsl : \ exec rclrunsoffice.py ; mimetype = text/html application/vnd.sun.xml.calc.template = as application/vnd.sun.xml.calc # These are aliases for the vnd.sun equivalents. application/vnd.oasis.opendocument.text = as application/vnd.sun.xml.calc application/vnd.oasis.opendocument.text-template = as application/vnd.sun.xml.calc application/vnd.oasis.opendocument.presentation = as application/vnd.sun.xml.calc application/vnd.oasis.opendocument.spreadsheet = as application/vnd.sun.xml.calc application/vnd.oasis.opendocument.graphics = as application/vnd.sun.xml.calc application/vnd.oasis.opendocument.presentation-flat-xml = internal xsltproc opendoc-flat.xsl application/vnd.oasis.opendocument.text-flat-xml = internal xsltproc opendoc-flat.xsl application/vnd.oasis.opendocument.spreadsheet-flat-xml = decide sizekbs < 3000 ? \ internal xsltproc opendoc-flat.xsl : exec rclrunsoffice.py ; mimetype = text/html application/vnd.openxmlformats-officedocument.wordprocessingml.document = \ internal xsltproc meta docProps/core.xml openxml-meta.xsl \ body word/document.xml openxml-word-body.xsl \ body word/footnotes.xml openxml-word-body.xsl \ body word/comments.xml openxml-word-body.xsl \ body word/endnotes.xml openxml-word-body.xsl application/vnd.openxmlformats-officedocument.wordprocessingml.template = as \ application/vnd.openxmlformats-officedocument.wordprocessingml.document # Big excel spreadsheets probably cause a memory issue like the libreoffice ones. application/vnd.openxmlformats-officedocument.spreadsheetml.sheet = \ internal xsltproc meta docProps/core.xml openxml-meta.xsl \ body xl/sharedStrings.xml openxml-xls-body.xsl \ body xl/worksheets/sheet*.xml openxml-xls-body.xsl application/vnd.openxmlformats-officedocument.spreadsheetml.template = as \ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet # Powerpoint and Visio are now processed by the C++ libxsl-based module which has gained the # capability to process an indeterminate number of body pages. The Python handler is still around # because it is of course easier to customise, and can also process xlsx and docx. #application/vnd.openxmlformats-officedocument.presentationml.template = execm rclopxml.py #application/vnd.openxmlformats-officedocument.presentationml.presentation = execm rclopxml.py application/vnd.openxmlformats-officedocument.presentationml.presentation = \ internal xsltproc meta docProps/core.xml openxml-meta.xsl \ body ppt/slides/slide*.xml openxml-ppt-body.xsl \ body ppt/notesSlides/notesSlide*.xml openxml-ppt-body.xsl application/vnd.openxmlformats-officedocument.presentationml.template = as \ application/vnd.openxmlformats-officedocument.presentationml.presentation #application/vnd.ms-visio.drawing = execm rclopxml.py application/vnd.ms-visio.drawing = \ internal xsltproc meta docProps/core.xml openxml-meta.xsl \ body visio/pages/page*.xml openxml-visio-body.xsl #application/x-mobipocket-ebook = execm rclmobi #application/x-tar = execm rcltar.py # libmagic mis-identifies .emacs as application/x-elc for some reason application/x-elc = internal text/plain text/x-lisp = internal text/plain application/x-sfz = execm rclsfz.py application/epub+zip = execm rclepub.py application/x-ipynb+json = exec jupyter nbconvert --to html --stdout ; mimetype = text/html application/javascript = internal text/plain application/ogg = execm rclaudio.py application/pdf = execm rclpdf.py application/postscript = exec rclps application/sql = internal text/plain # This is quite slow because it executes soffice, and maybe shoudld not enabled by default. application/vnd.apple.pages = execm rclpages.py application/vnd.apple.numbers = execm rclpages.py application/vnd.apple.keynote = execm rclpages.py application/vnd.wordperfect = exec wpd2html;mimetype=text/html application/x-7z-compressed = execm rcl7z.py application/x-abiword = internal xsltproc abiword.xsl application/x-awk = internal text/plain application/x-chm = execm rclchm.py application/x-dia-diagram = execm rcldia.py;mimetype=text/plain application/x-dvi = exec rcldvi audio/flac = execm rclaudio.py application/x-gnote = execm rclxml.py application/x-gnuinfo = execm rclinfo.py application/x-gnumeric = internal xsltproc gnumeric.xsl application/x-hwp = execm rclhwp.py application/x-joplin-note = internal text/plain application/x-kword = exec rclkwd application/x-lyx = exec rcllyx application/x-mimehtml = internal message/rfc822 application/x-okular-notes = internal xsltproc okular-note.xsl application/x-perl = internal text/plain application/x-php = internal text/plain application/x-rar = execm rclrar.py;charset=default application/x-ruby = internal text/plain application/x-scribus = exec rclscribus application/x-shellscript = internal text/plain application/x-tex = exec rcltex application/x-webarchive = execm rclwar.py application/x-mac-webarch = execm rclwebarch.py application/x-zerosize = internal application/zip = execm rclzip.py;charset=default audio/aac = execm rclaudio.py audio/ape = execm rclaudio.py audio/mp4 = execm rclaudio.py audio/mpeg = execm rclaudio.py audio/ogg = execm rclaudio.py audio/x-aiff = execm rclaudio.py audio/x-dsf = execm rclaudio.py audio/x-dff = execm rclaudio.py audio/x-karaoke = execm rclkar.py audio/x-musepack = execm rclaudio.py audio/x-wav = execm rclaudio.py audio/x-wavpack = execm rclaudio.py image/gif = execm rclimg image/jp2 = execm rclimg image/jpeg = execm rclimg image/png = execm rclimg image/svg+xml = internal xsltproc svg.xsl image/tiff = execm rclimg image/vnd.djvu = execm rcldjvu.py image/x-nikon-nef = execm rclimg image/x-xcf = execm rclimg image/heic = execm rclimg image/heic-sequence = execm rclimg image/heif = execm rclimg image/heif-sequence = execm rclimg image/avif = execm rclimg inode/symlink = internal inode/x-empty = internal application/x-zerosize message/rfc822 = internal text/calendar = execm rclics.py;mimetype=text/plain text/css = internal text/plain text/html = internal text/markdown = execm rclmd.py text/plain = internal # See comment in mh_execm.cpp about text/plain1 text/plain1 = internal text/rtf = exec unrtf --nopict --html;mimetype=text/html application/rtf = exec unrtf --nopict --html;mimetype=text/html text/x-bibtex = exec rclbibtex.sh ; mimetype = text/plain text/x-c = internal text/x-c+ = internal text/x-c++ = internal text/x-chm-html = internal text/html # Stupid xdg-mime type for COPYING files text/x-copying = internal text/plain text/x-csharp = internal text/plain text/x-csv = internal text/plain text/x-fictionbook = internal xsltproc fb2.xsl text/x-gaim-log = exec rclgaim text/x-html-aptosid-man = exec rclaptosidman text/x-ini = internal text/plain text/x-java = internal text/plain text/x-lua = internal text/x-mail = internal text/x-man = exec rclman;maxseconds=30 text/x-orgmode = execm rclorgmode.py text/x-orgmode-sub = internal text/plain text/x-perl = internal text/plain text/x-purple-html-log = internal text/html text/x-purple-log = exec rclpurple text/x-python = execm rclpython.py text/x-rpm-spec = internal text/plain text/x-ruby = internal text/x-shellscript = internal text/plain text/x-srt = internal text/plain text/x-tcl = internal text/plain text/x-tex = exec rcltex video/mp4 = execm rclaudio.py video/x-msvideo = execm rclimg # Generic XML is best indexed as text, else it generates too many errors # All parameter and tag names, attribute values etc, are indexed as # text. rclxml.py tries to just index the text content. #application/xml = execm rclxml.py #text/xml = internal xsltproc xml.xsl application/xml = internal text/plain text/xml = internal text/plain ## ############################################# # Icons to be used in the result list if required by gui config [icons] application/epub+zip = book application/javascript = source application/javascript = source application/msword = wordprocessing application/ogg = sownd application/pdf = pdf application/postscript = postscript application/sql = source application/x-elc = source text/x-lisp = source application/x-joplin-note = document application/x-ipynb+json = document application/vnd.ms-excel = spreadsheet application/vnd.ms-office = document application/vnd.ms-outlook = document application/vnd.ms-powerpoint = presentation application/vnd.oasis.opendocument.presentation = presentation application/vnd.oasis.opendocument.spreadsheet = spreadsheet application/vnd.oasis.opendocument.text = wordprocessing application/vnd.oasis.opendocument.graphics = presentation application/vnd.oasis.opendocument.presentation-flat-xml = presentation application/vnd.oasis.opendocument.spreadsheet-flat-xml = spreadsheet application/vnd.oasis.opendocument.text-flat-xml = wordprocessing application/vnd.oasis.opendocument.text-template = wordprocessing application/vnd.openxmlformats-officedocument.presentationml.presentation = presentation application/vnd.openxmlformats-officedocument.presentationml.template = presentation application/vnd.openxmlformats-officedocument.spreadsheetml.sheet = spreadsheet application/vnd.openxmlformats-officedocument.spreadsheetml.template = spreadsheet application/vnd.openxmlformats-officedocument.wordprocessingml.document = wordprocessing application/vnd.openxmlformats-officedocument.wordprocessingml.template = wordprocessing application/vnd.ms-visio.drawing = document application/vnd.sun.xml.calc = spreadsheet application/vnd.sun.xml.calc.template = spreadsheet application/vnd.sun.xml.draw = drawing application/vnd.sun.xml.draw.template = drawing application/vnd.sun.xml.impress = presentation application/vnd.sun.xml.impress.template = presentation application/vnd.sun.xml.math = wordprocessing application/vnd.sun.xml.writer = wordprocessing application/vnd.sun.xml.writer.global = wordprocessing application/vnd.sun.xml.writer.template = wordprocessing application/vnd.apple.pages = wordprocessing application/vnd.apple.numbers = spreadsheet application/vnd.apple.keynote = presentation application/vnd.wordperfect = wordprocessing application/x-7z-compressed = archive application/x-abiword = wordprocessing application/x-awk = source application/x-chm = book application/x-dia-diagram = drawing application/x-dvi = document application/x-flac = sownd audio/x-flac = sownd audio/flac = sownd application/x-fsdirectory = folder application/x-gnote = document application/x-gnuinfo = book application/x-gnumeric = spreadsheet application/x-kword = wordprocessing application/x-lyx = wordprocessing application/x-mimehtml = message application/x-mobipocket-ebook = document application/x-okular-notes = document application/x-perl = source application/x-php = source application/x-rar = archive application/x-ruby = source application/x-scribus = document application/x-scribus = wordprocessing application/x-sfz = html application/x-shellscript = source application/x-tar = archive application/x-tex = wordprocessing application/x-webarchive = archive application/x-mac-webarch = archive application/xml = document application/zip = archive audio/aac = sownd audio/ape = sownd audio/mp4 = sownd audio/mpeg = sownd audio/ogg = sownd audio/x-karaoke = sownd audio/x-musepack = sownd audio/x-wavpack = sownd image/bmp = image image/gif = image image/jp2 = image image/jpeg = image image/png = image image/svg+xml = drawing image/tiff = image image/vnd.djvu = document image/x-nikon-nef = image image/x-xcf = image image/x-xpmi = image image/x-xcf = image image/heic = image image/heic-sequence = image image/heif = image image/heif-sequence = image image/avif = image inode/directory = folder inode/symlink = emblem-symbolic-link message/rfc822 = message text/css = html text/html = html text/html|chm = bookchap text/html|epub = bookchap text/html|gnuinfo = bookchap text/markdown = txt text/plain = txt text/rtf = wordprocessing application/rtf = wordprocessing text/x-bibtex = txt text/x-c = source text/x-c+ = source text/x-c++ = source text/x-chm-html = html text/x-csharp = source text/x-csv = txt text/x-fictionbook = book text/x-html-aptosid-man = aptosid-book text/x-ini = txt text/x-java = source text/x-lua = source text/x-mail = message text/x-man = document text/x-orgmode = document text/x-orgmode-sub = document text/x-perl = source text/x-php = source text/x-purple-html-log = pidgin text/x-purple-log = pidgin text/x-python = text-x-python text/x-rpm-spec = source text/x-ruby = source text/x-shellscript = source text/x-srt = source text/x-tcl = source text/x-tex = wordprocessing text/xml = document video/3gpp = video video/mp2p = video video/mp2t = video video/mp4 = video video/mpeg = video video/quicktime = video video/x-matroska = video video/x-ms-asf = video video/x-msvideo = video [categories] # Categories group mime types by "kind". They can be used from the query # language as an "rclcat" clause. This is fully dynamic, you can change the # names and groups as you wish, only the mime types are stored in the index. # # If you add/remove categories, you may also want to change the # "guifilters" section below. text = \ application/epub+zip \ application/javascript \ application/msword \ application/pdf \ application/postscript \ application/x-elc \ application/sql \ application/vnd.oasis.opendocument.text \ application/vnd.oasis.opendocument.text-flat-xml \ application/vnd.oasis.opendocument.text-template \ application/vnd.openxmlformats-officedocument.wordprocessingml.document \ application/vnd.openxmlformats-officedocument.wordprocessingml.template \ application/vnd.sun.xml.writer \ application/vnd.sun.xml.writer.global \ application/vnd.sun.xml.writer.template \ application/vnd.apple.pages \ application/vnd.wordperfect \ application/x-abiword \ application/vnd.ms-office \ application/x-awk \ application/x-chm \ application/x-dvi \ application/x-gnote \ application/x-gnuinfo \ application/x-ipynb+json \ application/x-joplin-note \ application/x-kword \ application/x-lyx \ application/x-mobipocket-ebook \ application/x-okular-notes \ application/x-perl \ application/x-php \ application/x-ruby \ application/x-sfz \ application/x-scribus \ application/x-shellscript \ application/x-tex \ application/xml \ text/xml \ text/x-csv \ text/x-tex \ image/vnd.djvu \ text/calendar \ text/css \ text/html \ text/markdown \ text/plain \ text/rtf \ application/rtf \ text/x-bibtex \ text/x-c \ text/x-c++ \ text/x-c+ \ text/x-chm-html \ text/x-csharp \ text/x-lua \ text/x-fictionbook \ text/x-html-aptosid-man \ text/x-html-sidux-man \ text/x-ini \ text/x-java \ text/x-lisp \ text/x-man \ text/x-orgmode \ text/x-orgmode-sub \ text/x-perl \ text/x-php \ text/x-python \ text/x-rpm-spec \ text/x-ruby \ text/x-shellscript \ text/x-srt \ text/x-tcl spreadsheet = \ application/vnd.apple.numbers \ application/vnd.ms-excel \ application/vnd.oasis.opendocument.spreadsheet \ application/vnd.oasis.opendocument.spreadsheet-flat-xml \ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet \ application/vnd.openxmlformats-officedocument.spreadsheetml.template \ application/vnd.sun.xml.calc \ application/vnd.sun.xml.calc.template \ application/x-gnumeric \ presentation = \ application/vnd.apple.keynote \ application/vnd.ms-powerpoint \ application/vnd.oasis.opendocument.graphics \ application/vnd.oasis.opendocument.presentation \ application/vnd.oasis.opendocument.presentation-flat-xml \ application/vnd.openxmlformats-officedocument.presentationml.presentation \ application/vnd.openxmlformats-officedocument.presentationml.template \ application/vnd.sun.xml.impress \ application/vnd.sun.xml.impress.template \ application/vnd.ms-visio.drawing media = \ application/ogg \ application/x-flac \ audio/* \ image/* \ video/* \ message = \ message/rfc822 \ text/x-gaim-log \ text/x-mail \ text/x-purple-html-log \ text/x-purple-log \ other = \ application/vnd.ms-outlook \ application/vnd.sun.xml.draw \ application/vnd.sun.xml.draw.template \ application/vnd.sun.xml.math \ application/x-7z-compressed \ application/x-dia-diagram \ application/x-fsdirectory \ application/x-mimehtml \ application/x-rar \ application/x-tar \ application/x-webarchive \ application/x-mac-webarch \ application/x-zerosize \ application/zip \ inode/directory \ inode/symlink \ inode/x-empty \ [guifilters] # This defines the top level filters in the GUI (accessed by the the # radiobuttons above the results area, or a toolbar combobox). # Each entry defines a label and a query language fragment that will be # applied to filter the current query if the option is activated. # # This does not really belong in mimeconf, but it does belong in the index # config (not the GUI one), because it's not necessarily the same in all # configs, it has to go somewhere, and it's not worth a separate config # file... # # By default this filters by document category (see above), but any # language fragment should be ok. Be aware though that the "document # history" queries only know about simple "rclcat" filtering. # # If you don't want the filter names to be displayed in alphabetic order, # you can define them with a colon. The part before the colon is not # displayed but used for ordering, ie: a:zzbutshouldbefirst b:aacomeslast # text = rclcat:text spreadsheet = rclcat:spreadsheet presentation = rclcat:presentation media = rclcat:media message = rclcat:message other = rclcat:other recoll-1.43.12/sampleconf/fields0000644000175000017500000001663215121730573016000 0ustar dockesdockes# (C) 2007-2011 J.F.Dockes # License: GPL V2 # # Field names configuration. This defines how one may search ie for: # author:Hemingway # # Important: # - the field names MUST be all lowercase alphabetic ascii here. They can # be anycased in the documents. [prefixes] ##################################################### # This section defines what prefix the terms inside named fields will be # indexed with (in addition to prefix-less indexing for general search) # ALL prefixes MUST be all ASCII UPPERCASE (NO DIGITS) # # The field names should be the canonic ones, not the aliases defined in # the following section. Don't change those which are predefined here, # quite a few are hard-coded in the c++. But you can add more (for new # fields emitted by filters). # # Fields can have two relevance boost factors defined, such as in: # caption = S ; wdfinc=10 # and/or # caption = S ; boost = 10 # The first line would boost the xapian "within document frequency" of caption terms by a factor of # 10 at indexing time. The second one (NOT CURRENTLY IMPLEMENTED) would automatically boost the # weight of a caption-based field query (ie: caption:mytitle or title:mytitle) at query time. # # The 'pfxonly' attribute can also be set on entries to express that terms from the field should be # indexed only with a prefix (in general, field terms are indexed both with and without a prefix). # # The 'noterms' attribute is used at query time to avoid adding the field values to the terms to be # highlighted. # # The values defined here in the default "fields" file are mostly also hard-coded in the c code, and # here just for reference, can't change at all. # # Also reserved: F(parentid), Q(uniqueid) XE (file ext), XP (for path elements), XSFN, XSFS, XXST, XXND, XXPG # Using XX was not a good idea. # # Note that you can disable generating terms for the fields: "filename", "containerfilename", # "rclUnsplitFN", "dir" and "mimetype" by setting their prefix to empty in the local "fields" # file. If you're not interested in the corresponding searches, this can save a significant amount # of space. # # There was initially some effort made to have some compatibility with Xapian Omega, but it probably # is now irrelevant, given how differently the indexes are now structured. In any case see # xapian/applications/omega/docs/termprefixes.rst in the Xapian source for Xapian/Omega prefix # usage. In a nutshell Omega reserves all single letters except X which is the start for # user-defined prefixes. # # Recoll uses a lot of X-starting prefixes, and also some XX ones so that locally defined prefixes # should start with XY to avoid any possible collision with the predefined ones. # # I hereby commit to not using XY for Recoll. # *** USE XY for beginning your local prefixes *** e.g.: # myfield = XYMYFIELD author = A xapdate = D keywords= K xapyearmon = M title = S ; wdfinc = 10 mtype = T ext = XE; noterms = 1 rclmd5 = XM dir = XP ; noterms = 1 abstract = XS filename = XSFN ; noterms = 1 containerfilename = XCFN ; pfxonly = 1 ; noterms = 1 rclUnsplitFN = XSFS xapyear = Y recipient = XTO rclbes = XB ; noterms = 1 annotation = XA [values] ########### ## Fields which will be stored in Xapian values, authorizing range query ## processing. # Entries are specified as 'fieldname = valueslot;[px=val1;py=val2...]'. # Xapian value slots are 32 bits numbers. Numbers below 1000 are reserved # by Recoll or Xapian. Numbers above are available for user configuration # Values have types, which can be 'int' or 'string' at the moment. ints have # an additional 'len' attributes, which specifies the padding size used for # sorting (leading zeroes: all xapian sorting is text-based). 10 is fine # for an unsigned 32 bits integer. # myfield = 1001; type=int; len = 10 # mystrfield = 1002; type = string [stored] ############################ # Some fields are stored in the document data record inside the index and # can be displayed in result lists. There is no necessity that stored fields # should be indexed (have a prefix in the preceding section). Example: "url" # # Some fields are stored by default, don't add them here: # caption, mimetype, url # Only canonical names should be used here, not aliases. # "rclaptg" is used for viewer specialization (depending on local config) # "rclbes" defines the backend type (ie normal fs, firefox cache). Should # probably be hardcoded, don't remove it abstract= author= filename= keywords= rclaptg= rclbes= recipient= annotation= [aliases] ########################## # This section defines field names aliases or synonyms. Any right hand side # value will be turned into the lhs canonic name before further treatment # # The left-hand values in the recoll distribution file are well known and # must match names used in the c++ code, or even the index data # record. They can't change! But you can add others. # # Filters should only add canonic names to the meta array when indexing, # not aliases. abstract = summary dc:summary description xesam:description author = creator dc:creator xesam:author xesam:creator from title = caption title dc:title subject # catg = dc:type contentCategory dbytes = size xesam:size dmtime = dc:date dc:datemodified datemodified contentmodified \ xesam:contentmodified ext = fileextension xesam:fileextension # Don't add subject to keywords aliases, it's better to keep it for email keywords = keyword xesam:keyword tag tags dc:subject xesam:subject \ dc:description mtype = mime mimetype xesam:mimetype contenttype xesam:contenttype dc:format recipient = to xesam:recipient url = dc:identifier xesam:url annotation = pdfannot ################## # The queryaliases section defines aliases which are used exclusively at # query time: there is no risk to pick up a random field from a document # (e.g. an HTML meta field) and index it. [queryaliases] filename = fn containerfilename = cfn annotation = annot pa [xattrtofields] ###################### # Processing for extended file attributes. # # By default, extended attributes are processed as document fields (after # removing the 'user' prefix from the name on Linux). # # You can enter case-sensitive name translations as "xattrname = fieldname". # Entering an empty translation will disable use of the attribute. # The values from the extended attributes will extend, not replace, the # data found from equivalent fields inside the document. # # Special case: an extended attribute named "modificationdate" will set the # "dmtime" (document date) only if it is not set by an internal document # field (e.g. email "Date:"). # # As an example, the following would map a quite plausible "tags" extended # attribute into the "keywords" field. tags = keywords # Proposed or standard freedesktop.org extended attributes xdg.tags = keywords xdg.comment = abstract # MacOS Finder comments com.apple.metadata:kMDItemFinderComment = abstract # MacOS Finder tags. Not sure how useful it would be to index these #com.apple.metadata:_kMDItemUserTags = keywords com.apple.FinderInfo = # Some standard fields are not to be used (by default). mime_type = charset = ######################## # Sections reserved for specific filters follow # ########################## # Mail filter section. You can specify mail headers to be indexed # in addition to the standard ones: (To:, Cc:, From:, Subject:, Date, # Message-Id), along with the field name to be used. For this to be useful, # the field name should also be listed in the [prefixes] and possibly the # [stored] sections. # # [mail] # x-my-tag = mymailtag recoll-1.43.12/sampleconf/recoll.conf0000644000175000017500000016510215133246150016727 0ustar dockesdockes# Recoll main configuration file, recoll.conf # The XML tags in the comments are used to help produce the documentation # from the sample/reference file, and not at all at run time, where # comments are just comments. Edit at will. # This typically lives in $prefix/share/recoll/examples and provides # default values. You can override selected parameters by adding assigments # to ~/.recoll/recoll.conf (or $RECOLL_CONFDIR/recoll.conf) # # Most of the important values in this file can be set from the GUI # configuration menus, which may be an easier approach than direct editing. # # Note about quoting: values which are parts of list parameters and contain white space can be # quoted with "double quotes". Double quotes processing is NOT applied to single value parameter, # and using quotes there will result in bad values. # Parameters affecting what documents we index # # Space-separated list of files or directories to recursively index. # You can use symbolic links in the list, they will be followed, independently of the value # of the followLinks variable. The default value is ~ : recursively index the user home folder. # topdirs = ~ # # Space-separated list of files or directories to monitor for # updates. # When running the real-time indexer, this allows monitoring only a # subset of the whole indexed area. The elements must be included in the # tree defined by the 'topdirs' members. #monitordirs= # # # File and directory names which should be ignored. # # White space separated list of wildcard patterns (simple ones, not paths, must contain no # '/' characters), which will be tested against file and directory names. # # Have a look at the default configuration for the initial value, some entries may not suit your # situation. The easiest way to see it is through the GUI Index configuration "local parameters" # panel. # # The list in the default configuration does not exclude hidden directories (names beginning with a # dot), which means that it may index quite a few things that you do not want. On the other hand, # email user agents like Thunderbird usually store messages in hidden directories, and you probably # want this indexed. One possible solution is to have ".*" in "skippedNames", and add things like # "~/.thunderbird" "~/.evolution" to "topdirs". # # Not even the file names are indexed for patterns in this list, see the "noContentSuffixes" # variable for an alternative approach which indexes the file names. Can be redefined for any # subtree. # # skippedNames = #* *~ caughtspam tmp loop.ps \ Cache cache* .cache .ccls-cache .thumbnails \ .beagle CVS .svn .git .hg .bzr .xsession-errors \ *.pyc __pycache__ .pytest_cache .tox .direnv \ .recoll* xapiandb recollrc recoll.conf recoll.ini *.rclwe # # # List of name patterns to remove from the default skippedNames list. # Allows modifying the list in the local configuration without copying it. skippedNames- = # # # List of name patterns to add to the default skippedNames list. # Allows modifying the list in the local configuration without copying it. skippedNames+ = # # # Regular file name filter patterns. # This is normally empty. If set, only the file names not in skippedNames and matching one of # the patterns will be considered for indexing. Can be redefined per subtree. Does not apply to # directories. onlyNames = # # # List of name endings (not necessarily dot-separated suffixes) for # which we don't try MIME type identification, and don't uncompress or # index content.Only the names will be indexed. This # complements the now obsoleted recoll_noindex list from the mimemap file, # which will go away in a future release (the move from mimemap to # recoll.conf allows editing the list through the GUI). This is different # from skippedNames because these are name ending matches only (not # wildcard patterns), and the file name itself gets indexed normally. This # can be redefined for subdirectories. noContentSuffixes = .md5 .map \ .o .lib .dll .a .sys .exe .com \ .mpp .mpt .vsd .sqlite \ .img .img.gz .img.bz2 .img.xz .image .image.gz .image.bz2 .image.xz .ttf \ .dat .bak .rdf .log.gz .log .db .msf .pid \ ,v ~ # # # # List of name endings to remove from the default noContentSuffixes # list. noContentSuffixes- = # # # List of name endings to add to the default noContentSuffixes # list. noContentSuffixes+ = # # # Absolute paths we should not go into. # # Space-separated list of wildcard expressions for absolute filesystem paths (for files or # directories). The variable must be defined at the top level of the configuration file, not in a # subsection. # # Any value in the list must be textually consistent with the values in topdirs, no attempts are # made to resolve symbolic links. In practise, if, as is frequently the case, /home is a link to # /usr/home, your default topdirs will have a single entry "~" which will be translated to # "/home/yourlogin". In this case, any skippedPaths entry should start with "/home/yourlogin" *not* # with "/usr/home/yourlogin". # # The index and configuration directories will automatically be added to the list. # # The expressions are matched using "fnmatch(3)" with the FNM_PATHNAME flag set by default. This # means that "/" characters must be matched explicitly. You can set "skippedPathsFnmPathname" to 0 # to disable the use of FNM_PATHNAME (meaning that "/*/dir3" will match "/dir1/dir2/dir3"). # # The default value contains the usual mount point for removable media to remind you that it is in # most cases a bad idea to have Recoll work on these. Explicitly adding "/media/xxx" to the "topdirs" # variable will override this. skippedPaths = /media # Set to 0 to # override use of FNM_PATHNAME for matching skipped # paths. #skippedPathsFnmPathname = 1 # # # File name which will cause its parent directory to be skipped. # Any directory containing a file with this name will be skipped as # if it was part of the skippedPaths list. Ex: .recoll-noindex #nowalkfn = .recoll-noindex # # # skippedPaths equivalent specific to # real time indexing.This enables having parts of the tree # which are initially indexed but not monitored. If daemSkippedPaths is # not set, the daemon uses skippedPaths. #daemSkippedPaths = # Follow symbolic links during # indexing.The default is to ignore symbolic links to avoid # multiple indexing of linked files. No effort is made to avoid duplication # when this option is set to true. This option can be set individually for # each of the "topdirs" members by using sections. It can not be changed # below the "topdirs" level. Links in the "topdirs" list itself are always # followed. #followLinks = 0 # # # Restrictive list of indexed MIME types. # # Normally not set (in which case all supported types are indexed). If it is set, only the # types from the list will have their contents indexed. The names will be indexed anyway if # indexallfilenames is set (default). MIME type names should be taken from the mimemap file (the # values may be different from xdg-mime or file -i output in some cases). Can be redefined for # subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values. #indexedmimetypes = # # # List of excluded MIME types. # # Lets you exclude some types from indexing. MIME type names should be taken from the mimemap # file (the values may be different from xdg-mime or file -i output in some cases) Can be redefined # for subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values. # #excludedmimetypes = # # # MIME types for which we don't compute a md5 hash. # # md5 checksums are used only for deduplicating results, and can be very expensive to # compute on multimedia or other big files. This list lets you turn off md5 computation for # selected types. It is global (no redefinition for subtrees). At the moment, it only has an effect # for external handlers (exec and execm). The file types can be specified by listing either MIME # types (e.g. audio/mpeg) or handler names (e.g. rclaudio.py). # nomd5types = rclaudio.py video/* # # # Size limit for compressed files. # # We need to decompress these in a temporary directory for identification, which can be # wasteful in some cases. Limit the waste. Negative means no limit. 0 results in no processing of # any compressed file. Default 100 MB. This does *not* concern archives like zip or rar files, but # only single, e.g. gzipped, files. compressedfilemaxkbs = 100000 # # # Size limit for text files. # # Mostly for skipping monster logs. Also used for max mail msg body size. Default 20 MB. Use # a value of -1 to disable. textfilemaxmbs = 20 # # Page size for text files. # # If this is set, text/plain files will be divided into documents of approximately this # size. This will reduce memory usage at index time and help with loading data in the preview window # at query time. Particularly useful with very big files, such as application or system logs. Also # see textfilemaxmbs and compressedfilemaxkbs. textfilepagekbs = 1000 # # # Process unknown text/xxx files as text/plain # # Allows indexing misc. text files identified as text/whatever by "file" or "xdg-mime" # without having to explicitely set config entries for them. This works fine for indexing (also will # cause processing of a lot of useless files), but the documents indexed this way will be opened by # the desktop viewer, even if text/plain has a specific editor. #textunknownasplain=0 # # # Index the file names of unprocessed files. # # Index the names of files the contents of which we don't index because of an excluded or # unsupported MIME type. indexallfilenames = 1 # # # Use a system mechanism as last resort to guess a MIME type. # # Depending on platform and version, a compile-time configuration will decide if this # actually executes a command or uses libmagic. This last-resort identification (if the # suffix-based one failed) is generally useful, but will cause the indexing of many bogus # extension-less "text" files. Also see "systemfilecommand". usesystemfilecommand = 1 # # Command to use for guessing the MIME type if the internal methods fail. # This is ignored on Windows or with Recoll 1.38+ if compiled with libmagic enabled (the # default). Otherwise, this should be a "file -i" workalike. The file path will be added as a last # parameter to the command line. "xdg-mime" works better than the traditional "file" command, and is # now the configured default (with a hard-coded fallback to "file") systemfilecommand = xdg-mime query filetype # Decide if we process the # Web queue.The queue is a directory where the Recoll Web # browser plugins create the copies of visited pages. processwebqueue = 0 # # # Size limit for archive members. # This is passed to the MIME handlers in the environment as # RECOLL_FILTER_MAXMEMBERKB. membermaxkbs = 50000 # Parameters affecting how we generate terms and organize the index # # Changing some of these parameters will imply a full # reindex. Also, when using multiple indexes, it may not make sense # to search indexes that don't share the values for these parameters, # because they usually affect both search and index operations. # Decide if we store # character case and diacritics in the index.If we do, # searches sensitive to case and diacritics can be performed, but the index # will be bigger, and some marginal weirdness may sometimes occur. The # default is a stripped index. When using multiple indexes for a search, # this parameter must be defined identically for all. Changing the value # implies an index reset. indexStripChars = 1 # # Decide if we store the documents' text content in the index. # # Storing the text allows extracting snippets from it at query time, instead of building them # from index position data. # # Newer Xapian index formats have rendered our use of positions list unacceptably slow in some # cases. The last Xapian index format with good performance for the old method is Chert, which is # default for 1.2, still supported but not default in 1.4 and will be dropped in 1.6. # # The stored document text is translated from its original format to UTF-8 plain text, but not # stripped of upper-case, diacritics, or punctuation signs. Storing it increases the index size by # 10-20% typically, but also allows for nicer snippets, so it may be worth enabling it even if not # strictly needed for performance if you can afford the space. # # The variable only has an effect when creating an index, meaning that the xapiandb directory must # not exist yet. Its exact effect depends on the Xapian version. # # For Xapian 1.4, if the variable is set to 0, we used to use the Chert format and not store the # text. If the variable was 1, Glass was used, and the text stored. We don't do this any more: # storing the text has proved to be the much better option, and dropping this possibility simplifies # the code. # # So now, the index format for a new index is always the default, but the variable still controls if # the text is stored or not, and the abstract generation method. With Xapian 1.4 and later, and the # variable set to 0, abstract generation may be very slow, but this setting may still be useful to # save space if you do not use abstract generation at all, by using the appropriate setting in the # GUI, and/or avoiding the Python API or recollq options which would trigger it. # indexStoreDocText = 1 # Decides if terms will be # generated for numbers.For example "123", "1.5e6", # 192.168.1.4, would not be indexed if nonumbers is set ("value123" would # still be). Numbers are often quite interesting to search for, and this # should probably not be set except for special situations, ie, scientific # documents with huge amounts of numbers in them, where setting nonumbers # will reduce the index size. This can only be set for a whole index, not # for a subtree. #nonumbers = 0 # # Do not store term positions. # Term positions allow for phrase and proximity searches, but make the index much bigger. # In some special circumstances, you may want to dispense with them. #notermpositions = 0 # # Determines if we index "coworker" also when the input is "co-worker". # This is new in version 1.22, and on by default. Setting the variable to off allows # restoring the previous behaviour. #dehyphenate = 1 # # # String of UTF-8 punctuation characters to be indexed as words. # # The resulting terms will then be searchable and, for example, by setting the parameter to # "%€" (without the double quotes), you would be able to search separately for "100%" or "100€" Note # that "100%" or "100 %" would be indexed in the same way, the characters are their own word # separators. #indexedpunctuation = # # # Process backslash as a normal letter. # # This may make sense for people wanting to index TeX commands as such but is not of much # general use. #backslashasletter = 0 # # Process underscore as normal letter. # This makes sense in so many cases that one wonders if it should # not be the default. # #underscoreasletter = 0 # # Maximum term length in Unicode characters. # Words longer than this will be discarded. # The default is 40 and used to be hard-coded, but it can now be # adjusted. You may need an index reset if you change the value. # #maxtermlength = 40 # # Maximum binary size of a Xapian document data record. # The data record holds "stored" document metadata fields. A very big size # usually indicates a document parse error. Xapian has a hard limit of around 100MB # for this. # #maxdbdatarecordkbs = 1000 # # Maximum binary size of a document stored text. # Xapian has a hard limit of around 100MB for the compressed value, but our # limit is before compression, so there may be some wiggle room. # #maxdbstoredtextmbs = 80 # Decides if specific East Asian # (Chinese Korean Japanese) characters/word splitting is turned # off.This will save a small amount of CPU if you have no CJK # documents. If your document base does include such text but you are not # interested in searching it, setting nocjk may be a # significant time and space saver. #nocjk = 0 # This lets you adjust the size of # n-grams used for indexing CJK text.The default value of 2 is # probably appropriate in most cases. A value of 3 would allow more precision # and efficiency on longer words, but the index will be approximately twice # as large. #cjkngramlen = 2 # # External tokenizer for Korean Hangul. # This allows using an language specific processor for extracting terms from Korean text, # instead of the generic n-gram term generator. # See https://www.recoll.org/pages/recoll-korean.html for instructions./ #hangultagger = Mecab # # External tokenizer for Chinese. # This allows using the language specific Jieba tokenizer for extracting # meaningful terms from Chinese text, instead of the generic n-gram term generator. # See https://www.recoll.org/pages/recoll-chinese.html for instructions. # / #chinesetagger = Jieba # # # Languages for which to create stemming expansion # data.Stemmer names can be found by executing "recollindex # -l", or this can also be set from a list in the GUI. The values are full # language names, e.g. english, french... indexstemminglanguages = english # Default character # set.This is used for files which do not contain a # character set definition (e.g.: text/plain). Values found inside files, # e.g. a "charset" tag in HTML documents, will override it. If this is not # set, the default character set is the one defined by the NLS environment # ($LC_ALL, $LC_CTYPE, $LANG), or ultimately iso-8859-1 (cp-1252 in fact). # If for some reason you want a general default which does not match your # LANG and is not 8859-1, use this variable. This can be redefined for any # sub-directory. #defaultcharset = iso-8859-1 # # # A list of characters, encoded in UTF-8, which should be handled specially when converting # text to unaccented lowercase. # For example, in Swedish, the letter a with diaeresis has full alphabet citizenship and # should not be turned into an a. Each element in the space-separated list has the special # character as first element and the translation following. The handling of both the lowercase and # upper-case versions of a character should be specified, as appartenance to the list will turn-off # both standard accent and case processing. The value is global and affects both indexing and # querying. We also convert a few confusing Unicode characters (quotes, hyphen) to their ASCII # equivalent to avoid "invisible" search failures. # # Examples: # Swedish: # unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl åå Åå ’' ❜' ʼ' ‐- # . German: # unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- # . French: you probably want to decompose oe and ae and nobody would type # a German ß # unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- # . The default for all until someone protests follows. These decompositions # are not performed by unac, but it is unlikely that someone would type the # composed forms in a search. # unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- # Overrides the default # character set for email messages which don't specify # one.This is mainly useful for readpst (libpst) dumps, # which are utf-8 but do not say so. #maildefcharset= # Set fields on all files # (usually of a specific fs area).Syntax is the usual: # name = value ; attr1 = val1 ; [...] # value is empty so this needs an initial semi-colon. This is useful, e.g., # for setting the rclaptg field for application selection inside # mimeview. #[/some/app/directory] #localfields = ; rclaptg = someapp; otherfield = somevalue # Use mtime instead of # ctime to test if a file has been modified.The time is used # in addition to the size, which is always used. # Setting this can reduce re-indexing on systems where extended attributes # are used (by some other application), but not indexed, because changing # extended attributes only affects ctime. # Notes: # - This may prevent detection of change in some marginal file rename cases # (the target would need to have the same size and mtime). # - You should probably also set noxattrfields to 1 in this case, except if # you still prefer to perform xattr indexing, for example if the local # file update pattern makes it of value (as in general, there is a risk # for pure extended attributes updates without file modification to go # undetected). Perform a full index reset after changing this. # testmodifusemtime = 0 # Disable extended attributes # conversion to metadata fields.This probably needs to be # set if testmodifusemtime is set. noxattrfields = 0 # Define commands to # gather external metadata, e.g. tmsu tags. # There can be several entries, separated by semi-colons, each defining # which field name the data goes into and the command to use. Don't forget the # initial semi-colon. All the field names must be different. You can use # aliases in the "field" file if necessary. # As a not too pretty hack conceded to convenience, any field name # beginning with "rclmulti" will be taken as an indication that the command # returns multiple field values inside a text blob formatted as a recoll # configuration file ("fieldname = fieldvalue" lines). The rclmultixx name # will be ignored, and field names and values will be parsed from the data. # Example: metadatacmds = ; tags = tmsu tags %f; rclmulti1 = cmdOutputsConf %f # #[/some/area/of/the/fs] #metadatacmds = ; tags = tmsu tags %f; rclmulti1 = cmdOutputsConf %f # Parameters affecting where and how we store things # # # Top directory for Recoll data.Recoll data # directories are normally located relative to the configuration directory # (e.g. ~/.recoll/xapiandb, ~/.recoll/mboxcache). If "cachedir" is set, the # directories are stored under the specified value instead (e.g. if # cachedir is ~/.cache/recoll, the default dbdir would be # ~/.cache/recoll/xapiandb). This affects dbdir, webcachedir, # mboxcachedir, aspellDicDir, which can still be individually specified to # override cachedir. Note that if you have multiple configurations, each # must have a different cachedir, there is no automatic computation of a # subpath under cachedir. #cachedir = ~/.cache/recoll # Maximum file system occupation # over which we stop indexing.The value is a percentage, # corresponding to what the "Capacity" df output column shows. The default # value is 0, meaning no checking. This parameter is only checked when the indexer starts, # it will not change the behaviour or a running process. maxfsoccuppc = 0 # Xapian database directory # location.This will be created on first indexing. If the # value is not an absolute path, it will be interpreted as relative to # cachedir if set, or the configuration directory (-c argument or # $RECOLL_CONFDIR). If nothing is specified, the default is then # ~/.recoll/xapiandb/ dbdir = xapiandb # # # Name of the scratch file where the indexer process updates its # status.Default: idxstatus.txt inside the configuration # directory. #idxstatusfile = idxstatus.txt # # # Directory location for storing mbox message offsets cache # files.This is normally "mboxcache" under cachedir if set, # or else under the configuration directory, but it may be useful to share # a directory between different configurations. #mboxcachedir = mboxcache # # # Minimum mbox file size over which we cache the offsets. # There is really no sense in caching offsets for small files. The # default is 5 MB. #mboxcacheminmbs = 5 # # # Maximum mbox member message size in megabytes. # Size over which we assume that the mbox format is bad or we # misinterpreted it, at which point we just stop processing the file. # #mboxmaxmsgmbs = 100 # # # Directory where we store the archived web pages after they are processed. # This is only used by the Web history indexing code. Note that this is different from # webdownloadsdir which tells the indexer where the web pages are stored by the browser, before they # are indexed and stored into webcachedir. # Default: cachedir/webcache if cachedir is set, else $RECOLL_CONFDIR/webcache webcachedir = webcache # # Maximum size in MB of the Web archive. # This is only used by the web history indexing code. # Default: 40 MB. # Reducing the size will not physically truncate the file. webcachemaxmbs = 200 # # # The path to the Web indexing queue.This used to be # hard-coded in the old plugin as ~/.recollweb/ToIndex so there would be no # need or possibility to change it, but the WebExtensions plugin now downloads # the files to the user Downloads directory, and a script moves them to # webqueuedir. The script reads this value from the config so it has become # possible to change it. #webqueuedir = ~/.recollweb/ToIndex # # # The path to the browser add-on download directory. # # This tells the indexer where the Web browser add-on stores the web page data. The data is # then moved by a script to webqueuedir, then processed, and finally stored in webcachedir for # future previews. #webdownloadsdir = ~/Downloads # # # Page recycle interval # By default, only one instance of an URL is kept in the cache. This # can be changed by setting this to a value determining at what frequency # we keep multiple instances ("day", "week", "month", # "year"). Note that increasing the interval will not erase existing # entries. #webcachekeepinterval= # # # Aspell dictionary storage directory location. The # aspell dictionary (aspdict.(lang).rws) is normally stored in the # directory specified by cachedir if set, or under the configuration # directory. #aspellDicDir = # # # Directory location for executable input handlers.If # RECOLL_FILTERSDIR is set in the environment, we use it instead. Defaults # to $prefix/share/recoll/filters. Can be redefined for # subdirectories. #filtersdir = /path/to/my/filters # # # Directory location for icons.The only reason to # change this would be if you want to change the icons displayed in the # result list. Defaults to $prefix/share/recoll/images #iconsdir = /path/to/my/icons # Parameters affecting indexing performance and resource usage # # # Threshold (megabytes of new data) where we flush from memory to disk index. # # Setting this allows some control over memory usage by the indexer process. A value of 0 # means no explicit flushing, which lets Xapian perform its own thing, meaning flushing every # $XAPIAN_FLUSH_THRESHOLD documents created, modified or deleted: as memory usage depends on average # document size, not only document count, the Xapian approach is is not very useful, and you should # let Recoll manage the flushes, however the program compiled value is 0. # The configured default value (from this file) is now 100 MB, and should be ok in many cases. You # can set it as low as 10 to conserve memory, but if you are looking for maximum speed, you may want # to experiment with values between 20 and 300. In my experience, values beyond this tend to be # counterproductive. If you find otherwise, please drop me a note. idxflushmb = 100 # # # Linux: maximum external filter execution time in seconds.Default 1200 # (20mn). Set to 0 for no limit. This is mainly to avoid infinite loops in postscript files # (loop.ps) filtermaxseconds = 1200 # # # Linux: maximum virtual memory space for filter processes (setrlimit(RLIMIT_AS)), in # megabytes. # # Note that this includes any mapped libs (there is no reliable Linux way to limit the data # space only), so we need to be a bit generous here. Anything over 2000 will be ignored on 32 bits # machines. The high default value is needed because of java-based handlers (pdftk) which need a # lot of VM (most of it text), esp. pdftk when executed from Python rclpdf.py. You can use a much # lower value if you don't need Java. filtermaxmbytes = 5000 # # # Linux: Out-Of-Memory killer adjust score value for the indexer process. # # See choom(1). During the indexer startup, this value is passed as the adjust parameter to # the choom command with the indexer process as target. #oomadj = 300 # # # Task queue depths for each stage and threading configuration control. # # There are three internal queues in the indexing pipeline stages (file data extraction, # terms generation, index update). This parameter defines the queue depths for each stage (three # integer values). In practise, deep queues have not been shown to increase performance. The first # value is also used to control threading autoconfiguration or disabling multithreading. If the # first queue depth is set to 0 Recoll will set the queue depths and thread counts based on the # detected number of CPUs. The arbitrarily chosen values are as follows (depth,nthread). 1 CPU -> no # threading. Less than 4 CPUs: (2, 2) (2, 2) (2, 1). Less than 6: (2, 4), (2, 2), (2, 1). Else (2, # 5), (2, 3), (2, 1). If the first queue depth is set to -1, multithreading will be disabled # entirely. The second and third values are ignored in both these cases. thrQSizes = 0 # # # Number of threads used for each indexing stage. # # If the first entry in thrQSizes is not 0 or -1, these three values define the number of # threads used for each stage (file data extraction, term generation, index update). It makes no # sense to use a value other than 1 for the last stage because updating the Xapian index is # necessarily single-threaded (and protected by a mutex). #thrTCounts = 4 2 1 # # # Number of temporary indexes used during incremental or full indexing. # # If not set to zero, this defines how many temporary indexes we use during indexing. # These temporary indexes are merged into the main one at the end of the operation. # Using multiple indexes and a final merge can significantly improve indexing performance when # the single-threaded Xapian index updates become a bottleneck. How useful this is depends # on the type of input and CPU. See the manual for more details. #thrTmpDbCnt = 0 # # # Suspend the real time indexing when the system runs on battery. # # The indexer will wait for a return on AC and reexec itself when it happens. #suspendonbattery = 0 # Miscellaneous parameters # # # Log file verbosity 1-6. A value of 2 will print # only errors and warnings. 3 will print information like document updates, # 4 is quite verbose and 6 very verbose. loglevel = 3 # # # Log file destination. Use "stderr" (default) to write to the # console. logfilename = stderr # # # Have each log line begin with the date and time. # e.g.: 2025-08-21T18:58:24+0200 :3:... #logthedate = 0 # # # Override loglevel for the indexer. #idxloglevel = 3 # # # Override logfilename for the indexer. #idxlogfilename = stderr # # override logthedate for the indexer. #idxlogthedate = 0 # # # Destination file for external helpers standard error output. # # The external program error output is left alone by default, # e.g. going to the terminal when the recoll[index] program is executed # from the command line. Use /dev/null or a file inside a non-existent # directory to completely suppress the output. # # #helperlogfilename= # # # Override loglevel for the real time indexer. # The default is to use the idx... values if set, else the log... values. #daemloglevel = 3 # # # Override logfilename for the real time indexer. # The default is to use the idx... values if set, else the log... values. #daemlogfilename = /dev/null # # # override logthedate for the real time indexer. #daemlogthedate = 0 # # # Override loglevel for the Python extension. #pyloglevel = 3 # # # Override logfilename for the Python extension. #pylogfilename = stderr # # override logthedate for the Python extension. #pylogthedate = 0 # # Do not purge data for deleted or inaccessible files # This can be overridden by recollindex command line options and may be useful if some parts # of the document set may predictably be inaccessible at times, so that you would only run the purge # after making sure that everything is there. #idxnoautopurge = 0 # # # Original location of the configuration directory. # This is used exclusively for movable datasets. Locating the # configuration directory inside the directory tree makes it possible to # provide automatic query time path translations once the data set has # moved (for example, because it has been mounted on another # location). #orgidxconfdir = # # # Current location of the configuration directory. # Complement orgidxconfdir for movable datasets. This should be used # if the configuration directory has been copied from the dataset to # another location, either because the dataset is readonly and an r/w copy # is desired, or for performance reasons. This records the original moved # location before copy, to allow path translation computations. For # example if a dataset originally indexed as "/home/me/mydata/config" has # been mounted to "/media/me/mydata", and the GUI is running from a copied # configuration, orgidxconfdir would be "/home/me/mydata/config", and # curidxconfdir (as set in the copied configuration) would be # "/media/me/mydata/config". #curidxconfdir = # # # Indexing process current directory. The input # handlers sometimes leave temporary files in the current directory, so it # makes sense to have recollindex chdir to some temporary directory. If the # value is empty, the current directory is not changed. If the # value is (literal) tmp, we use the temporary directory as set by the # environment (RECOLL_TMPDIR else TMPDIR else /tmp). If the value is an # absolute path to a directory, we go there. idxrundir = tmp # # # Script used to heuristically check if we need to retry indexing # files which previously failed. The default script checks # the modified dates on /usr/bin and /usr/local/bin. A relative path will # be looked up in the filters dirs, then in the path. Use an absolute path # to do otherwise. checkneedretryindexscript = rclcheckneedretry.sh # # # Additional places to search for helper executables. # # This is used, e.g., on Windows by the Python code, and on Mac OS by the bundled recoll.app # (because I could find no reliable way to tell launchd to set the PATH). The example below is for # Windows. Use ":" as entry separator for Mac and Ux-like systems, ";" is for Windows only. # #recollhelperpath = c:/someprog/bin;c:/someotherprog/bin # # # Length of abstracts we store while indexing. # Recoll stores an abstract for each indexed file. # The text can come from an actual "abstract" section in the # document or will just be the beginning of the document. It is stored in # the index so that it can be displayed inside the result lists without # decoding the original file. The idxabsmlen parameter # defines the size of the stored abstract. The default value is 250 # bytes. The search interface gives you the choice to display this stored # text or a synthetic abstract built by extracting text around the search # terms. If you always prefer the synthetic abstract, you can reduce this # value and save a little space. #idxabsmlen = 250 # # # Truncation length of stored metadata fields.This # does not affect indexing (the whole field is processed anyway), just the # amount of data stored in the index for the purpose of displaying fields # inside result lists or previews. The default value is 150 bytes which # may be too low if you have custom fields. #idxmetastoredlen = 150 # # # Truncation length for all document texts.Only index # the beginning of documents. This is not recommended except if you are # sure that the interesting keywords are at the top and have severe disk # space issues. #idxtexttruncatelen = 0 # # # Name of the index-time synonyms file. # This is only used to issue multi-word single terms for multi-word synonyms so that phrase # and proximity searches work for them (ex: applejack "apple jack"). The feature will only have an # effect for querying if the query-time and index-time synonym files are the same. #idxsynonyms = thereisnodefaultidxsynonyms # # "nice" process priority for the indexing processes. Default: 19 (lowest) # Appeared with 1.26.5. Prior versions were fixed at 19. # #idxniceprio = 19 # # # Disable aspell use. # The aspell dictionary generation takes time, and some combinations of aspell version, # language, and local terms, result in aspell crashing, so it sometimes makes sense to just disable # the thing. #noaspell = 1 # # # Language definitions to use when creating the aspell dictionary. # The value must match a set of aspell language definition files. You can type "aspell dicts" # to see a list The default if this is not set is to use the NLS environment to guess the value. The # values are the 2-letter language codes (e.g. "en", "fr"...) #aspellLanguage = en # # # Additional option and parameter to aspell dictionary creation command. # Some aspell packages may need an additional option (e.g. on Debian Jessie: # --local-data-dir=/usr/lib/aspell). See Debian bug 772415. #aspellAddCreateParam = --local-data-dir=/usr/lib/aspell # # # Set this to have a look at aspell dictionary creation errors. # There are always many, so this is mostly for debugging. #aspellKeepStderr = 1 # # # Auxiliary database update interval.The real time # indexer only updates the auxiliary databases (stemdb, aspell) # periodically, because it would be too costly to do it for every document # change. The default period is one hour. #monauxinterval = 3600 # # # Minimum interval (seconds) between processings of the indexing # queue.The real time indexer does not process each event # when it comes in, but lets the queue accumulate, to diminish overhead and # to aggregate multiple events affecting the same file. Default 30 # S. #monixinterval = 30 # # # Timing parameters for the real time indexing. # Definitions for files which get a longer delay before reindexing # is allowed. This is for fast-changing files, that should only be # reindexed once in a while. A list of wildcardPattern:seconds pairs. The # patterns are matched with fnmatch(pattern, path, 0) You can quote entries # containing white space with double quotes (quote the whole entry, not the # pattern). The default is empty. # Example: mondelaypatterns = *.log:20 "*with spaces.*:30" #mondelaypatterns = *.log:20 "*with spaces.*:30" # # # ionice class for the indexing process. # # Despite the misleading name, and on platforms where this is # supported, this affects all indexing processes, # not only the real time/monitoring ones. The default value is 3 (use # lowest "Idle" priority). # # #monioniceclass = 3 # # # ionice class level parameter if the class supports it. # # The default is empty, as the default "Idle" class has no # levels. # # # #monioniceclassdata = # # Path to the soffice command (e.g. from libreoffice) # This is used for Apple pages documents and big openoffice spreadsheets. # Use double-quoting if there are spaces in the path (e.g. C:/Program Files/) *and* you want # to add parameters to the default command (uncommon). If not set, recoll will try to find it in # the PATH. # #sofficecmd= # Query-time parameters (no impact on the index) # # # Store some GUI parameters locally to the index. # GUI settings are normally stored in a global file, valid for all # indexes. Setting this parameter will make some settings, such as the result # table setup, specific to the index. #idxlocalguisettings = 0 # # # auto-trigger diacritics sensitivity (raw index only). # IF the index is not stripped, decide if we automatically trigger # diacritics sensitivity if the search term has accented characters (not in # unac_except_trans). Else you need to use the query language and the "D" # modifier to specify diacritics sensitivity. Default is no. autodiacsens = 0 # # # auto-trigger case sensitivity (raw index only).IF # the index is not stripped (see indexStripChars), decide if we # automatically trigger character case sensitivity if the search term has # upper-case characters in any but the first position. Else you need to use # the query language and the "C" modifier to specify character-case # sensitivity. Default is yes. autocasesens = 1 # Maximum query expansion count # for a single term (e.g.: when using wildcards).This only # affects queries, not indexing. We used to not limit this at all (except # for filenames where the limit was too low at 1000), but it is # unreasonable with a big index. Default 10000. maxTermExpand = 10000 # Maximum number of clauses # we add to a single Xapian query.This only affects queries, # not indexing. In some cases, the result of term expansion can be # multiplicative, and we want to avoid eating all the memory. Default # 50000. maxXapianClauses = 50000 # # # Maximum number of positions we walk while populating a snippet for # the result list.The default of 1,000,000 may be # insufficient for very big documents, the consequence would be snippets # with possibly meaning-altering missing words. snippetMaxPosWalk = 1000000 # # # Command to use for generating thumbnails. # If set, this should be a path to a command or script followed by its constant # arguments. Four arguments will be appended before execution: the document URL, MIME type, target # icon SIZE (e.g. 128), and output file PATH. The command should generate a thumbnail from these # values. E.g. if the MIME is video, a script could use: ffmpegthumbnailer -iURL -oPATH # -sSIZE. #thumbnailercmd = # # # Default to applying stem expansion to phrase terms. # Recoll normally does not apply stem expansion to terms inside phrase searches. # Setting this parameter will change the default behaviour to expanding terms inside # phrases. If set, you can use a "l" modifier to disable expansion for a specific # instance. #stemexpandphrases = 0 # # # Inverse of the ratio of term occurrence to total db terms over which we look for spell # neighbours for automatic query expansion # When a term is very uncommon, we may (depending on user choice) look for spelling # variations which would be more common and possibly add them to the query. #autoSpellRarityThreshold = 200000 # # Ratio of spell neighbour frequency over user input term frequency beyond which we include # the neighbour in the query. # When a term has been selected for spelling expansion because of its rarity, we only include # spelling neighbours which are more common by this ratio. #autoSpellSelectionThreshold=20 # # Show embedded document results in KDE dolphin/kio and krunner # Embedded documents may clutter the results and are not always easily usable from the kio or # krunner environment. Setting this variable will restrict the results to standalone # documents. #kioshowsubdocs = 1 # Parameters for the PDF handler # # # Attempt OCR of PDF files with no text content. # This can be defined in subdirectories. The default is off because # OCR is so very slow. #pdfocr = 0 # # # Extract outlines and bookmarks from PDF documents (needs pdftohtml). # This is not enabled by default because it is rarely needed, and the extra command takes a # little time. #pdfoutline = 0 # # # Enable PDF attachment extraction by executing pdfdetach (if available). # This used to be disabled by default because it used pdftk. We now use pdfdetach, which # is part of poppler-utils and fast. #pdfattach = 1 # # # Extract text from selected XMP metadata tags.This # is a space-separated list of qualified XMP tag names. Each element can also # include a translation to a Recoll field name, separated by a "|" # character. If the second element is absent, the tag name is used as the # Recoll field names. You will also need to add specifications to the # "fields" file to direct processing of the extracted data. #pdfextrameta = bibtex:location|location bibtex:booktitle bibtex:pages # # # Define name of XMP field editing script.This # defines the name of a script to be loaded for editing XMP field # values. The script should define a "MetaFixer" class with a metafix() # method which will be called with the qualified tag name and value of each # selected field, for editing or erasing. A new instance is created for # each document, so that the object can keep state for, e.g. eliminating # duplicate values. #pdfextrametafix = /path/to/fixerscript.py # Parameters for the ZIP file handler # # # Use skippedNames inside Zip archives.Fetched # directly by the rclzip.py handler. Skip the patterns defined by skippedNames # inside Zip archives. Can be redefined for subdirectories. # See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html # #zipUseSkippedNames = 0 # # # Space-separated list of wildcard expressions for names that should # be ignored inside zip archives.This is used directly by # the zip handler. If zipUseSkippedNames is not set, zipSkippedNames # defines the patterns to be skipped inside archives. If zipUseSkippedNames # is set, the two lists are concatenated and used. Can be redefined for # subdirectories. # See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html # #zipSkippedNames = # # # File path encoding. Needs Python 3.11+. Set to "detect" for using chardet. # This is useful for non-standard zip files where the metadata is neither UTF-8 (indicated by # a file flag), nor CP437 (default). The parameter can be set for specific subtrees. You need to # install the Python3 "chardet" package if the value is set to "detect". #zipMetaEncoding = # Parameters for the Org mode handler # # Index org-mode level 1 sections as separate sub-documents # This is the default. If set to false, org-mode files will be indexed as plain text # orgmodesubdocs=1 # Parameters for the Thunderbird mbox handler # # # Enable thunderbird/mozilla-seamonkey mbox format quirks # Set this for the directory(ies) where the email mbox files are stored. #mhmboxquirks = tbird # Parameters for OCR processing # # # Tell the non-default Python image handler to run OCR. # See the PDF section for PDF OCR. The image OCR also needs mimeconf changes. See the # manual. imgocr can be defined for subdirectories. # #imgocr = 0 # # OCR modules to try. # The top OCR script will try to load the corresponding modules in order and use the first # which reports being capable of performing OCR on the input file. Modules for tesseract (tesseract) # and ABBYY FineReader (abbyy) are present in the standard distribution. For compatibility with the # previous version, if this is not defined at all, the default value is "tesseract". Use an explicit # empty value if needed. The value be redefined in subtrees. #ocrprogs = tesseract # # Location for caching OCR data. # The default if this is empty or undefined is to store the cached # OCR data under $RECOLL_CONFDIR/ocrcache. # #ocrcachedir= # # Language to assume for tesseract OCR. # Important for improving the OCR accuracy. This can also be set through the contents of a # file in the currently processed directory. See the rclocrtesseract.py script. Example values: eng, # fra... See the tesseract Web sitedocumentation for language codes and how to download additional # language packs. When specifying multiple languages, use a '+' separator and no spaces, e.g. # eng+fra. The value be redefined in subtrees. # #tesseractlang = eng # # Path for the tesseract command. Do not quote. # This is mostly useful on Windows, or for specifying a non-default # tesseract command. E.g. on Windows. # tesseractcmd = C:/Program Files/Tesseract-OCR/tesseract.exe # # #tesseractcmd = c:/Program Files/Tesseract-OCR/tesseract.exe # # Language to assume for abbyy OCR. # Important for improving the OCR accuracy. This can also be set # through the contents of a file in # the currently processed directory. See the rclocrabbyy.py # script. Typical values: English, French... See the ABBYY documentation. # # #abbyylang = English # # Path for the abbyy command # The ABBY directory is usually not in the path, so you should set this. # abbyyocrcmd = /opt/ABBYYOCR11/abbyyocr11 # Parameters for running speech to text conversion # # Activate speech to text conversion # The only possible value at the moment is "whisper" for using the OpenAI whisper program. # #speechtotext=whisper # # Name of the whisper model # #sttmodel=small # # Name of the device to be used by for whisper # #sttdevice= # Examples of variables set for specific locations (including actual useful defaults) # Example: You could specify different parameters for a subdirectory like this: # [~/hungariandocs/plain] # defaultcharset = iso-8859-2 [/usr/share/man] followLinks = 1 [~/.thunderbird] mhmboxquirks = tbird [~/.mozilla] mhmboxquirks = tbird # pidgin / purple directories for irc chats have names beginning with # [~/.purple] skippedNames = [~/AppData/Local/Microsoft/Outlook] onlyNames = *.ost *.pst recoll-1.43.12/sampleconf/recoll-common.qss0000644000175000017500000000072215121730573020076 0ustar dockesdockes/* * This is always applied to the recoll GUI, and can be extended or overridden by the style sheet * set in the preferences. The font size is edited before applying when recoll is scaled. * * NOTE: this will override the platform font size preference set by e.g. qt5ct. There is * currently no easy way to change this, you will have to edit the installed recoll-common.qss file * to comment out or delete the font-size line. */ * { font-size: 12pt; } recoll-1.43.12/AUTHORS0000644000175000017500000000131615121730572013520 0ustar dockesdockes2023-04: This file should have been created long ago. I have not spent a lot of time researching, and only listed recent contributions. Please contact me if you feel like being listed here. == Primary developer: Jean-Francois Dockes == Contributions: * Using the Linux statx call and file Birth Date for indexing and searching (commits 3e20e093, 6a8810b6, 0a08689f, 8f46009e, 840ae091) : ** Zhijun Li ** Jianye Shi ** Biao Dong ** (Ding (Beijing) Intelligent Technology Co. Ltd) * shenlebantongying, (cmake build) * Frank Dana (multiple bug fixes and improvements) * Paul S Hahn (openai.whisper support for transcribing audio files) recoll-1.43.12/bincimapmime/0000755000175000017500000000000015121730572015101 5ustar dockesdockesrecoll-1.43.12/bincimapmime/convert.h0000644000175000017500000002171015121730572016733 0ustar dockesdockes/* -*- mode:c++;c-basic-offset:2 -*- */ /* -------------------------------------------------------------------- * Filename: * src/util/convert.h * * Description: * Declaration of miscellaneous convertion functions. * -------------------------------------------------------------------- * Copyright 2002-2005 Andreas Aardal Hanssen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * -------------------------------------------------------------------- */ #ifndef convert_h_included #define convert_h_included #include #include #include #include #include #include #include #include namespace Binc { //---------------------------------------------------------------------- inline std::string toString(int i_in) { char intbuf[16]; snprintf(intbuf, sizeof(intbuf), "%d", i_in); return std::string(intbuf); } //---------------------------------------------------------------------- inline std::string toString(unsigned int i_in) { char intbuf[16]; snprintf(intbuf, sizeof(intbuf), "%u", i_in); return std::string(intbuf); } //---------------------------------------------------------------------- inline std::string toString(unsigned long i_in) { char longbuf[40]; snprintf(longbuf, sizeof(longbuf), "%lu", i_in); return std::string(longbuf); } //---------------------------------------------------------------------- inline std::string toString(const char *i_in) { return std::string(i_in); } //---------------------------------------------------------------------- inline int atoi(const std::string &s_in) { return ::atoi(s_in.c_str()); } //---------------------------------------------------------------------- inline std::string toHex(const std::string &s) { const char hexchars[] = "0123456789abcdef"; std::string tmp; for (std::string::const_iterator i = s.begin(); i != s.end(); ++i) { unsigned char c = (unsigned char)*i; tmp += hexchars[((c & 0xf0) >> 4)]; tmp += hexchars[c & 0x0f]; } return tmp; } //---------------------------------------------------------------------- inline std::string fromHex(const std::string &s) { const char hexchars[] = "0123456789abcdef"; std::string tmp; for (std::string::const_iterator i = s.begin(); i != s.end() && i + 1 != s.end(); i += 2) { ptrdiff_t n; unsigned char c = *i; unsigned char d = *(i + 1); const char *t; if ((t = strchr(hexchars, c)) == nullptr) return "out of range"; n = (t - hexchars) << 4; if ((t = strchr(hexchars, d)) == nullptr) return "out of range"; n += (t - hexchars); if (n >= 0 && n <= 255) tmp += (char) n; else return "out of range"; } return tmp; } //---------------------------------------------------------------------- inline std::string toImapString(const std::string &s_in) { for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) { unsigned char c = (unsigned char)*i; if (c <= 31 || c >= 127 || c == '\"' || c == '\\') return "{" + toString((unsigned long)s_in.length()) + "}\r\n" + s_in; } return "\"" + s_in + "\""; } //---------------------------------------------------------------------- inline void uppercase(std::string &input) { for (std::string::iterator i = input.begin(); i != input.end(); ++i) *i = toupper(*i); } //---------------------------------------------------------------------- inline void lowercase(std::string &input) { for (std::string::iterator i = input.begin(); i != input.end(); ++i) *i = tolower(*i); } //---------------------------------------------------------------------- inline void chomp(std::string &s_in, const std::string &chars = " \t\r\n") { std::string::size_type n = s_in.length(); while (n > 1 && chars.find(s_in[n - 1]) != std::string::npos) s_in.resize(n-- - 1); } //---------------------------------------------------------------------- inline void trim(std::string &s_in, const std::string &chars = " \t\r\n") { while (s_in != "" && chars.find(s_in[0]) != std::string::npos) s_in = s_in.substr(1); chomp(s_in, chars); } //---------------------------------------------------------------------- inline const std::string unfold(const std::string &a, bool removecomment = true) { std::string tmp; bool incomment = false; bool inquotes = false; for (std::string::const_iterator i = a.begin(); i != a.end(); ++i) { unsigned char c = (unsigned char)*i; if (!inquotes && removecomment) { if (c == '(') { incomment = true; tmp += " "; } else if (c == ')') { incomment = false; } else if (c != 0x0a && c != 0x0d) { tmp += *i; } } else if (c != 0x0a && c != 0x0d) { tmp += *i; } if (!incomment) { if (*i == '\"') inquotes = !inquotes; } } trim(tmp); return tmp; } //---------------------------------------------------------------------- inline void split(const std::string &s_in, const std::string &delim, std::vector &dest, bool skipempty = true) { std::string token; for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) { if (delim.find(*i) != std::string::npos) { if (!skipempty || token != "") dest.push_back(token); token.clear(); } else token += *i; } if (token != "") dest.push_back(token); } //---------------------------------------------------------------------- inline void splitAddr(const std::string &s_in, std::vector &dest, bool skipempty = true) { static const std::string delim = ","; std::string token; bool inquote = false; for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) { if (inquote && *i == '\"') inquote = false; else if (!inquote && *i == '\"') inquote = true; if (!inquote && delim.find(*i) != std::string::npos) { if (!skipempty || token != "") dest.push_back(token); token.clear(); } else token += *i; } if (token != "") dest.push_back(token); } //---------------------------------------------------------------------- inline std::string toCanonMailbox(const std::string &s_in) { if (s_in.find("..") != std::string::npos) return std::string(); if (s_in.length() >= 5) { std::string a = s_in.substr(0, 5); uppercase(a); return a == "INBOX" ? a + (s_in.length() > 5 ? s_in.substr(5) : std::string()) : s_in; } return s_in; } //------------------------------------------------------------------------ inline std::string toRegex(const std::string &s_in, char delimiter) { std::string regex = "^"; for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) { if (*i == '.' || *i == '[' || *i == ']' || *i == '{' || *i == '}' || *i == '(' || *i == ')' || *i == '^' || *i == '$' || *i == '?' || *i == '+' || *i == '\\') { regex += "\\"; regex += *i; } else if (*i == '*') regex += ".*?"; else if (*i == '%') { regex += "(\\"; regex += delimiter; regex += "){0,1}"; regex += "[^\\"; regex += delimiter; regex += "]*?"; } else regex += *i; } if (regex[regex.length() - 1] == '?') regex[regex.length() - 1] = '$'; else regex += "$"; return regex; } //------------------------------------------------------------------------ class BincStream { private: std::string nstr; public: //-- BincStream &operator << (std::ostream&(*)(std::ostream&)); BincStream &operator << (const std::string &t); BincStream &operator << (unsigned int t); BincStream &operator << (int t); BincStream &operator << (char t); //-- std::string popString(std::string::size_type size); //-- char popChar(void); void unpopChar(char c); void unpopStr(const std::string &s); //-- const std::string &str(void) const; //-- unsigned int getSize(void) const; //-- void clear(void); //-- BincStream(void); ~BincStream(void); }; } #endif recoll-1.43.12/bincimapmime/mime-parsefull.cc0000644000175000017500000004250015121730572020333 0ustar dockesdockes /* -*- mode:c++;c-basic-offset:2 -*- */ /* -------------------------------------------------------------------- * Filename: * mime-parsefull.cc * * Description: * Implementation of main mime parser components * -------------------------------------------------------------------- * Copyright 2002-2005 Andreas Aardal Hanssen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * -------------------------------------------------------------------- */ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include "mime.h" #include "mime-inputsource.h" #include "convert.h" using namespace std; bool compareStringToQueue(const char *s_in, char *bqueue, size_t pos, size_t size) { for (size_t i = 0; i < size; ++i) { if (s_in[i] != bqueue[pos]) return false; if (++pos == size) pos = 0; } return true; } // #define MPF #ifdef MPF #define MPFDEB(X) fprintf X #else #define MPFDEB(X) #endif //------------------------------------------------------------------------ void Binc::MimeDocument::parseFull(int fd) { if (allIsParsed) return; allIsParsed = true; delete doc_mimeSource; doc_mimeSource = new MimeInputSource(fd); headerstartoffsetcrlf = 0; headerlength = 0; bodystartoffsetcrlf = 0; bodylength = 0; size = 0; messagerfc822 = false; multipart = false; int bsize = 0; string bound; doParseFull(doc_mimeSource, bound, bsize); // eat any trailing junk to get the correct size char c; while (doc_mimeSource->getChar(&c)); size = doc_mimeSource->getOffset(); } void Binc::MimeDocument::parseFull(istream& s) { if (allIsParsed) return; allIsParsed = true; delete doc_mimeSource; doc_mimeSource = new MimeInputSourceStream(s); headerstartoffsetcrlf = 0; headerlength = 0; bodystartoffsetcrlf = 0; bodylength = 0; size = 0; messagerfc822 = false; multipart = false; int bsize = 0; string bound; doParseFull(doc_mimeSource, bound, bsize); // eat any trailing junk to get the correct size char c; while (doc_mimeSource->getChar(&c)); size = doc_mimeSource->getOffset(); } //------------------------------------------------------------------------ bool Binc::MimePart::parseOneHeaderLine(Binc::Header *header, unsigned int *nlines) { using namespace ::Binc; char c; bool eof = false; char cqueue[4]; string name; string content; while (mimeSource->getChar(&c)) { // If we encounter a \r before we got to the first ':', then // rewind back to the start of the line and assume we're at the // start of the body. if (c == '\r') { for (int i = 0; i < (int) name.length() + 1; ++i) mimeSource->ungetChar(); return false; } // A colon marks the end of the header name if (c == ':') break; // Otherwise add to the header name name += c; } cqueue[0] = '\0'; cqueue[1] = '\0'; cqueue[2] = '\0'; cqueue[3] = '\0'; // Read until the end of the header. bool endOfHeaders = false; while (!endOfHeaders) { if (!mimeSource->getChar(&c)) { eof = true; break; } if (c == '\n') ++*nlines; for (int i = 0; i < 3; ++i) cqueue[i] = cqueue[i + 1]; cqueue[3] = c; if (strncmp(cqueue, "\r\n\r\n", 4) == 0) { endOfHeaders = true; break; } // If the last character was a newline, and the first now is not // whitespace, then rewind one character and store the current // key,value pair. if (cqueue[2] == '\n' && c != ' ' && c != '\t') { if (content.length() > 2) content.resize(content.length() - 2); trim(content); header->add(name, content); if (c != '\r') { mimeSource->ungetChar(); if (c == '\n') --*nlines; return true; } mimeSource->getChar(&c); return false; } content += c; } if (name != "") { if (content.length() > 2) content.resize(content.length() - 2); header->add(name, content); } return !(eof || endOfHeaders); } //------------------------------------------------------------------------ void Binc::MimePart::parseHeader(Binc::Header *header, unsigned int *nlines) { while (parseOneHeaderLine(header, nlines)) { } } //------------------------------------------------------------------------ void Binc::MimePart::analyzeHeader(Binc::Header *header, bool *multipart, bool *messagerfc822, string *subtype, string *boundary) { using namespace ::Binc; // Do simple parsing of headers to determine the // type of message (multipart,messagerfc822 etc) HeaderItem ctype; if (header->getFirstHeader("content-type", ctype)) { vector types; split(ctype.getValue(), ";", types); if (types.size() > 0) { // first element should describe content type string tmp = types[0]; trim(tmp); vector v; split(tmp, "/", v); string key, value; key = (v.size() > 0) ? v[0] : "text"; value = (v.size() > 1) ? v[1] : "plain"; lowercase(key); if (key == "multipart") { *multipart = true; lowercase(value); *subtype = value; } else if (key == "message") { lowercase(value); if (value == "rfc822") *messagerfc822 = true; } } for (vector::const_iterator i = types.begin(); i != types.end(); ++i) { string element = *i; trim(element); if (element.find("=") != string::npos) { string::size_type pos = element.find('='); string key = element.substr(0, pos); string value = element.substr(pos + 1); lowercase(key); trim(key); if (key == "boundary") { trim(value, " \""); *boundary = value; } } } } } void Binc::MimePart::parseMessageRFC822(vector *members, bool *foundendofpart, unsigned int *bodylength, unsigned int *nbodylines, const string &toboundary) { using namespace ::Binc; // message rfc822 means a completely enclosed mime document. we // call the parser recursively, and pass on the boundary string // that we got. when parse() finds this boundary, it returns 0. if // it finds the end boundary (boundary + "--"), it returns != 0. MimePart m; unsigned int bodystartoffsetcrlf = mimeSource->getOffset(); // parsefull returns the number of bytes that need to be removed // from the body because of the terminating boundary string. int bsize = 0; if (m.doParseFull(mimeSource, toboundary, bsize)) *foundendofpart = true; // make sure bodylength doesn't overflow *bodylength = mimeSource->getOffset(); if (*bodylength >= bodystartoffsetcrlf) { *bodylength -= bodystartoffsetcrlf; if (*bodylength >= (unsigned int) bsize) { *bodylength -= (unsigned int) bsize; } else { *bodylength = 0; } } else { *bodylength = 0; } *nbodylines += m.getNofLines(); members->push_back(m); } bool Binc::MimePart::skipUntilBoundary(const string &delimiter, unsigned int *nlines, bool *eof) { string::size_type endpos = delimiter.length(); char *delimiterqueue = nullptr; string::size_type delimiterpos = 0; const char *delimiterStr = delimiter.c_str(); if (delimiter != "") { delimiterqueue = new char[endpos]; memset(delimiterqueue, 0, endpos); } // first, skip to the first delimiter string. Anything between the // header and the first delimiter string is simply ignored (it's // usually a text message intended for non-mime clients) char c; bool foundBoundary = false; for (;;) { if (!mimeSource->getChar(&c)) { *eof = true; break; } if (c == '\n') ++*nlines; // if there is no delimiter, we just read until the end of the // file. if (!delimiterqueue) continue; delimiterqueue[delimiterpos++] = c; if (delimiterpos == endpos) delimiterpos = 0; if (compareStringToQueue(delimiterStr, delimiterqueue, delimiterpos, endpos)) { foundBoundary = true; break; } } delete [] delimiterqueue; delimiterqueue = nullptr; return foundBoundary; } // JFD: Things we do after finding a boundary (something like CRLF--somestring) // Need to see if this is a final one (with an additional -- at the end), // and need to check if it is immediately followed by another boundary // (in this case, we give up our final CRLF in its favour) inline void Binc::MimePart::postBoundaryProcessing(bool *eof, unsigned int *nlines, int *boundarysize, bool *foundendofpart) { // Read two more characters. This may be CRLF, it may be "--" and // it may be any other two characters. char a = '\0'; if (!mimeSource->getChar(&a)) *eof = true; if (a == '\n') ++*nlines; char b = '\0'; if (!mimeSource->getChar(&b)) *eof = true; if (b == '\n') ++*nlines; // If eof, we're done here if (*eof) return; // If we find two dashes after the boundary, then this is the end // of boundary marker, and we need to get 2 more chars if (a == '-' && b == '-') { *foundendofpart = true; *boundarysize += 2; if (!mimeSource->getChar(&a)) *eof = true; if (a == '\n') ++*nlines; if (!mimeSource->getChar(&b)) *eof = true; if (b == '\n') ++*nlines; } // If the boundary is followed by CRLF, we need to handle the // special case where another boundary line follows // immediately. In this case we consider the CRLF to be part of // the NEXT boundary. if (a == '\r' && b == '\n') { // Get 2 more if (!mimeSource->getChar(&a) || !mimeSource->getChar(&b)) { *eof = true; } else if (a == '-' && b == '-') { MPFDEB((stderr, "BINC: consecutive delimiters, giving up CRLF\n")); mimeSource->ungetChar(); mimeSource->ungetChar(); mimeSource->ungetChar(); mimeSource->ungetChar(); } else { // We unget the 2 chars, and keep our crlf (increasing our own size) MPFDEB((stderr, "BINC: keeping my CRLF\n")); mimeSource->ungetChar(); mimeSource->ungetChar(); *boundarysize += 2; } } else { // Boundary string not followed by CRLF, don't read more and let // others skip the rest. Note that this is allowed but quite uncommon mimeSource->ungetChar(); mimeSource->ungetChar(); } } void Binc::MimePart::parseMultipart(const string &boundary, const string &toboundary, bool *eof, unsigned int *nlines, int *boundarysize, bool *foundendofpart, unsigned int *bodylength, vector *members) { MPFDEB((stderr, "BINC: ParseMultipart: boundary [%s], toboundary[%s]\n", boundary.c_str(), toboundary.c_str())); using namespace ::Binc; unsigned int bodystartoffsetcrlf = mimeSource->getOffset(); // multipart parsing starts with skipping to the first // boundary. then we call parse() for all parts. the last parse() // command will return a code indicating that it found the last // boundary of this multipart. Note that the first boundary does // not have to start with CRLF. string delimiter = "--" + boundary; skipUntilBoundary(delimiter, nlines, eof); if (!eof) *boundarysize = static_cast(delimiter.size()); postBoundaryProcessing(eof, nlines, boundarysize, foundendofpart); // read all mime parts. if (!*foundendofpart && !*eof) { bool quit = false; do { MimePart m; // If parseFull returns != 0, then it encountered the multipart's // final boundary. int bsize = 0; if (m.doParseFull(mimeSource, boundary, bsize)) { quit = true; *boundarysize = bsize; } members->push_back(m); } while (!quit); } if (!*foundendofpart && !*eof) { // multipart parsing starts with skipping to the first // boundary. then we call parse() for all parts. the last parse() // command will return a code indicating that it found the last // boundary of this multipart. Note that the first boundary does // not have to start with CRLF. string delimiter = "\r\n--" + toboundary; skipUntilBoundary(delimiter, nlines, eof); if (!*eof) *boundarysize = static_cast(delimiter.size()); postBoundaryProcessing(eof, nlines, boundarysize, foundendofpart); } // make sure bodylength doesn't overflow *bodylength = mimeSource->getOffset(); if (*bodylength >= bodystartoffsetcrlf) { *bodylength -= bodystartoffsetcrlf; if (*bodylength >= (unsigned int) *boundarysize) { *bodylength -= (unsigned int) *boundarysize; } else { *bodylength = 0; } } else { *bodylength = 0; } MPFDEB((stderr, "BINC: ParseMultipart return\n")); } void Binc::MimePart::parseSinglePart(const string &toboundary, int *boundarysize, unsigned int *nbodylines, unsigned int *nlines, bool *eof, bool *foundendofpart, unsigned int *bodylength) { MPFDEB((stderr, "BINC: parseSinglePart, boundary [%s]\n", toboundary.c_str())); using namespace ::Binc; unsigned int bodystartoffsetcrlf = mimeSource->getOffset(); // If toboundary is empty, then we read until the end of the // file. Otherwise we will read until we encounter toboundary. string _toboundary; if (toboundary != "") { _toboundary = "\r\n--"; _toboundary += toboundary; } // if (skipUntilBoundary(_toboundary, nlines, eof)) // *boundarysize = _toboundary.length(); char *boundaryqueue = nullptr; auto endpos = _toboundary.length(); if (toboundary != "") { boundaryqueue = new char[endpos]; memset(boundaryqueue, 0, endpos); } *boundarysize = 0; const char *_toboundaryStr = _toboundary.c_str(); string line; bool toboundaryIsEmpty = (toboundary == ""); char c; string::size_type boundarypos = 0; while (mimeSource->getChar(&c)) { if (c == '\n') { ++*nbodylines; ++*nlines; } if (toboundaryIsEmpty) continue; // find boundary boundaryqueue[boundarypos++] = c; if (boundarypos == endpos) boundarypos = 0; if (compareStringToQueue(_toboundaryStr, boundaryqueue, boundarypos, endpos)) { *boundarysize = static_cast(_toboundary.length()); break; } } delete [] boundaryqueue; if (toboundary != "") { postBoundaryProcessing(eof, nlines, boundarysize, foundendofpart); } else { // Recoll: in the case of a multipart body with a null // boundary (probably illegal but wtf), eof was not set and // multipart went into a loop until bad alloc. *eof = true; } // make sure bodylength doesn't overflow *bodylength = mimeSource->getOffset(); if (*bodylength >= bodystartoffsetcrlf) { *bodylength -= bodystartoffsetcrlf; if (*bodylength >= (unsigned int) *boundarysize) { *bodylength -= (unsigned int) *boundarysize; } else { *bodylength = 0; } } else { *bodylength = 0; } MPFDEB((stderr, "BINC: parseSimple ret: bodylength %d, boundarysize %d\n", *bodylength, *boundarysize)); } //------------------------------------------------------------------------ int Binc::MimePart::doParseFull(MimeInputSource *ms, const string &toboundary, int &boundarysize) { MPFDEB((stderr, "BINC: doParsefull, toboundary[%s]\n", toboundary.c_str())); mimeSource = ms; headerstartoffsetcrlf = mimeSource->getOffset(); // Parse the header of this mime part. parseHeader(&h, &nlines); // Headerlength includes the seperating CRLF. Body starts after the // CRLF. headerlength = mimeSource->getOffset() - headerstartoffsetcrlf; bodystartoffsetcrlf = mimeSource->getOffset(); MPFDEB((stderr, "BINC: doParsefull, bodystartoffsetcrlf %d\n", bodystartoffsetcrlf)); bodylength = 0; // Determine the type of mime part by looking at fields in the // header. analyzeHeader(&h, &multipart, &messagerfc822, &subtype, &boundary); bool eof = false; bool foundendofpart = false; if (messagerfc822) { parseMessageRFC822(&members, &foundendofpart, &bodylength, &nbodylines, toboundary); } else if (multipart) { parseMultipart(boundary, toboundary, &eof, &nlines, &boundarysize, &foundendofpart, &bodylength, &members); } else { parseSinglePart(toboundary, &boundarysize, &nbodylines, &nlines, &eof, &foundendofpart, &bodylength); } MPFDEB((stderr, "BINC: doParsefull ret, toboundary[%s]\n", toboundary.c_str())); return (eof || foundendofpart) ? 1 : 0; } recoll-1.43.12/bincimapmime/AUTHORS0000644000175000017500000000444714665356751016201 0ustar dockesdockesThe following parties have participated in writing code or otherwise contributed to the Binc IMAP project: Author: Andreas Aardal Hanssen Several users have been very helpful with bug reports and suggestions, and the author is very grateful for their contributions. Some users have also gone to the extra effort of debugging the cause of a bug, or have found a way of implementing a feature, and have either provided a very good description of what is needed, or they have actually provided a patch that has been added to Binc IMAP. While adding extra value to the discussion around the discovery of a bug or the evaluation of a new feature, these contributors also take some load of the author's back, so they deserve extra thanks. In this list are also included people who have contributed with mirrors and translations of the web pages. Henry Baragar Jrgen Botz Charlie Brady Caskey Dickson Ketil Froyn Gary Gordon Marek Gutkowski Daniel James Zak Johnson Sergei Kolobov Rafal Kupka Eivind Kvedalen HIROSHIMA Naoki Greger Stolt Nilsen John Starks Peter Stuge Gerrit Pape Jeremy Rossi Dale Woolridge If you have contributed to the Binc IMAP project but are not listed here (this happens quite often), please send a mail to andreas-binc@bincimap.org and I'll add you to the list. recoll-1.43.12/bincimapmime/mime-parseonlyheader.cc0000644000175000017500000001011615121730572021521 0ustar dockesdockes/* -*- mode:c++;c-basic-offset:2 -*- */ /* -------------------------------------------------------------------- * Filename: * mime-parseonlyheader.cc * * Description: * Implementation of main mime parser components * -------------------------------------------------------------------- * Copyright 2002-2005 Andreas Aardal Hanssen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * -------------------------------------------------------------------- */ #include "autoconfig.h" #include "mime.h" #include "mime-inputsource.h" #include "convert.h" #include #include #include #include #include #include #include #include #include using namespace std; //------------------------------------------------------------------------ void Binc::MimeDocument::parseOnlyHeader(int fd) { if (allIsParsed || headerIsParsed) return; headerIsParsed = true; delete doc_mimeSource; doc_mimeSource = new MimeInputSource(fd); headerstartoffsetcrlf = 0; headerlength = 0; bodystartoffsetcrlf = 0; bodylength = 0; messagerfc822 = false; multipart = false; nlines = 0; nbodylines = 0; doParseOnlyHeader(doc_mimeSource); } void Binc::MimeDocument::parseOnlyHeader(istream& s) { if (allIsParsed || headerIsParsed) return; headerIsParsed = true; delete doc_mimeSource; doc_mimeSource = new MimeInputSourceStream(s); headerstartoffsetcrlf = 0; headerlength = 0; bodystartoffsetcrlf = 0; bodylength = 0; messagerfc822 = false; multipart = false; nlines = 0; nbodylines = 0; doParseOnlyHeader(doc_mimeSource); } //------------------------------------------------------------------------ int Binc::MimePart::doParseOnlyHeader(MimeInputSource *ms) { mimeSource = ms; string name; string content; char cqueue[4]; memset(cqueue, 0, sizeof(cqueue)); headerstartoffsetcrlf = mimeSource->getOffset(); bool quit = false; char c = '\0'; while (!quit) { // read name while (1) { if (!mimeSource->getChar(&c)) { quit = true; break; } if (c == '\n') ++nlines; if (c == ':') break; if (c == '\n') { for (int i = int(name.length()) - 1; i >= 0; --i) mimeSource->ungetChar(); quit = true; name.clear(); break; } name += c; if (name.length() == 2 && name.substr(0, 2) == "\r\n") { name.clear(); quit = true; break; } } if (name.length() == 1 && name[0] == '\r') { name.clear(); break; } if (quit) break; while (!quit) { if (!mimeSource->getChar(&c)) { quit = true; break; } if (c == '\n') ++nlines; for (int i = 0; i < 3; ++i) cqueue[i] = cqueue[i + 1]; cqueue[3] = c; if (strncmp(cqueue, "\r\n\r\n", 4) == 0) { quit = true; break; } if (cqueue[2] == '\n') { // guess the mime rfc says what can not appear on the beginning // of a line. if (!isspace(cqueue[3])) { if (content.length() > 2) content.resize(content.length() - 2); trim(content); h.add(name, content); name = c; content.clear(); break; } } content += c; } } if (name != "") { if (content.length() > 2) content.resize(content.length() - 2); h.add(name, content); } headerlength = mimeSource->getOffset() - headerstartoffsetcrlf; return 1; } recoll-1.43.12/bincimapmime/mime-inputsource.h0000644000175000017500000001301115121730572020553 0ustar dockesdockes/* -------------------------------------------------------------------- * Filename: * src/mime-inputsource.h * * Description: * The base class of the MIME input source * -------------------------------------------------------------------- * Copyright 2002-2005 Andreas Aardal Hanssen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * -------------------------------------------------------------------- */ #ifndef mime_inputsource_h_included #define mime_inputsource_h_included // Data source for MIME parser // Note about large files: we might want to change the unsigned int // used for offsets into an off_t for intellectual satisfaction, but // in the context of recoll, we could only get into trouble if a // *single message* exceeded 2GB, which seems rather unlikely. When // parsing a mailbox files, we read each message in memory and use the // stream input source (from a memory buffer, no file offsets). When // parsing a raw message file, it's only one message. #include #include "safeunistd.h" #include namespace Binc { class MimeInputSource { public: // Note that we do NOT take ownership of fd, won't close it on delete inline MimeInputSource(int fd, unsigned int start = 0); virtual inline ~MimeInputSource(void); virtual inline ssize_t fillRaw(char *raw, size_t nbytes); virtual inline void reset(void); virtual inline bool fillInputBuffer(void); inline void seek(unsigned int offset); inline bool getChar(char *c); inline void ungetChar(void); inline int getFileDescriptor(void) const; inline unsigned int getOffset(void) const; private: int fd; char data[16384]; unsigned int offset; unsigned int tail; unsigned int head; unsigned int start; char lastChar; }; inline MimeInputSource::MimeInputSource(int fd, unsigned int start) { this->fd = fd; this->start = start; offset = 0; tail = 0; head = 0; lastChar = '\0'; memset(data, '\0', sizeof(data)); seek(start); } inline MimeInputSource::~MimeInputSource(void) { } inline ssize_t MimeInputSource::fillRaw(char *raw, size_t nbytes) { return sys_read(fd, raw, nbytes); } inline bool MimeInputSource::fillInputBuffer(void) { char raw[4096]; ssize_t nbytes = fillRaw(raw, 4096); if (nbytes <= 0) { // FIXME: If ferror(crlffile) we should log this. return false; } for (ssize_t i = 0; i < nbytes; ++i) { const char c = raw[i]; if (c == '\r') { if (lastChar == '\r') { data[tail++ & (0x4000-1)] = '\r'; data[tail++ & (0x4000-1)] = '\n'; } } else if (c == '\n') { data[tail++ & (0x4000-1)] = '\r'; data[tail++ & (0x4000-1)] = '\n'; } else { if (lastChar == '\r') { data[tail++ & (0x4000-1)] = '\r'; data[tail++ & (0x4000-1)] = '\n'; } data[tail++ & (0x4000-1)] = c; } lastChar = c; } return true; } inline void MimeInputSource::reset(void) { offset = head = tail = 0; lastChar = '\0'; if (fd != -1) lseek(fd, 0, SEEK_SET); } inline void MimeInputSource::seek(unsigned int seekToOffset) { if (offset > seekToOffset) reset(); char c; while (seekToOffset > offset) { if (!getChar(&c)) break; } } inline bool MimeInputSource::getChar(char *c) { if (head == tail && !fillInputBuffer()) return false; *c = data[head++ & (0x4000-1)]; ++offset; return true; } inline void MimeInputSource::ungetChar() { --head; --offset; } inline int MimeInputSource::getFileDescriptor(void) const { return fd; } inline unsigned int MimeInputSource::getOffset(void) const { return offset; } /////////////////////////////////// class MimeInputSourceStream : public MimeInputSource { public: inline MimeInputSourceStream(std::istream& s, unsigned int start = 0); virtual inline ssize_t fillRaw(char *raw, size_t nb); virtual inline void reset(void); private: std::istream& s; }; inline MimeInputSourceStream::MimeInputSourceStream(std::istream& si, unsigned int start) : MimeInputSource(-1, start), s(si) { } inline ssize_t MimeInputSourceStream::fillRaw(char *raw, size_t nb) { // Why can't streams tell how many characters were actually read // when hitting eof ? std::streampos st = s.tellg(); s.seekg(0, std::ios::end); std::streampos lst = s.tellg(); s.seekg(st); size_t nbytes = size_t(lst - st); if (nbytes > nb) { nbytes = nb; } if (nbytes <= 0) { return (ssize_t)-1; } s.read(raw, nbytes); return static_cast(nbytes); } inline void MimeInputSourceStream::reset(void) { MimeInputSource::reset(); s.seekg(0); } } #endif recoll-1.43.12/bincimapmime/COPYING0000644000175000017500000004461115121730572016142 0ustar dockesdockesThis software is released under the GPL. Find a full copy of the GNU General Public License below. In addition, as a special exception, Andreas Aardal Hanssen, author of Binc IMAP, gives permission to link the code of this program with the OpenSSL library (or with modified versions of OpenSSL that use the same license as OpenSSL, listed in the included COPYING.OpenSSL file), and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL. If you modify this file, you may extend this exception to your version of the file, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. --------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. recoll-1.43.12/bincimapmime/mime-printbody.cc0000644000175000017500000000322015121730572020344 0ustar dockesdockes/* -*- mode:c++;c-basic-offset:2 -*- */ /* -------------------------------------------------------------------- * Filename: * mime-printbody.cc * * Description: * Implementation of main mime parser components * -------------------------------------------------------------------- * Copyright 2002-2005 Andreas Aardal Hanssen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * -------------------------------------------------------------------- */ #include "autoconfig.h" #include "mime.h" #include "mime-inputsource.h" #include using namespace ::std; void Binc::MimePart::getBody(string &s, unsigned int startoffset, unsigned int length) const { mimeSource->reset(); mimeSource->seek(bodystartoffsetcrlf + startoffset); s.reserve(length); if (startoffset + length > bodylength) length = bodylength - startoffset; char c = '\0'; for (unsigned int i = 0; i < length; ++i) { if (!mimeSource->getChar(&c)) break; s += (char)c; } } recoll-1.43.12/bincimapmime/00README.recoll0000644000175000017500000000016314665356751017417 0ustar dockesdockesMost of the code in this directory was taken from the Binc IMAP project (http://www.bincimap.org/), version 1.3.3 recoll-1.43.12/bincimapmime/convert.cc0000644000175000017500000000672314753313623017104 0ustar dockesdockes/* -*- mode:c++;c-basic-offset:2 -*- */ /* -------------------------------------------------------------------- * Filename: * convert.cc * * Description: * Implementation of miscellaneous convertion functions. * -------------------------------------------------------------------- * Copyright 2002-2005 Andreas Aardal Hanssen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * -------------------------------------------------------------------- */ #include "convert.h" #include #ifndef NO_NAMESPACES using namespace ::std; using namespace Binc; #endif /* NO_NAMESPACES */ //------------------------------------------------------------------------ BincStream::BincStream(void) { } //------------------------------------------------------------------------ BincStream::~BincStream(void) { clear(); } //------------------------------------------------------------------------ string BincStream::popString(std::string::size_type size) { if (size > nstr.length()) size = nstr.length(); string tmp = nstr.substr(0, size); nstr = nstr.substr(size); return tmp; } //------------------------------------------------------------------------ char BincStream::popChar(void) { if (nstr.length() == 0) return '\0'; char c = nstr[0]; nstr = nstr.substr(1); return c; } //------------------------------------------------------------------------ void BincStream::unpopChar(char c) { nstr = c + nstr; } //------------------------------------------------------------------------ void BincStream::unpopStr(const string &s) { nstr = s + nstr; } //------------------------------------------------------------------------ const string &BincStream::str(void) const { return nstr; } //------------------------------------------------------------------------ void BincStream::clear(void) { nstr.clear(); } //------------------------------------------------------------------------ unsigned int BincStream::getSize(void) const { return (unsigned int) nstr.length(); } //------------------------------------------------------------------------ BincStream &BincStream::operator << (std::ostream&(*)(std::ostream&)) { nstr += "\r\n"; return *this; } //------------------------------------------------------------------------ BincStream &BincStream::operator << (const string &t) { nstr += t; return *this; } //------------------------------------------------------------------------ BincStream &BincStream::operator << (int t) { nstr += toString(t); return *this; } //------------------------------------------------------------------------ BincStream &BincStream::operator << (unsigned int t) { nstr += toString(t); return *this; } //------------------------------------------------------------------------ BincStream &BincStream::operator << (char t) { nstr += t; return *this; } recoll-1.43.12/bincimapmime/mime.h0000644000175000017500000001411314753313623016205 0ustar dockesdockes/* -------------------------------------------------------------------- * Filename: * src/parsers/mime/mime.h * * Description: * Declaration of main mime parser components * -------------------------------------------------------------------- * Copyright 2002-2005 Andreas Aardal Hanssen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * -------------------------------------------------------------------- */ #ifndef mime_h_included #define mime_h_included #include #include #include #include namespace Binc { class MimeInputSource; //---------------------------------------------------------------------- class HeaderItem { private: mutable std::string key; mutable std::string value; public: inline const std::string &getKey(void) const { return key; } inline const std::string &getValue(void) const { return value; } //-- HeaderItem(void); HeaderItem(const std::string &key, const std::string &value); }; //---------------------------------------------------------------------- class Header { private: mutable std::vector content; public: bool getFirstHeader(const std::string &key, HeaderItem &dest) const; bool getAllHeaders(const std::string &key, std::vector &dest) const; void add(const std::string &name, const std::string &content); void clear(void); //-- Header(void); ~Header(void); }; //---------------------------------------------------------------------- class IODevice; class MimeDocument; class MimePart { protected: public: mutable bool multipart; mutable bool messagerfc822; mutable std::string subtype; mutable std::string boundary; mutable unsigned int headerstartoffsetcrlf; mutable unsigned int headerlength; mutable unsigned int bodystartoffsetcrlf; mutable unsigned int bodylength; mutable unsigned int nlines; mutable unsigned int nbodylines; mutable unsigned int size; public: enum FetchType { FetchBody, FetchHeader, FetchMime }; mutable Header h; mutable std::vector members; inline const std::string &getSubType(void) const { return subtype; } inline bool isMultipart(void) const { return multipart; } inline bool isMessageRFC822(void) const { return messagerfc822; } inline unsigned int getSize(void) const { return bodylength; } inline unsigned int getNofLines(void) const { return nlines; } inline unsigned int getNofBodyLines(void) const { return nbodylines; } inline unsigned int getBodyLength(void) const { return bodylength; } inline unsigned int getBodyStartOffset(void) const { return bodystartoffsetcrlf; } void printBody(Binc::IODevice &output, unsigned int startoffset, unsigned int length) const; void getBody(std::string& s, unsigned int startoffset, unsigned int length) const; virtual void clear(void); virtual int doParseOnlyHeader(MimeInputSource *ms); virtual int doParseFull(MimeInputSource *ms, const std::string &toboundary, int &boundarysize); MimePart(void); virtual ~MimePart(void); private: MimeInputSource *mimeSource; bool parseOneHeaderLine(Binc::Header *header, unsigned int *nlines); bool skipUntilBoundary(const std::string &delimiter, unsigned int *nlines, bool *eof); inline void postBoundaryProcessing(bool *eof, unsigned int *nlines, int *boundarysize, bool *foundendofpart); void parseMultipart(const std::string &boundary, const std::string &toboundary, bool *eof, unsigned int *nlines, int *boundarysize, bool *foundendofpart, unsigned int *bodylength, std::vector *members); void parseSinglePart(const std::string &toboundary, int *boundarysize, unsigned int *nbodylines, unsigned int *nlines, bool *eof, bool *foundendofpart, unsigned int *bodylength); void parseHeader(Binc::Header *header, unsigned int *nlines); void analyzeHeader(Binc::Header *header, bool *multipart, bool *messagerfc822, std::string *subtype, std::string *boundary); void parseMessageRFC822(std::vector *members, bool *foundendofpart, unsigned int *bodylength, unsigned int *nbodylines, const std::string &toboundary); }; //---------------------------------------------------------------------- class MimeDocument : public MimePart { public: MimeDocument(void); ~MimeDocument(void); void parseOnlyHeader(int fd); void parseFull(int fd); void parseOnlyHeader(std::istream& s); void parseFull(std::istream& s); void clear(void); bool isHeaderParsed(void) const { return headerIsParsed; } bool isAllParsed(void) const { return allIsParsed; } private: bool headerIsParsed; bool allIsParsed; MimeInputSource *doc_mimeSource; }; }; #endif recoll-1.43.12/bincimapmime/mime.cc0000644000175000017500000001022615121730572016340 0ustar dockesdockes/* -*- mode:c++;c-basic-offset:2 -*- */ /* -------------------------------------------------------------------- * Filename: * mime.cc * * Description: * Implementation of main mime parser components * -------------------------------------------------------------------- * Copyright 2002-2005 Andreas Aardal Hanssen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * -------------------------------------------------------------------- */ #include "autoconfig.h" #include #include #include #include #include #include #include #include #include #include "mime.h" #include "convert.h" #include "mime-inputsource.h" using namespace std; //------------------------------------------------------------------------ Binc::MimeDocument::MimeDocument(void) { allIsParsed = false; headerIsParsed = false; doc_mimeSource = nullptr; } //------------------------------------------------------------------------ Binc::MimeDocument::~MimeDocument(void) { delete doc_mimeSource; doc_mimeSource = nullptr; } //------------------------------------------------------------------------ void Binc::MimeDocument::clear(void) { members.clear(); h.clear(); headerIsParsed = false; allIsParsed = false; delete doc_mimeSource; doc_mimeSource = nullptr; } //------------------------------------------------------------------------ void Binc::MimePart::clear(void) { members.clear(); h.clear(); mimeSource = nullptr; } //------------------------------------------------------------------------ Binc::MimePart::MimePart(void) { size = 0; messagerfc822 = false; multipart = false; nlines = 0; nbodylines = 0; mimeSource = nullptr; } //------------------------------------------------------------------------ Binc::MimePart::~MimePart(void) { } //------------------------------------------------------------------------ Binc::HeaderItem::HeaderItem(void) { } //------------------------------------------------------------------------ Binc::HeaderItem::HeaderItem(const string &key, const string &value) { this->key = key; this->value = value; } //------------------------------------------------------------------------ Binc::Header::Header(void) { } //------------------------------------------------------------------------ Binc::Header::~Header(void) { } //------------------------------------------------------------------------ bool Binc::Header::getFirstHeader(const string &key, HeaderItem &dest) const { string k = key; lowercase(k); for (vector::const_iterator i = content.begin(); i != content.end(); ++i) { string tmp = (*i).getKey(); lowercase(tmp); if (tmp == k) { dest = *i; return true; } } return false; } //------------------------------------------------------------------------ bool Binc::Header::getAllHeaders(const string &key, vector &dest) const { string k = key; lowercase(k); for (vector::const_iterator i = content.begin(); i != content.end(); ++i) { string tmp = (*i).getKey(); lowercase(tmp); if (tmp == k) dest.push_back(*i); } return (dest.size() != 0); } //------------------------------------------------------------------------ void Binc::Header::clear(void) { content.clear(); } //------------------------------------------------------------------------ void Binc::Header::add(const string &key, const string &value) { content.push_back(HeaderItem(key, value)); } recoll-1.43.12/CMakeLists.txt0000644000175000017500000004542215132125066015214 0ustar dockesdockes#[===========================================================================[.rst: Recoll CMake buildsystem ------------------------ Experimental CMake build. Since this wasn't planned to be used immediately, the version requirements are very aggressive: Debian 12+ (Bookworm) (or equivalents) Qt 5.15+ or Qt 6.4+ CMake 3.25+ C++11 (Qt5) or C++17 (Qt6) compiler Configuration ^^^^^^^^^^^^^ The build can be configured, either on the command line or in the cmake-gui, by defining the following options. (See GUI or code for defaults.) * ``RECOLL_ENABLE_X11MON`` (default: ``OFF``) * ``RECOLL_ENABLE_WEBENGINE`` (default: ``ON``) * ``RECOLL_ENABLE_LIBMAGIC`` (default: ``OFF``) * ``RECOLL_ENABLE_SYSTEMD`` (default: ``ON``, linux-only) * ``RECOLL_QT6_BUILD`` (default: ``OFF``) If ``RECOLL_ENABLE_SYSTEMD`` is true, the install paths can be overridden by setting these cache variables. (Values should be paths relative to the install prefix, e.g. ``lib/systemd/system``.) * ``SYSTEMD_SYSTEM_UNIT_DIR`` * ``SYSTEMD_USER_UNIT_DIR`` By default, pkg-config will be used to query the paths from ``systemd.pc``. If ``RECOLL_ENABLE_LIBMAGIC`` is false, the path to a suitable ``find`` utility must be compiled into librecoll. By default it will be discovered in the system PATH, to override its location set ``FindProgram_EXECUTABLE`` to a suitable path. Usage ^^^^^ cd .../recoll/src cmake -S . -B build_dir \ --install-prefix=/usr/local/ \ -G Ninja \ # or -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release \ -DRECOLL_QT6_BUILD=1 \ # for Qt6 -DRECOLL_ENABLE_WEBENGINE=1 \ # use QtWebEngine instead of QtWebKit -DRECOLL_ENABLE_X11MON=1 \ # turn on X11 session monitoring -DFindProgram_EXECUTABLE=/opt/bin/find # omit `-G Ninja` to use classical unix makefile as generator cmake --build build_dir --parallel cmake --install ./build_dir/ Toggling Options cmake -Dsome_option=ON ..... macOS ^^^^^ To assemble a portable .app bundle, you must use the Qt from official installer. The Homebrew Qt doesn't work, this is a known bug and unlikely to be fixed in short time. To specify qt path, specify `CMAKE_PREFIX_PATH` when generating the build_dir cmake -DCMAKE_PREFIX_PATH="~/Qt/6.4.2/macos" .... ~/Qt/6.4.2/macos/bin/macdeployqt recoll.app To completely avoid codesign problems, just force one #TODO: use personal codesign codesign --force --deep -s - recoll.app #]===========================================================================] cmake_minimum_required(VERSION 3.25) # Load versions from text files file(READ "RECOLL-VERSION.txt" VERSION_FILE_VERSION) string(STRIP "${VERSION_FILE_VERSION}" VERSION_FILE_VERSION) # Strip trailing version strings like "X.Y.ZpreN" that CMake doesn't support string(REGEX REPLACE "^([0-9]+\\.[0-9]+\\.[0-9]+).*$" "\\1" RECOLL_VERSION "${VERSION_FILE_VERSION}" ) file(READ "RECOLL-SOVERSION.txt" RECOLL_SOVERSION) string(STRIP "${RECOLL_SOVERSION}" RECOLL_SOVERSION) set(_parse_state "VERSION_FILE_VERSION=${VERSION_FILE_VERSION}, \ RECOLL_VERSION=${RECOLL_VERSION}, \ RECOLL_SOVERSION=${RECOLL_SOVERSION}") string(LENGTH "${RECOLL_VERSION}" _rcl_ver_len) string(LENGTH "${RECOLL_SOVERSION}" _rcl_sover_len) if (_rcl_ver_len LESS_EQUAL 0 OR _rcl_sover_len LESS_EQUAL 0) message(FATAL_ERROR "Failed to parse version files!\nGot: ${_parse_state}") endif() message(DEBUG "Got: ${_parse_state}") project(recoll VERSION ${RECOLL_VERSION} LANGUAGES CXX C) # For our custom Find modules list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") include(GNUInstallDirs) include(FeatureSummary) ### Configure Options option(RECOLL_ENABLE_X11MON "recollindex support for X11 session monitoring (Linux only)" OFF) option(RECOLL_ENABLE_WEBENGINE "Build with QtWebEngine (instead of QtWebKit)" ON) option(RECOLL_ENABLE_LIBMAGIC "Enable libmagic (avoids 'file' command requirement)" OFF) option(RECOLL_QT6_BUILD "Build using Qt6" ON) option(RECOLL_ENABLE_SYSTEMD "Install systemd unit files (linux only)" ON) option(RECOLL_QTGUI "Build GUI" ON) if (RECOLL_QT6_BUILD) set(QT_MAJOR_VERSION 6) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) else() set(QT_MAJOR_VERSION 5) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() # simulate autoheader configure_file(common/autoconfig.h.cmake.in autoconfig.h @ONLY) ### Source files set(librecoll_SOURCES aspell/rclaspell.cpp aspell/rclaspell.h bincimapmime/convert.cc bincimapmime/convert.h bincimapmime/mime-inputsource.h bincimapmime/mime-parsefull.cc bincimapmime/mime-parseonlyheader.cc bincimapmime/mime-printbody.cc bincimapmime/mime.cc bincimapmime/mime.h common/webstore.cpp common/webstore.h common/cjksplitter.cpp common/cjksplitter.h common/cnsplitter.cpp common/cnsplitter.h common/cstr.cpp common/cstr.h common/firstmatchline.cpp common/firstmatchline.h common/kosplitter.cpp common/rclconfig.cpp common/rclconfig.h common/rclinit.cpp common/rclinit.h common/rclutil.cpp common/rclutil.h common/syngroups.cpp common/syngroups.h common/textsplit.cpp common/textsplit.h common/unacpp.cpp common/unacpp.h common/uproplist.h index/webqueuefetcher.cpp index/webqueuefetcher.h index/checkretryfailed.cpp index/checkretryfailed.h index/exefetcher.cpp index/exefetcher.h index/fetcher.cpp index/fetcher.h index/fsfetcher.cpp index/fsfetcher.h index/idxdiags.h index/idxdiags.cpp index/idxstatus.h index/idxstatus.cpp index/mimetype.cpp index/mimetype.h index/rclmon.h index/recollindex.h index/subtreelist.cpp index/subtreelist.h internfile/Filter.h internfile/extrameta.cpp internfile/extrameta.h internfile/htmlparse.cpp internfile/htmlparse.h internfile/indextext.h internfile/internfile.cpp internfile/internfile.h internfile/mh_exec.cpp internfile/mh_exec.h internfile/mh_execm.cpp internfile/mh_execm.h internfile/mh_html.cpp internfile/mh_html.h internfile/mh_mail.cpp internfile/mh_mail.h internfile/mh_mbox.cpp internfile/mh_mbox.h internfile/mh_null.h internfile/mh_symlink.h internfile/mh_text.cpp internfile/mh_text.h internfile/mh_unknown.h internfile/mh_xslt.cpp internfile/mh_xslt.h internfile/mimehandler.cpp internfile/mimehandler.h internfile/myhtmlparse.cpp internfile/myhtmlparse.h internfile/txtdcode.cpp internfile/uncomp.cpp internfile/uncomp.h query/docseq.cpp query/docseq.h query/docseqdb.cpp query/docseqdb.h query/docseqdocs.h query/docseqhist.cpp query/docseqhist.h query/dynconf.cpp query/dynconf.h query/filtseq.cpp query/filtseq.h query/hldata.h query/hldata.cpp common/plaintorich.cpp common/plaintorich.h query/qresultstore.cpp query/qresultstore.h query/recollq.cpp query/recollq.h query/reslistpager.cpp query/reslistpager.h query/sortseq.cpp query/sortseq.h query/wasaparse.cpp # generated via wasaparse.ypp query/wasaparseaux.cpp query/wasaparserdriver.h query/wasatorcl.h rcldb/daterange.cpp rcldb/daterange.h rcldb/expansiondbs.cpp rcldb/expansiondbs.h rcldb/rclabstract.cpp rcldb/rclabsfromtext.cpp rcldb/rcldb.cpp rcldb/rclndb.cpp rcldb/rcldb.h rcldb/rcldb_p.h rcldb/rcldoc.cpp rcldb/rcldoc.h rcldb/rcldups.cpp rcldb/rclquery.cpp rcldb/rclquery.h rcldb/rclquery_p.h rcldb/rclterms.cpp rcldb/rclvalues.cpp rcldb/rclvalues.h rcldb/searchdata.cpp rcldb/searchdata.h rcldb/searchdatatox.cpp rcldb/searchdataxml.cpp rcldb/stemdb.cpp rcldb/stemdb.h rcldb/stoplist.cpp rcldb/stoplist.h rcldb/synfamily.cpp rcldb/synfamily.h rcldb/termproc.h rcldb/xmacros.h unac/unac.cpp unac/unac.h unac/unac_version.h utils/appformime.cpp utils/appformime.h utils/base64.cpp utils/base64.h utils/boolexp.cpp utils/boolexp.h utils/cancelcheck.cpp utils/cancelcheck.h utils/chrono.h utils/chrono.cpp utils/circache.cpp utils/circache.h utils/closefrom.cpp utils/closefrom.h utils/cmdtalk.cpp utils/cmdtalk.h utils/conftree.cpp utils/conftree.h utils/copyfile.cpp utils/copyfile.h utils/cpuconf.cpp utils/cpuconf.h utils/damlev.h utils/ecrontab.cpp utils/ecrontab.h utils/execmd.cpp utils/execmd.h utils/fileudi.cpp utils/fileudi.h utils/fstreewalk.cpp utils/fstreewalk.h utils/idfile.cpp utils/idfile.h utils/listmem.cpp utils/listmem.h utils/log.cpp utils/log.h utils/md5.cpp utils/md5.h utils/md5ut.cpp utils/md5ut.h utils/mimeparse.cpp utils/mimeparse.h utils/miniz.cpp utils/miniz.h utils/netcon.cpp utils/netcon.h utils/pathut.cpp utils/pathut.h utils/picoxml.h utils/pxattr.cpp utils/pxattr.h utils/rclionice.cpp utils/rclionice.h utils/readfile.cpp utils/readfile.h utils/smallut.cpp utils/smallut.h utils/strmatcher.cpp utils/strmatcher.h utils/transcode.cpp utils/transcode.h utils/utf8iter.cpp utils/utf8iter.h utils/wipedir.cpp utils/wipedir.h utils/workqueue.h utils/x11mon.cpp utils/x11mon.h utils/zlibut.cpp utils/zlibut.h xaposix/safeunistd.h ) set(recollindex_SOURCES index/checkindexed.cpp index/checkindexed.h index/fsindexer.cpp index/fsindexer.h index/indexer.cpp index/indexer.h index/rclmonprc.cpp index/rclmonrcv.cpp index/recollindex.cpp index/webqueue.cpp index/webqueue.h ) set(recollq_SOURCE query/recollqmain.cpp query/recollq.cpp query/recollq.h) set(example_config_files sampleconf/fields sampleconf/fragment-buttons.xml sampleconf/mimeconf sampleconf/mimemap sampleconf/mimeview sampleconf/recoll-common.css sampleconf/recoll-common.qss sampleconf/recoll-dark.css sampleconf/recoll-dark.qss sampleconf/recoll.conf sampleconf/recoll.qss ) set(filter_files python/recoll/recoll/rclconfig.py python/recoll/recoll/conftree.py filters/abiword.xsl filters/cmdtalk.py filters/fb2.xsl filters/gnumeric.xsl filters/kosplitter.py filters/msodump.zip filters/okular-note.xsl filters/opendoc-body.xsl filters/opendoc-flat.xsl filters/opendoc-meta.xsl filters/openxml-meta.xsl filters/openxml-ppt-body.xsl filters/openxml-visio-body.xsl filters/openxml-word-body.xsl filters/openxml-xls-body.xsl filters/ppt-dump.py filters/rcl7z.py filters/rclaptosidman filters/rclaspell-sugg.py filters/rclaudio.py filters/rclbasehandler.py filters/rclbibtex.sh filters/rclcheckneedretry.sh filters/rclchm.py filters/rcldia.py filters/rcldjvu.py filters/rcldoc.py filters/rcldvi filters/rclepub.py filters/rclepub1.py filters/rclexec1.py filters/rclexecm.py filters/rclfb2.py filters/rclgaim filters/rclgenxslt.py filters/rclhwp.py filters/rclics.py filters/rclimg filters/rclimg.py filters/rclinfo.py filters/rclipynb.py filters/rclkar.py filters/rclkwd filters/rcllatinclass.py filters/rcllatinstops.zip filters/rcllyx filters/rclman filters/rclmidi.py filters/rclocr.py filters/rclocrabbyy.py filters/rclocrcache.py filters/rclocrtesseract.py filters/rclopxml.py filters/rclorgmode.py filters/rclpages.py filters/rclpdf.py filters/rclppt.py filters/rclps filters/rclpst.py filters/rclpurple filters/rclpython.py filters/rclrar.py filters/rclrtf.py filters/rclscribus filters/rclshowinfo filters/rcltar.py filters/rcltex filters/rcltext.py filters/rcluncomp filters/rcluncomp.py filters/rclwar.py filters/rclxls.py filters/rclxml.py filters/rclxmp.py filters/rclxslt.py filters/rclzip.py filters/recoll-we-move-files.py filters/recollepub.zip filters/svg.xsl filters/thunderbird-open-message.sh filters/xls-dump.py filters/xlsxmltocsv.py filters/xml.xsl ) set(mtpics_files qtgui/mtpics/aptosid-book.png qtgui/mtpics/aptosid-manual.png qtgui/mtpics/archive.png qtgui/mtpics/book.png qtgui/mtpics/bookchap.png qtgui/mtpics/document.png qtgui/mtpics/drawing.png qtgui/mtpics/emblem-symbolic-link.png qtgui/mtpics/folder.png qtgui/mtpics/html.png qtgui/mtpics/image.png qtgui/mtpics/message.png qtgui/mtpics/mozilla_doc.png qtgui/mtpics/pdf.png qtgui/mtpics/pidgin.png qtgui/mtpics/postscript.png qtgui/mtpics/presentation.png qtgui/mtpics/sidux-book.png qtgui/mtpics/soffice.png qtgui/mtpics/source.png qtgui/mtpics/sownd.png qtgui/mtpics/spreadsheet.png qtgui/mtpics/text-x-python.png qtgui/mtpics/txt.png qtgui/mtpics/video.png qtgui/mtpics/wordprocessing.png ) set(docs_files doc/user/usermanual.html doc/user/docbook-xsl.css) set(bundle_icon qtgui/images/recoll.icns) set_source_files_properties(${bundle_icon} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) set_source_files_properties(${example_config_files} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/examples) set_source_files_properties(${filter_files} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/filters) set_source_files_properties(${mtpics_files} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/images) set_source_files_properties(${docs_files} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/doc) set(COMMON_INCLUDES_DIRS bincimapmime common index internfile query rcldb unac utils xaposix ) ### Targets # Libraries shared by all targets. The cmake manual says include_directories() should be avoided, btw. include_directories( ${PROJECT_BINARY_DIR} # for autoconfig.h ${COMMON_INCLUDES_DIRS} ) #--- librecoll if (LINUX) add_library(librecoll SHARED ${librecoll_SOURCES}) else () add_library(librecoll STATIC ${librecoll_SOURCES}) endif () set_target_properties(librecoll PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${RECOLL_SOVERSION} OUTPUT_NAME recoll POSITION_INDEPENDENT_CODE TRUE ) target_compile_definitions(librecoll PUBLIC BUILDING_RECOLL READFILE_ENABLE_ZLIB READFILE_ENABLE_MINIZ READFILE_ENABLE_MD5 HAVE_DLOPEN RECOLL_DATADIR="${CMAKE_INSTALL_PREFIX}/share/recoll" ) ### External Libraries if (LINUX AND RECOLL_ENABLE_X11MON) find_package(X11 REQUIRED) # https://cmake.org/cmake/help/latest/module/FindX11.html target_link_libraries(librecoll PUBLIC ${X11MON_LIBRARIES}) target_include_directories(librecoll PUBLIC ${X11MON_INCLUDE_DIRS}) else() target_compile_definitions(librecoll PUBLIC DISABLE_X11MON) endif() # To know ${VARS} provided with find_package, check the urls find_package(LibXml2 REQUIRED) # https://cmake.org/cmake/help/latest/module/FindLibXml2.html find_package(LibXslt REQUIRED) # https://cmake.org/cmake/help/latest/module/FindLibXslt.html find_package(Xapian REQUIRED) # https://github.com/xapian/xapian/blob/master/xapian-core/cmake/xapian-config.cmake.in target_link_libraries(librecoll PUBLIC LibXml2::LibXml2 LibXslt::LibXslt ${XAPIAN_LIBRARIES} ) include_directories(${XAPIAN_INCLUDE_DIR}) if (RECOLL_ENABLE_LIBMAGIC) find_package(Libmagic REQUIRED) target_link_libraries(librecoll PUBLIC Libmagic::Libmagic) else() find_package(FileCommand REQUIRED) target_link_libraries(librecoll PUBLIC FileCommand::FILE_PROG) endif() if (APPLE) # assuming packages are installed via homebrew. include_directories(/usr/local/include /opt/homebrew/include) # External dependencies will be copied automatically via macdeployqt find_package(ZLIB REQUIRED) # https://cmake.org/cmake/help/latest/module/FindZLIB.html find_package(Iconv REQUIRED) # https://cmake.org/cmake/help/latest/module/FindIconv.html target_link_libraries(librecoll PUBLIC ZLIB::ZLIB Iconv::Iconv) endif () #--- recollindex --- add_executable(recollindex ${recollindex_SOURCES}) target_link_libraries(recollindex PRIVATE librecoll) #--- recollq --- add_executable(recollq ${recollq_SOURCE}) target_link_libraries(recollq PRIVATE librecoll) set(RECOLL_EXECUTABLES recollq recollindex) if(RECOLL_QTGUI) add_subdirectory(qtgui) set(RECOLL_EXECUTABLES ${RECOLL_EXECUTABLES} recoll) endif() ### Install targets and other runtime files if (APPLE) target_compile_definitions(recoll PRIVATE RECOLL_AS_MAC_BUNDLE) # .app bundle assembling target_sources(recoll PRIVATE ${example_config_files} ${filter_files} ${mtpics_files} ${bundle_icon} ${docs_files} ) set_target_properties(recollindex recollq PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/recoll.app/Contents/MacOS/) endif() if (LINUX) set_target_properties(${RECOLL_EXECUTABLES} PROPERTIES INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}" INSTALL_RPATH_USE_LINK_PATH TRUE ) if (RECOLL_ENABLE_SYSTEMD) find_package(SystemdPaths) install(FILES index/recollindex.service DESTINATION ${SYSTEMD_SYSTEM_UNIT_DIR}) install(FILES index/recollindex@.service DESTINATION ${SYSTEMD_USER_UNIT_DIR}) endif() install(TARGETS librecoll ${RECOLL_EXECUTABLES} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) install(FILES desktop/recoll-searchgui.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) install(FILES desktop/org.recoll.recoll.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) install(FILES desktop/recoll.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/48x48/apps) install(FILES desktop/recoll.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/pixmaps) install(FILES desktop/recoll.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps) install(FILES ${docs_files} DESTINATION ${CMAKE_INSTALL_DATADIR}/recoll/doc) install(FILES doc/man/recollindex.1 doc/man/recollq.1 doc/man/recoll.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) install(FILES doc/man/recoll.conf.5 DESTINATION ${CMAKE_INSTALL_MANDIR}/man5) install(FILES ${example_config_files} DESTINATION ${CMAKE_INSTALL_DATADIR}/recoll/examples) install(FILES ${filter_files} DESTINATION ${CMAKE_INSTALL_DATADIR}/recoll/filters) install(FILES ${mtpics_files} DESTINATION ${CMAKE_INSTALL_DATADIR}/recoll/images) install(FILES ${QM_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/recoll/translations) endif () feature_summary(WHAT ALL DESCRIPTION "Build configuration:") recoll-1.43.12/doc/0000755000175000017500000000000014665356751013233 5ustar dockesdockesrecoll-1.43.12/doc/user/0000755000175000017500000000000015134672441014176 5ustar dockesdockesrecoll-1.43.12/doc/user/recoll.conf.xml0000644000175000017500000017473015133363632017136 0ustar dockesdockes Recoll main configuration file, recoll.conf Parameters affecting what documents we index topdirs Space-separated list of files or directories to recursively index. You can use symbolic links in the list, they will be followed, independently of the value of the followLinks variable. The default value is ~ : recursively index the user home folder. monitordirs Space-separated list of files or directories to monitor for updates. When running the real-time indexer, this allows monitoring only a subset of the whole indexed area. The elements must be included in the tree defined by the 'topdirs' members. skippedNames File and directory names which should be ignored. White space separated list of wildcard patterns (simple ones, not paths, must contain no '/' characters), which will be tested against file and directory names. Have a look at the default configuration for the initial value, some entries may not suit your situation. The easiest way to see it is through the GUI Index configuration "local parameters" panel. The list in the default configuration does not exclude hidden directories (names beginning with a dot), which means that it may index quite a few things that you do not want. On the other hand, email user agents like Thunderbird usually store messages in hidden directories, and you probably want this indexed. One possible solution is to have ".*" in "skippedNames", and add things like "~/.thunderbird" "~/.evolution" to "topdirs". Not even the file names are indexed for patterns in this list, see the "noContentSuffixes" variable for an alternative approach which indexes the file names. Can be redefined for any subtree. skippedNames- List of name patterns to remove from the default skippedNames list. Allows modifying the list in the local configuration without copying it. skippedNames+ List of name patterns to add to the default skippedNames list. Allows modifying the list in the local configuration without copying it. onlyNames Regular file name filter patterns. This is normally empty. If set, only the file names not in skippedNames and matching one of the patterns will be considered for indexing. Can be redefined per subtree. Does not apply to directories. noContentSuffixes List of name endings (not necessarily dot-separated suffixes) for which we don't try MIME type identification, and don't uncompress or index content. Only the names will be indexed. This complements the now obsoleted recoll_noindex list from the mimemap file, which will go away in a future release (the move from mimemap to recoll.conf allows editing the list through the GUI). This is different from skippedNames because these are name ending matches only (not wildcard patterns), and the file name itself gets indexed normally. This can be redefined for subdirectories. noContentSuffixes- List of name endings to remove from the default noContentSuffixes list. noContentSuffixes+ List of name endings to add to the default noContentSuffixes list. skippedPaths Absolute paths we should not go into. Space-separated list of wildcard expressions for absolute filesystem paths (for files or directories). The variable must be defined at the top level of the configuration file, not in a subsection. Any value in the list must be textually consistent with the values in topdirs, no attempts are made to resolve symbolic links. In practise, if, as is frequently the case, /home is a link to /usr/home, your default topdirs will have a single entry "~" which will be translated to "/home/yourlogin". In this case, any skippedPaths entry should start with "/home/yourlogin" *not* with "/usr/home/yourlogin". The index and configuration directories will automatically be added to the list. The expressions are matched using "fnmatch(3)" with the FNM_PATHNAME flag set by default. This means that "/" characters must be matched explicitly. You can set "skippedPathsFnmPathname" to 0 to disable the use of FNM_PATHNAME (meaning that "/*/dir3" will match "/dir1/dir2/dir3"). The default value contains the usual mount point for removable media to remind you that it is in most cases a bad idea to have Recoll work on these. Explicitly adding "/media/xxx" to the "topdirs" variable will override this. skippedPathsFnmPathname Set to 0 to override use of FNM_PATHNAME for matching skipped paths. nowalkfn File name which will cause its parent directory to be skipped. Any directory containing a file with this name will be skipped as if it was part of the skippedPaths list. Ex: .recoll-noindex daemSkippedPaths skippedPaths equivalent specific to real time indexing. This enables having parts of the tree which are initially indexed but not monitored. If daemSkippedPaths is not set, the daemon uses skippedPaths. followLinks Follow symbolic links during indexing. The default is to ignore symbolic links to avoid multiple indexing of linked files. No effort is made to avoid duplication when this option is set to true. This option can be set individually for each of the "topdirs" members by using sections. It can not be changed below the "topdirs" level. Links in the "topdirs" list itself are always followed. indexedmimetypes Restrictive list of indexed MIME types. Normally not set (in which case all supported types are indexed). If it is set, only the types from the list will have their contents indexed. The names will be indexed anyway if indexallfilenames is set (default). MIME type names should be taken from the mimemap file (the values may be different from xdg-mime or file -i output in some cases). Can be redefined for subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values. excludedmimetypes List of excluded MIME types. Lets you exclude some types from indexing. MIME type names should be taken from the mimemap file (the values may be different from xdg-mime or file -i output in some cases) Can be redefined for subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values. nomd5types MIME types for which we don't compute a md5 hash. md5 checksums are used only for deduplicating results, and can be very expensive to compute on multimedia or other big files. This list lets you turn off md5 computation for selected types. It is global (no redefinition for subtrees). At the moment, it only has an effect for external handlers (exec and execm). The file types can be specified by listing either MIME types (e.g. audio/mpeg) or handler names (e.g. rclaudio.py). compressedfilemaxkbs Size limit for compressed files. We need to decompress these in a temporary directory for identification, which can be wasteful in some cases. Limit the waste. Negative means no limit. 0 results in no processing of any compressed file. Default 100 MB. This does *not* concern archives like zip or rar files, but only single, e.g. gzipped, files. textfilemaxmbs Size limit for text files. Mostly for skipping monster logs. Also used for max mail msg body size. Default 20 MB. Use a value of -1 to disable. textfilepagekbs Page size for text files. If this is set, text/plain files will be divided into documents of approximately this size. This will reduce memory usage at index time and help with loading data in the preview window at query time. Particularly useful with very big files, such as application or system logs. Also see textfilemaxmbs and compressedfilemaxkbs. textunknownasplain Process unknown text/xxx files as text/plain Allows indexing misc. text files identified as text/whatever by "file" or "xdg-mime" without having to explicitely set config entries for them. This works fine for indexing (also will cause processing of a lot of useless files), but the documents indexed this way will be opened by the desktop viewer, even if text/plain has a specific editor. indexallfilenames Index the file names of unprocessed files. Index the names of files the contents of which we don't index because of an excluded or unsupported MIME type. usesystemfilecommand Use a system mechanism as last resort to guess a MIME type. Depending on platform and version, a compile-time configuration will decide if this actually executes a command or uses libmagic. This last-resort identification (if the suffix-based one failed) is generally useful, but will cause the indexing of many bogus extension-less "text" files. Also see "systemfilecommand". systemfilecommand Command to use for guessing the MIME type if the internal methods fail. This is ignored on Windows or with Recoll 1.38+ if compiled with libmagic enabled (the default). Otherwise, this should be a "file -i" workalike. The file path will be added as a last parameter to the command line. "xdg-mime" works better than the traditional "file" command, and is now the configured default (with a hard-coded fallback to "file") processwebqueue Decide if we process the Web queue. The queue is a directory where the Recoll Web browser plugins create the copies of visited pages. membermaxkbs Size limit for archive members. This is passed to the MIME handlers in the environment as RECOLL_FILTER_MAXMEMBERKB. Parameters affecting how we generate terms and organize the index indexStripChars Decide if we store character case and diacritics in the index. If we do, searches sensitive to case and diacritics can be performed, but the index will be bigger, and some marginal weirdness may sometimes occur. The default is a stripped index. When using multiple indexes for a search, this parameter must be defined identically for all. Changing the value implies an index reset. indexStoreDocText Decide if we store the documents' text content in the index. Storing the text allows extracting snippets from it at query time, instead of building them from index position data. Newer Xapian index formats have rendered our use of positions list unacceptably slow in some cases. The last Xapian index format with good performance for the old method is Chert, which is default for 1.2, still supported but not default in 1.4 and will be dropped in 1.6. The stored document text is translated from its original format to UTF-8 plain text, but not stripped of upper-case, diacritics, or punctuation signs. Storing it increases the index size by 10-20% typically, but also allows for nicer snippets, so it may be worth enabling it even if not strictly needed for performance if you can afford the space. The variable only has an effect when creating an index, meaning that the xapiandb directory must not exist yet. Its exact effect depends on the Xapian version. For Xapian 1.4, if the variable is set to 0, we used to use the Chert format and not store the text. If the variable was 1, Glass was used, and the text stored. We don't do this any more: storing the text has proved to be the much better option, and dropping this possibility simplifies the code. So now, the index format for a new index is always the default, but the variable still controls if the text is stored or not, and the abstract generation method. With Xapian 1.4 and later, and the variable set to 0, abstract generation may be very slow, but this setting may still be useful to save space if you do not use abstract generation at all, by using the appropriate setting in the GUI, and/or avoiding the Python API or recollq options which would trigger it. nonumbers Decides if terms will be generated for numbers. For example "123", "1.5e6", 192.168.1.4, would not be indexed if nonumbers is set ("value123" would still be). Numbers are often quite interesting to search for, and this should probably not be set except for special situations, ie, scientific documents with huge amounts of numbers in them, where setting nonumbers will reduce the index size. This can only be set for a whole index, not for a subtree. notermpositions Do not store term positions. Term positions allow for phrase and proximity searches, but make the index much bigger. In some special circumstances, you may want to dispense with them. dehyphenate Determines if we index "coworker" also when the input is "co-worker". This is new in version 1.22, and on by default. Setting the variable to off allows restoring the previous behaviour. indexedpunctuation String of UTF-8 punctuation characters to be indexed as words. The resulting terms will then be searchable and, for example, by setting the parameter to "%€" (without the double quotes), you would be able to search separately for "100%" or "100€" Note that "100%" or "100 %" would be indexed in the same way, the characters are their own word separators. backslashasletter Process backslash as a normal letter. This may make sense for people wanting to index TeX commands as such but is not of much general use. underscoreasletter Process underscore as normal letter. This makes sense in so many cases that one wonders if it should not be the default. maxtermlength Maximum term length in Unicode characters. Words longer than this will be discarded. The default is 40 and used to be hard-coded, but it can now be adjusted. You may need an index reset if you change the value. maxdbdatarecordkbs Maximum binary size of a Xapian document data record. The data record holds "stored" document metadata fields. A very big size usually indicates a document parse error. Xapian has a hard limit of around 100MB for this. maxdbstoredtextmbs Maximum binary size of a document stored text. Xapian has a hard limit of around 100MB for the compressed value, but our limit is before compression, so there may be some wiggle room. nocjk Decides if specific East Asian (Chinese Korean Japanese) characters/word splitting is turned off. This will save a small amount of CPU if you have no CJK documents. If your document base does include such text but you are not interested in searching it, setting nocjk may be a significant time and space saver. cjkngramlen This lets you adjust the size of n-grams used for indexing CJK text. The default value of 2 is probably appropriate in most cases. A value of 3 would allow more precision and efficiency on longer words, but the index will be approximately twice as large. hangultagger External tokenizer for Korean Hangul. This allows using an language specific processor for extracting terms from Korean text, instead of the generic n-gram term generator. See https://www.recoll.org/pages/recoll-korean.html for instructions. chinesetagger External tokenizer for Chinese. This allows using the language specific Jieba tokenizer for extracting meaningful terms from Chinese text, instead of the generic n-gram term generator. See https://www.recoll.org/pages/recoll-chinese.html for instructions. indexstemminglanguages Languages for which to create stemming expansion data. Stemmer names can be found by executing "recollindex -l", or this can also be set from a list in the GUI. The values are full language names, e.g. english, french... defaultcharset Default character set. This is used for files which do not contain a character set definition (e.g.: text/plain). Values found inside files, e.g. a "charset" tag in HTML documents, will override it. If this is not set, the default character set is the one defined by the NLS environment ($LC_ALL, $LC_CTYPE, $LANG), or ultimately iso-8859-1 (cp-1252 in fact). If for some reason you want a general default which does not match your LANG and is not 8859-1, use this variable. This can be redefined for any sub-directory. unac_except_trans A list of characters, encoded in UTF-8, which should be handled specially when converting text to unaccented lowercase. For example, in Swedish, the letter a with diaeresis has full alphabet citizenship and should not be turned into an a. Each element in the space-separated list has the special character as first element and the translation following. The handling of both the lowercase and upper-case versions of a character should be specified, as appartenance to the list will turn-off both standard accent and case processing. The value is global and affects both indexing and querying. We also convert a few confusing Unicode characters (quotes, hyphen) to their ASCII equivalent to avoid "invisible" search failures. Examples: Swedish: unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl åå Åå ’' ❜' ʼ' ‐- . German: unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- . French: you probably want to decompose oe and ae and nobody would type a German ß unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- . The default for all until someone protests follows. These decompositions are not performed by unac, but it is unlikely that someone would type the composed forms in a search. unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- maildefcharset Overrides the default character set for email messages which don't specify one. This is mainly useful for readpst (libpst) dumps, which are utf-8 but do not say so. localfields Set fields on all files (usually of a specific fs area). Syntax is the usual: name = value ; attr1 = val1 ; [...] value is empty so this needs an initial semi-colon. This is useful, e.g., for setting the rclaptg field for application selection inside mimeview. testmodifusemtime Use mtime instead of ctime to test if a file has been modified. The time is used in addition to the size, which is always used. Setting this can reduce re-indexing on systems where extended attributes are used (by some other application), but not indexed, because changing extended attributes only affects ctime. Notes: - This may prevent detection of change in some marginal file rename cases (the target would need to have the same size and mtime). - You should probably also set noxattrfields to 1 in this case, except if you still prefer to perform xattr indexing, for example if the local file update pattern makes it of value (as in general, there is a risk for pure extended attributes updates without file modification to go undetected). Perform a full index reset after changing this. noxattrfields Disable extended attributes conversion to metadata fields. This probably needs to be set if testmodifusemtime is set. metadatacmds Define commands to gather external metadata, e.g. tmsu tags. There can be several entries, separated by semi-colons, each defining which field name the data goes into and the command to use. Don't forget the initial semi-colon. All the field names must be different. You can use aliases in the "field" file if necessary. As a not too pretty hack conceded to convenience, any field name beginning with "rclmulti" will be taken as an indication that the command returns multiple field values inside a text blob formatted as a recoll configuration file ("fieldname = fieldvalue" lines). The rclmultixx name will be ignored, and field names and values will be parsed from the data. Example: metadatacmds = ; tags = tmsu tags %f; rclmulti1 = cmdOutputsConf %f Parameters affecting where and how we store things cachedir Top directory for Recoll data. Recoll data directories are normally located relative to the configuration directory (e.g. ~/.recoll/xapiandb, ~/.recoll/mboxcache). If "cachedir" is set, the directories are stored under the specified value instead (e.g. if cachedir is ~/.cache/recoll, the default dbdir would be ~/.cache/recoll/xapiandb). This affects dbdir, webcachedir, mboxcachedir, aspellDicDir, which can still be individually specified to override cachedir. Note that if you have multiple configurations, each must have a different cachedir, there is no automatic computation of a subpath under cachedir. maxfsoccuppc Maximum file system occupation over which we stop indexing. The value is a percentage, corresponding to what the "Capacity" df output column shows. The default value is 0, meaning no checking. This parameter is only checked when the indexer starts, it will not change the behaviour or a running process. dbdir Xapian database directory location. This will be created on first indexing. If the value is not an absolute path, it will be interpreted as relative to cachedir if set, or the configuration directory (-c argument or $RECOLL_CONFDIR). If nothing is specified, the default is then ~/.recoll/xapiandb/ idxstatusfile Name of the scratch file where the indexer process updates its status. Default: idxstatus.txt inside the configuration directory. mboxcachedir Directory location for storing mbox message offsets cache files. This is normally "mboxcache" under cachedir if set, or else under the configuration directory, but it may be useful to share a directory between different configurations. mboxcacheminmbs Minimum mbox file size over which we cache the offsets. There is really no sense in caching offsets for small files. The default is 5 MB. mboxmaxmsgmbs Maximum mbox member message size in megabytes. Size over which we assume that the mbox format is bad or we misinterpreted it, at which point we just stop processing the file. webcachedir Directory where we store the archived web pages after they are processed. This is only used by the Web history indexing code. Note that this is different from webdownloadsdir which tells the indexer where the web pages are stored by the browser, before they are indexed and stored into webcachedir. Default: cachedir/webcache if cachedir is set, else $RECOLL_CONFDIR/webcache webcachemaxmbs Maximum size in MB of the Web archive. This is only used by the web history indexing code. Default: 40 MB. Reducing the size will not physically truncate the file. webqueuedir The path to the Web indexing queue. This used to be hard-coded in the old plugin as ~/.recollweb/ToIndex so there would be no need or possibility to change it, but the WebExtensions plugin now downloads the files to the user Downloads directory, and a script moves them to webqueuedir. The script reads this value from the config so it has become possible to change it. webdownloadsdir The path to the browser add-on download directory. This tells the indexer where the Web browser add-on stores the web page data. The data is then moved by a script to webqueuedir, then processed, and finally stored in webcachedir for future previews. webcachekeepinterval Page recycle interval By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ("day", "week", "month", "year"). Note that increasing the interval will not erase existing entries. aspellDicDir Aspell dictionary storage directory location. The aspell dictionary (aspdict.(lang).rws) is normally stored in the directory specified by cachedir if set, or under the configuration directory. filtersdir Directory location for executable input handlers. If RECOLL_FILTERSDIR is set in the environment, we use it instead. Defaults to $prefix/share/recoll/filters. Can be redefined for subdirectories. iconsdir Directory location for icons. The only reason to change this would be if you want to change the icons displayed in the result list. Defaults to $prefix/share/recoll/images Parameters affecting indexing performance and resource usage idxflushmb Threshold (megabytes of new data) where we flush from memory to disk index. Setting this allows some control over memory usage by the indexer process. A value of 0 means no explicit flushing, which lets Xapian perform its own thing, meaning flushing every $XAPIAN_FLUSH_THRESHOLD documents created, modified or deleted: as memory usage depends on average document size, not only document count, the Xapian approach is is not very useful, and you should let Recoll manage the flushes, however the program compiled value is 0. The configured default value (from this file) is now 100 MB, and should be ok in many cases. You can set it as low as 10 to conserve memory, but if you are looking for maximum speed, you may want to experiment with values between 20 and 300. In my experience, values beyond this tend to be counterproductive. If you find otherwise, please drop me a note. filtermaxseconds Linux: maximum external filter execution time in seconds. Default 1200 (20mn). Set to 0 for no limit. This is mainly to avoid infinite loops in postscript files (loop.ps) filtermaxmbytes Linux: maximum virtual memory space for filter processes (setrlimit(RLIMIT_AS)), in megabytes. Note that this includes any mapped libs (there is no reliable Linux way to limit the data space only), so we need to be a bit generous here. Anything over 2000 will be ignored on 32 bits machines. The high default value is needed because of java-based handlers (pdftk) which need a lot of VM (most of it text), esp. pdftk when executed from Python rclpdf.py. You can use a much lower value if you don't need Java. oomadj Linux: Out-Of-Memory killer adjust score value for the indexer process. See choom(1). During the indexer startup, this value is passed as the adjust parameter to the choom command with the indexer process as target. thrQSizes Task queue depths for each stage and threading configuration control. There are three internal queues in the indexing pipeline stages (file data extraction, terms generation, index update). This parameter defines the queue depths for each stage (three integer values). In practise, deep queues have not been shown to increase performance. The first value is also used to control threading autoconfiguration or disabling multithreading. If the first queue depth is set to 0 Recoll will set the queue depths and thread counts based on the detected number of CPUs. The arbitrarily chosen values are as follows (depth,nthread). 1 CPU -> no threading. Less than 4 CPUs: (2, 2) (2, 2) (2, 1). Less than 6: (2, 4), (2, 2), (2, 1). Else (2, 5), (2, 3), (2, 1). If the first queue depth is set to -1, multithreading will be disabled entirely. The second and third values are ignored in both these cases. thrTCounts Number of threads used for each indexing stage. If the first entry in thrQSizes is not 0 or -1, these three values define the number of threads used for each stage (file data extraction, term generation, index update). It makes no sense to use a value other than 1 for the last stage because updating the Xapian index is necessarily single-threaded (and protected by a mutex). thrTmpDbCnt Number of temporary indexes used during incremental or full indexing. If not set to zero, this defines how many temporary indexes we use during indexing. These temporary indexes are merged into the main one at the end of the operation. Using multiple indexes and a final merge can significantly improve indexing performance when the single-threaded Xapian index updates become a bottleneck. How useful this is depends on the type of input and CPU. See the manual for more details. suspendonbattery Suspend the real time indexing when the system runs on battery. The indexer will wait for a return on AC and reexec itself when it happens. Miscellaneous parameters loglevel Log file verbosity 1-6. A value of 2 will print only errors and warnings. 3 will print information like document updates, 4 is quite verbose and 6 very verbose. logfilename Log file destination. Use "stderr" (default) to write to the console. logthedate Have each log line begin with the date and time. e.g.: 2025-08-21T18:58:24+0200 :3:... idxloglevel Override loglevel for the indexer. idxlogfilename Override logfilename for the indexer. idxlogthedate override logthedate for the indexer. helperlogfilename Destination file for external helpers standard error output. The external program error output is left alone by default, e.g. going to the terminal when the recoll[index] program is executed from the command line. Use /dev/null or a file inside a non-existent directory to completely suppress the output. daemloglevel Override loglevel for the real time indexer. The default is to use the idx... values if set, else the log... values. daemlogfilename Override logfilename for the real time indexer. The default is to use the idx... values if set, else the log... values. daemlogthedate override logthedate for the real time indexer. pyloglevel Override loglevel for the Python extension. pylogfilename Override logfilename for the Python extension. pylogthedate override logthedate for the Python extension. idxnoautopurge Do not purge data for deleted or inaccessible files This can be overridden by recollindex command line options and may be useful if some parts of the document set may predictably be inaccessible at times, so that you would only run the purge after making sure that everything is there. orgidxconfdir Original location of the configuration directory. This is used exclusively for movable datasets. Locating the configuration directory inside the directory tree makes it possible to provide automatic query time path translations once the data set has moved (for example, because it has been mounted on another location). curidxconfdir Current location of the configuration directory. Complement orgidxconfdir for movable datasets. This should be used if the configuration directory has been copied from the dataset to another location, either because the dataset is readonly and an r/w copy is desired, or for performance reasons. This records the original moved location before copy, to allow path translation computations. For example if a dataset originally indexed as "/home/me/mydata/config" has been mounted to "/media/me/mydata", and the GUI is running from a copied configuration, orgidxconfdir would be "/home/me/mydata/config", and curidxconfdir (as set in the copied configuration) would be "/media/me/mydata/config". idxrundir Indexing process current directory. The input handlers sometimes leave temporary files in the current directory, so it makes sense to have recollindex chdir to some temporary directory. If the value is empty, the current directory is not changed. If the value is (literal) tmp, we use the temporary directory as set by the environment (RECOLL_TMPDIR else TMPDIR else /tmp). If the value is an absolute path to a directory, we go there. checkneedretryindexscript Script used to heuristically check if we need to retry indexing files which previously failed. The default script checks the modified dates on /usr/bin and /usr/local/bin. A relative path will be looked up in the filters dirs, then in the path. Use an absolute path to do otherwise. recollhelperpath Additional places to search for helper executables. This is used, e.g., on Windows by the Python code, and on Mac OS by the bundled recoll.app (because I could find no reliable way to tell launchd to set the PATH). The example below is for Windows. Use ":" as entry separator for Mac and Ux-like systems, ";" is for Windows only. idxabsmlen Length of abstracts we store while indexing. Recoll stores an abstract for each indexed file. The text can come from an actual "abstract" section in the document or will just be the beginning of the document. It is stored in the index so that it can be displayed inside the result lists without decoding the original file. The idxabsmlen parameter defines the size of the stored abstract. The default value is 250 bytes. The search interface gives you the choice to display this stored text or a synthetic abstract built by extracting text around the search terms. If you always prefer the synthetic abstract, you can reduce this value and save a little space. idxmetastoredlen Truncation length of stored metadata fields. This does not affect indexing (the whole field is processed anyway), just the amount of data stored in the index for the purpose of displaying fields inside result lists or previews. The default value is 150 bytes which may be too low if you have custom fields. idxtexttruncatelen Truncation length for all document texts. Only index the beginning of documents. This is not recommended except if you are sure that the interesting keywords are at the top and have severe disk space issues. idxsynonyms Name of the index-time synonyms file. This is only used to issue multi-word single terms for multi-word synonyms so that phrase and proximity searches work for them (ex: applejack "apple jack"). The feature will only have an effect for querying if the query-time and index-time synonym files are the same. idxniceprio "nice" process priority for the indexing processes. Default: 19 (lowest) Appeared with 1.26.5. Prior versions were fixed at 19. noaspell Disable aspell use. The aspell dictionary generation takes time, and some combinations of aspell version, language, and local terms, result in aspell crashing, so it sometimes makes sense to just disable the thing. aspellLanguage Language definitions to use when creating the aspell dictionary. The value must match a set of aspell language definition files. You can type "aspell dicts" to see a list The default if this is not set is to use the NLS environment to guess the value. The values are the 2-letter language codes (e.g. "en", "fr"...) aspellAddCreateParam Additional option and parameter to aspell dictionary creation command. Some aspell packages may need an additional option (e.g. on Debian Jessie: --local-data-dir=/usr/lib/aspell). See Debian bug 772415. aspellKeepStderr Set this to have a look at aspell dictionary creation errors. There are always many, so this is mostly for debugging. monauxinterval Auxiliary database update interval. The real time indexer only updates the auxiliary databases (stemdb, aspell) periodically, because it would be too costly to do it for every document change. The default period is one hour. monixinterval Minimum interval (seconds) between processings of the indexing queue. The real time indexer does not process each event when it comes in, but lets the queue accumulate, to diminish overhead and to aggregate multiple events affecting the same file. Default 30 S. mondelaypatterns Timing parameters for the real time indexing. Definitions for files which get a longer delay before reindexing is allowed. This is for fast-changing files, that should only be reindexed once in a while. A list of wildcardPattern:seconds pairs. The patterns are matched with fnmatch(pattern, path, 0) You can quote entries containing white space with double quotes (quote the whole entry, not the pattern). The default is empty. Example: mondelaypatterns = *.log:20 "*with spaces.*:30" monioniceclass ionice class for the indexing process. Despite the misleading name, and on platforms where this is supported, this affects all indexing processes, not only the real time/monitoring ones. The default value is 3 (use lowest "Idle" priority). monioniceclassdata ionice class level parameter if the class supports it. The default is empty, as the default "Idle" class has no levels. sofficecmd Path to the soffice command (e.g. from libreoffice) This is used for Apple pages documents and big openoffice spreadsheets. Use double-quoting if there are spaces in the path (e.g. C:/Program Files/) *and* you want to add parameters to the default command (uncommon). If not set, recoll will try to find it in the PATH. Query-time parameters (no impact on the index) idxlocalguisettings Store some GUI parameters locally to the index. GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index. autodiacsens auto-trigger diacritics sensitivity (raw index only). IF the index is not stripped, decide if we automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the "D" modifier to specify diacritics sensitivity. Default is no. autocasesens auto-trigger case sensitivity (raw index only). IF the index is not stripped (see indexStripChars), decide if we automatically trigger character case sensitivity if the search term has upper-case characters in any but the first position. Else you need to use the query language and the "C" modifier to specify character-case sensitivity. Default is yes. maxTermExpand Maximum query expansion count for a single term (e.g.: when using wildcards). This only affects queries, not indexing. We used to not limit this at all (except for filenames where the limit was too low at 1000), but it is unreasonable with a big index. Default 10000. maxXapianClauses Maximum number of clauses we add to a single Xapian query. This only affects queries, not indexing. In some cases, the result of term expansion can be multiplicative, and we want to avoid eating all the memory. Default 50000. snippetMaxPosWalk Maximum number of positions we walk while populating a snippet for the result list. The default of 1,000,000 may be insufficient for very big documents, the consequence would be snippets with possibly meaning-altering missing words. thumbnailercmd Command to use for generating thumbnails. If set, this should be a path to a command or script followed by its constant arguments. Four arguments will be appended before execution: the document URL, MIME type, target icon SIZE (e.g. 128), and output file PATH. The command should generate a thumbnail from these values. E.g. if the MIME is video, a script could use: ffmpegthumbnailer -iURL -oPATH -sSIZE. stemexpandphrases Default to applying stem expansion to phrase terms. Recoll normally does not apply stem expansion to terms inside phrase searches. Setting this parameter will change the default behaviour to expanding terms inside phrases. If set, you can use a "l" modifier to disable expansion for a specific instance. autoSpellRarityThreshold Inverse of the ratio of term occurrence to total db terms over which we look for spell neighbours for automatic query expansion When a term is very uncommon, we may (depending on user choice) look for spelling variations which would be more common and possibly add them to the query. autoSpellSelectionThreshold Ratio of spell neighbour frequency over user input term frequency beyond which we include the neighbour in the query. When a term has been selected for spelling expansion because of its rarity, we only include spelling neighbours which are more common by this ratio. kioshowsubdocs Show embedded document results in KDE dolphin/kio and krunner Embedded documents may clutter the results and are not always easily usable from the kio or krunner environment. Setting this variable will restrict the results to standalone documents. Parameters for the PDF handler pdfocr Attempt OCR of PDF files with no text content. This can be defined in subdirectories. The default is off because OCR is so very slow. pdfoutline Extract outlines and bookmarks from PDF documents (needs pdftohtml). This is not enabled by default because it is rarely needed, and the extra command takes a little time. pdfattach Enable PDF attachment extraction by executing pdfdetach (if available). This used to be disabled by default because it used pdftk. We now use pdfdetach, which is part of poppler-utils and fast. pdfextrameta Extract text from selected XMP metadata tags. This is a space-separated list of qualified XMP tag names. Each element can also include a translation to a Recoll field name, separated by a "|" character. If the second element is absent, the tag name is used as the Recoll field names. You will also need to add specifications to the "fields" file to direct processing of the extracted data. pdfextrametafix Define name of XMP field editing script. This defines the name of a script to be loaded for editing XMP field values. The script should define a "MetaFixer" class with a metafix() method which will be called with the qualified tag name and value of each selected field, for editing or erasing. A new instance is created for each document, so that the object can keep state for, e.g. eliminating duplicate values. Parameters for the ZIP file handler zipUseSkippedNames Use skippedNames inside Zip archives. Fetched directly by the rclzip.py handler. Skip the patterns defined by skippedNames inside Zip archives. Can be redefined for subdirectories. See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html zipSkippedNames Space-separated list of wildcard expressions for names that should be ignored inside zip archives. This is used directly by the zip handler. If zipUseSkippedNames is not set, zipSkippedNames defines the patterns to be skipped inside archives. If zipUseSkippedNames is set, the two lists are concatenated and used. Can be redefined for subdirectories. See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html zipMetaEncoding File path encoding. Needs Python 3.11+. Set to "detect" for using chardet. This is useful for non-standard zip files where the metadata is neither UTF-8 (indicated by a file flag), nor CP437 (default). The parameter can be set for specific subtrees. You need to install the Python3 "chardet" package if the value is set to "detect". Parameters for the Org mode handler orgmodesubdocs Index org-mode level 1 sections as separate sub-documents This is the default. If set to false, org-mode files will be indexed as plain text Parameters for the Thunderbird mbox handler mhmboxquirks Enable thunderbird/mozilla-seamonkey mbox format quirks Set this for the directory(ies) where the email mbox files are stored. Parameters for OCR processing imgocr Tell the non-default Python image handler to run OCR. See the PDF section for PDF OCR. The image OCR also needs mimeconf changes. See the manual. imgocr can be defined for subdirectories. ocrprogs OCR modules to try. The top OCR script will try to load the corresponding modules in order and use the first which reports being capable of performing OCR on the input file. Modules for tesseract (tesseract) and ABBYY FineReader (abbyy) are present in the standard distribution. For compatibility with the previous version, if this is not defined at all, the default value is "tesseract". Use an explicit empty value if needed. The value be redefined in subtrees. ocrcachedir Location for caching OCR data. The default if this is empty or undefined is to store the cached OCR data under $RECOLL_CONFDIR/ocrcache. tesseractlang Language to assume for tesseract OCR. Important for improving the OCR accuracy. This can also be set through the contents of a file in the currently processed directory. See the rclocrtesseract.py script. Example values: eng, fra... See the tesseract Web sitedocumentation for language codes and how to download additional language packs. When specifying multiple languages, use a '+' separator and no spaces, e.g. eng+fra. The value be redefined in subtrees. tesseractcmd Path for the tesseract command. Do not quote. This is mostly useful on Windows, or for specifying a non-default tesseract command. E.g. on Windows. tesseractcmd = C:/ProgramFiles/Tesseract-OCR/tesseract.exe abbyylang Language to assume for abbyy OCR. Important for improving the OCR accuracy. This can also be set through the contents of a file in the currently processed directory. See the rclocrabbyy.py script. Typical values: English, French... See the ABBYY documentation. abbyyocrcmd Path for the abbyy command The ABBY directory is usually not in the path, so you should set this. Parameters for running speech to text conversion speechtotext Activate speech to text conversion The only possible value at the moment is "whisper" for using the OpenAI whisper program. sttmodel Name of the whisper model sttdevice Name of the device to be used by for whisper recoll-1.43.12/doc/user/usermanual.html0000644000175000017500000240557415133363766017267 0ustar dockesdockes Recoll user manual

Recoll user manual

Jean-Francois Dockes

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found at the following location: GNU web site.

This document introduces full text search notions and describes the installation and use of the Recoll application. This version describes Recoll 1.43.1.


Table of Contents

1. Introduction
1.1. Giving it a try
1.2. Full text search
1.3. Recoll overview
2. Indexing
2.1. Introduction
2.1.1. Indexing modes
2.1.2. The index configuration directory
2.1.3. Document types
2.1.4. Indexing failures
2.1.5. Recovery
2.2. Index storage
2.2.1. Xapian index formats
2.2.2. Security aspects
2.2.3. Special considerations for big indexes
2.3. Index configuration
2.3.1. The index configuration GUI
2.3.2. Multiple indexes
Creating and using an additional index: Unix-like systems example
Creating an alternate index: Windows example
2.3.3. Index case and diacritics sensitivity
2.4. Indexing performance and resource usage
2.4.1. Indexing threads configuration (Unix-like systems)
2.4.2. Using multiple temporary indexes to improve indexing time (1.41.1)
2.4.3. Quieting down the indexing process
2.5. Index update scheduling
2.5.1. Periodic indexing
2.5.2. Real time indexing
2.6. Fields and metadata
2.6.1. Incorporating external metadata
Unix-like systems and MacOS systems: using extended attributes
Using a command for importing external metadata
2.7. Miscellaneous indexing notes
2.7.1. Indexing punctuation characters (1.39)
2.7.2. The PDF input handler
Extracting PDF outlines and bookmarks
XMP fields extraction
PDF attachment indexing
2.7.3. Running OCR on image documents
OCR for PDF documents
OCR for image documents
2.7.4. Running a speech to text program on audio files
2.7.5. Removable volumes
2.7.6. Unix-like systems: indexing visited Web pages
3. Searching
3.1. Introduction
3.2. Searching with the Qt graphical user interface (GUI)
3.2.1. Simple search
3.2.2. The filters panel (1.32)
3.2.3. The result list
3.2.4. The result table
3.2.5. The preview window
3.2.6. Assisted Complex Search (A.K.A. "Advanced Search")
Advanced search: the "find" tab
Advanced search: the "filter" tab
Advanced search history
3.2.7. Document history
3.2.8. Saving and restoring queries
3.2.9. Sorting search results and collapsing duplicates
3.2.10. The term explorer tool
3.2.11. The Query Fragments window
3.2.12. Searching across multiple indexes
3.2.13. Unix-like systems: displaying thumbnails
3.2.14. Unix-like systems: running arbitrary commands on result files
3.2.15. Keyboard shortcuts
3.2.16. Search tips
Terms and search expansion
Working with phrases and proximity
Others
3.2.17. Customising the search interface
Choosing the viewer applications
The GUI preferences dialog
The result list format
3.2.18. The recoll GUI command line options
3.3. Searching with the KDE KIO slave
3.4. Searching on the command line
3.5. The query language
3.5.1. General syntax
3.5.2. Special field-like specifiers
3.5.3. Range clauses
3.5.4. Modifiers
3.6. Wildcards and anchored searches
3.6.1. Wildcards
3.6.2. Anchored searches
3.7. Using Synonyms
3.8. Path translations
3.9. Search case and diacritics sensitivity
3.10. Desktop integration
4. Programming interface
4.1. Writing a document input handler
4.1.1. Simple input handlers
4.1.2. "Multiple" handlers
4.1.3. Telling Recoll about the handler
4.1.4. Input handler output
4.1.5. Page numbers
4.2. Field data processing
4.3. Python API
4.3.1. Introduction
4.3.2. Interface elements
4.3.3. Log messages for Python scripts
4.3.4. Python search interface
The recoll module
The rclextract module
Search API usage example
The fsudi module
4.3.5. Python indexing interface
Recoll external indexers
The Python indexing API
External indexers configuration
External indexer samples
Using an external indexer index in conjunction with a regular one
5. Configuration
5.1. Settings, configuration overview
5.2. Environment variables
5.3. Recoll main configuration file, recoll.conf
5.3.1. Parameters affecting what documents we index
5.3.2. Parameters affecting how we generate terms and organize the index
5.3.3. Parameters affecting where and how we store things
5.3.4. Parameters affecting indexing performance and resource usage
5.3.5. Miscellaneous parameters
5.3.6. Query-time parameters (no impact on the index)
5.3.7. Parameters for the PDF handler
5.3.8. Parameters for the ZIP file handler
5.3.9. Parameters for the Org mode handler
5.3.10. Parameters for the Thunderbird mbox handler
5.3.11. Parameters for OCR processing
5.3.12. Parameters for running speech to text conversion
5.4. The fields file
5.4.1. Extended attributes in the fields file
5.5. The mimemap file
5.6. The mimeconf file
5.7. The mimeview file
5.8. The ptrans file
5.9. Examples of configuration adjustments
5.9.1. Adding an external viewer for an non-indexed type
5.9.2. Adding indexing support for a new file type
I. Appendices
A. Processing of wild card and other special characters
A.1. Words and spans
A.2. Special ASCII characters during indexing
A.2.1. Characters with hard-coded processing
A.2.2. Characters generally treated as white space
A.2.3. Backslash
A.3. Special ASCII characters at search time
A.3.1. Query language special characters
A.3.2. Wild card characters
B. Building and Installation
B.1. Installing a binary copy
B.2. Supporting packages
B.3. Building from source
B.3.1. Prerequisites
B.3.2. Building
B.3.3. Installing
B.3.4. Python API package

List of Tables

3.1. Keyboard shortcuts

Chapter 1. Introduction

This document introduces full text search notions and describes the installation and use of the Recoll application. It is updated for Recoll 1.43.1.

Recoll on Windows

Recoll was for a long time dedicated to Unix-like systems. It was only later ported to Microsoft Windows. Many references in this manual, especially file locations, are specific to Unix, and not valid on Windows, where some described features are also not available. The manual will be updated in time. Until this is completed: on Windows, most references to shared files can be translated by looking under the Windows Recoll installation directory (Typically C:/Program Files/Recoll). Especially, anything referenced inside /usr/share in this document will be found in the Share subdirectory of the installation). The user configuration is stored by default under AppData/Local/Recoll inside the user directory, along with the index itself.

1.1. Giving it a try

If you do not like reading manuals (who does?) but wish to give Recoll a try, just install the application and start the recoll graphical user interface (GUI), which will ask permission to index your home directory, allowing you to search immediately after indexing completes.

Do not do this if your home directory contains a huge number of documents and you do not want to wait or are very short on disk space. In this case, you may first want to customise the configuration to restrict the indexed area. From the recoll GUI go to: PreferencesIndexing configuration, then adjust the Start folders section (named Top directories in older Recoll versions), which defines the directories from which the filesystem exploration starts.

By default, the indexer process writes all errors to its stderr output, which may be lost if you started the GUI from the desktop. You may find it useful to assign a file name to the Indexer log file name entry on the above indexing preferences screen. With the default level of 3, this will list all processed documents, and all errors (lines beginning with :2:).

On Unix-like systems, you may need to install the appropriate supporting applications for document types that need them (for example antiword for Microsoft Word files). The Windows package is self-contained and includes most useful auxiliary programs. After the indexing ran, the recoll GUI ToolsMissing helpers menu entry will show a list of missing supporting applications for the documents found in the indexed area.

1.2. Full text search

Recoll is a full text search application, which means that it finds your data by content rather than by external attributes (like the file name). You specify words (terms) which should or should not appear in the text you are looking for, and receive in return a list of matching documents, ordered so that the most relevant documents will appear first.

You do not need to remember in what file or email message you stored a given piece of information. You just ask for related terms, and the tool will return a list of documents where these terms are prominent, in a similar way to Internet search engines.

Full text search applications try to determine which documents are most relevant to the search terms you provide. Computer algorithms for determining relevance can be very complex, and in general are inferior to the power of the human mind to rapidly determine relevance. The quality of relevance guessing is probably the most important aspect when evaluating a search application. Recoll relies on the Xapian probabilistic information retrieval library to determine relevance.

In many cases, you are looking for all the forms of a word, including plurals, different tenses for a verb, or terms derived from the same root or stem (example: floor, floors, floored, flooring...). Queries are usually automatically expanded to all such related terms (words that reduce to the same stem). This can be prevented for searching for a specific form.

Stemming, by itself, does not accommodate for misspellings or phonetic searches. A full text search application may also support this form of approximation. For example, a search for aliterattion returning no result might propose alliteration, alteration, alterations, or altercation as possible replacement terms. Recoll bases its suggestions on the actual index contents, so that suggestions may be made for words which would not appear in a standard dictionary.

1.3. Recoll overview

Recoll uses the Xapian information retrieval library as its storage and retrieval engine. Xapian is a very mature package using a sophisticated probabilistic ranking model.

The Xapian library manages an index database which describes where terms appear in your document files. It efficiently processes the complex queries which are produced by the Recoll query expansion mechanism, and is in charge of the all-important relevance computation task.

Recoll provides the mechanisms and interface to get data into and out of the index. This includes translating the many possible document formats into pure text, handling term variations (using Xapian stemmers), and spelling approximations (using the aspell speller), interpreting user queries and presenting results.

In a shorter way, Recoll does the dirty footwork, Xapian deals with the intelligent parts of the process.

The Xapian index can be big (roughly the size of the original document set), but it is not a document archive. Recoll can only fully display documents that still exist at the place from which they were indexed. However, recent Recoll version do store the plain text from all indexed documents.

Recoll stores all internal data in Unicode UTF-8 format, and it can index many types of files with different character sets, encodings, and languages into the same index. It can process documents embedded inside other documents (for example a PDF document stored inside a Zip archive sent as an email attachment...), down to an arbitrary depth.

East asian texts are difficult to segment into words. By default, Recoll processes them by generating terms as arbitrary sequences of consecutive characters (n-grams). However, it has provisions to integrate with language-aware text segmenters for Chinese and Korean which will produce a smaller index and improved search.

Stemming is the process by which Recoll reduces words to their radicals so that searching does not depend, for example, on a word being singular or plural (floor, floors), or on a verb tense (flooring, floored). Because the mechanisms used for stemming depend on the specific grammatical rules for each language, there is a separate Xapian stemmer module for most common languages where stemming makes sense.

Recoll stores the unstemmed versions of terms in the main index and uses auxiliary databases for term expansion (one for each stemming language), which means that you can switch stemming languages between searches, or add a language without needing a full reindex.

Storing documents written in different languages in the same index is possible, and commonly done. In this situation, you can specify several stemming languages for the index.

Recoll currently makes no attempt at automatic language recognition, which means that the stemmer will sometimes be applied to terms from other languages with potentially strange results. In practise, even if this introduces possibilities of confusion, this approach has been proven quite useful, and it is much less cumbersome than separating your documents according to what language they are written in.

By default, Recoll strips most accents and diacritics from terms, and converts them to lower case before either storing them in the index or searching for them. As a consequence, it is impossible to search for a particular capitalization of a term (US / us), or to discriminate two terms based on diacritics (sake / saké, mate / maté).

Recoll can optionally store the raw terms, without accent stripping or case conversion. In this configuration, default searches will behave as before, but it is possible to perform searches sensitive to case and diacritics. This is described in more detail in the section about index case and diacritics sensitivity.

Recoll uses many parameters to define exactly what to index, and how to classify and decode the source documents. These are kept in configuration files. A default configuration is copied into a standard location (usually something like /usr/share/recoll/examples) during installation. The default values set by the configuration files in this directory may be overridden by values set inside your personal configuration. With the default configuration, Recoll will index your home directory with generic parameters. Most common parameters can be set by using configuration menus in the recoll GUI. Some less common parameters can only be set by editing the text files.

The indexing process is started automatically (after asking permission), the first time you execute the recoll GUI. Index updating or rebuild can later be performed by executing the recollindex command, in a command window, or from the GUI File menu. Recoll indexing is multithreaded by default (except on Windows) when appropriate hardware resources are available, and can perform multiple tasks in parallel for text extraction, segmentation and index updates.

Searches are usually performed inside the recoll GUI, which has many options to help you find what you are looking for. However, there are other ways to query the index:

Chapter 2. Indexing

2.1. Introduction

Indexing is the process by which the set of documents is analyzed and the data entered into the database. Recoll indexing is normally incremental: documents will only be processed if they have been modified since the last run. On the first execution, all documents will need processing. A full index build can be forced later by specifying an option to the indexing command (recollindex -z or -Z).

recollindex skips files which caused an error during a previous pass. This is a performance optimization, and the command line option -k can be set to retry failed files, for example after updating an input handler.

When a file has been deleted, recollindex removes the corresponding data from the index. The exact moment when this happens depends on the indexing mode. There are provisions to avoid deleting data for an umounted removable volume.

The following sections give an overview of different aspects of the indexing processes and configuration, with links to detailed sections.

Depending on your data, temporary files may be created during indexing, some of them possibly quite big. You can set the RECOLL_TMPDIR environment variable to determine where they are created. If RECOLL_TMPDIR is not set, Recoll will fall back to other locations depending on the system. On Unix-like systems and MacOS systems TMPDIR, TMP and TEMP will be tried before falling back to /tmp/. On Windows, Recoll will call the GetTempPath() function. Using the system normal mechanism instead of RECOLL_TMPDIR has the nice property that the auxiliary commands executed by recollindex should then create their own temporary files in the same location.

2.1.1. Indexing modes

Recoll indexing can be performed along two main modes:

  • Periodic (or batch) indexing recollindex is executed at discrete times. On Unix-like systems, the typical usage is to have a nightly run programmed into your cron file. On Windows, the Task Scheduler can be used to run indexing. In both cases, the Recoll GUI includes a simplified interface to configure the system scheduler.

  • Real time indexing recollindex runs permanently as a daemon and uses a file system alteration monitor (e.g. inotify on Unix-like systems) to detect file changes. New or updated files are indexed at once. Monitoring a big file system tree can consume significant system resources.

Choosing an indexing mode

The choice between the two methods is mostly a matter of preference, and they can be combined by setting up multiple indexes (e.g.: use periodic indexing on a big documentation directory, and real time indexing on a small home directory), or by configuring the index so that only a subset of the tree will be monitored.

The choice of method and the parameters used can be configured from the recoll GUI: PreferencesIndexing schedule dialog.

2.1.2. The index configuration directory

A Recoll index is defined by its configuration directory. A configuration directory contains several files which describe what should be indexed and how.

When recoll or recollindex is first executed, it creates a default configuration directory, located in $HOME/.recoll/ on Unix-like systems and MacOS systems and %LOCALAPPDATA%/Recoll on Windows (typically C:/Users/[me]/Appdata/Local/Recoll).

All configuration parameters have defaults, defined in system-wide files. Without further customisation, the default configuration will process your complete home directory, with a reasonable set of defaults. It can be adjusted to process different areas of the file storage, select files in different ways, and many other things.

The index configuration can be edited either by using the recoll GUI Preferences->Index configuration dialog, or by directly editing the configuration files.

A single index can process data from any subset of the computer accessible storage, as defined by the configuration variables. The most important one is topdirs (Start directories in the GUI), which defines the directories to be recursively indexed. Its default value is ~, which translates to your home directory.

In some cases, it may be useful to create additional configuration directories, for example, to separate personal and shared indexes, or to take advantage of the organization of your data to improve search precision. See the section about configuring multiple indexes for more detail.

2.1.3. Document types

Recoll knows about quite a few different document types. The parameters for document types recognition and processing are set in configuration files.

Most file types, like HTML or word processing files, only hold one document. Some file types, like email folders or zip archives, can hold many individually indexed documents, which may themselves be compound ones. Such hierarchies can go quite deep, and Recoll can process, for example, a LibreOffice document stored as an attachment to an email message inside an email folder archived in a zip file...

recollindex processes plain text, HTML, OpenDocument (Open/LibreOffice), email formats, and a few others internally.

Other file types (e.g.: postscript, pdf, ms-word, rtf ...) need external applications for preprocessing. The list is in the installation section. After every indexing operation, Recoll updates a list of commands that would be needed for indexing existing files types. This list can be displayed by selecting the menu option FileShow Missing Helpers in the recoll GUI. It is stored in the missing text file inside the configuration directory.

After installing a missing handler, you may need to tell recollindex to retry the failed files, by adding option -k to the command line, or by using the GUI FileSpecial indexing menu. This is because recollindex, in its default operation mode, will not retry files which caused an error during an earlier pass. In special cases, it may be useful to reset the data for a category of files before indexing. See the recollindex manual page. If your index is not too big, it may be simpler to just reset it.

By default, Recoll will try to index any file type that it has a way to read. This is sometimes not desirable, and there are ways to either exclude some types, or on the contrary define a positive list of types to be indexed. In the latter case, any type not in the list will be ignored. A detailed description of the parameters involved can be found in the document selection section of this manual.

For example, to define an exclusive list of MIME types to be indexed, you would set the indexedmimetypes configuration variable:

indexedmimetypes = text/html application/pdf

It is possible to redefine a parameter for subdirectories. Example:

[/path/to/my/dir]
indexedmimetypes = application/pdf

When using sections like this, don't forget that they remain in effect until the end of the file or another section indicator.

As another example, excluding files by name can be done by adding wildcard name patterns to the skippedNames list, Excluding by type can be done by setting the excludedmimetypes value.

Most parameters can be set either by editing the configuration file (recoll.conf) for the index, or by using the GUI Index configuration menu.

Note about MIME types

When editing the indexedmimetypes or excludedmimetypes lists, you should use the MIME values listed in the mimemap file or in Recoll result lists rather than file -i output: there are a number of differences. The system command output should only be used for files without extensions, or for which the extension is not listed in mimemap.

2.1.4. Indexing failures

Indexing may fail for some documents, for a number of reasons: a helper program may be missing, the document may be corrupt, we may fail to uncompress a file because no file system space is available, etc.

The Recoll indexer does not retry failed files by default, because some indexing failures can be quite costly (for example failing to uncompress a big file because of insufficient disk space). Retrying will only occur if an explicit option (-k) is set on the recollindex command line, or if a script executed when recollindex starts up says so. The script is defined by a configuration variable (checkneedretryindexscript), and makes a rather lame attempt at deciding if a helper command may have been installed, by checking if any of the common bin directories have changed.

2.1.5. Recovery

In the rare case where the index becomes corrupted (which can signal itself by weird search results or crashes), the index files need to be erased before restarting a clean indexing pass. Just delete the xapiandb directory (see next section), or, alternatively, start the next recollindex with the -z option, which will reset the database before indexing. The difference between the two methods is that the second will not change the current index format, which may be undesirable if a newer format is supported by the Xapian version.

2.2. Index storage

The default index location is the xapiandb subdirectory of the Recoll configuration directory, typically $HOME/.recoll/xapiandb/ on Unix-like systems or C:/Users/[me]/Appdata/Local/Recoll/xapiandb on Windows. This can be changed via two different methods (with different purposes):

  • For a given configuration directory, you can specify a non-default storage location for the index by setting the dbdir parameter in the configuration file. Use this method to keep the configuration directory in its default location, and use another location for the index, typically because of disk occupation or performance reasons.

  • You can specify a different configuration directory by setting the RECOLL_CONFDIR environment variable, or using the -c option to the Recoll commands. In turn, the related index would be stored either under the configuration directory, or elsewhere if dbdir is locally set. This method would typically be used in special cases to index different areas of the file system to different indexes. See the section about configuring multiple indexes for more detail.

There are quite a few more parameters which can be set in the configuration file itself for tailoring Recoll data storage. They are described in a section of the configuration chapter.

The size of the index is determined by the size of the set of documents, but the ratio can vary a lot. For a typical mixed set of documents, the index size will often be close to the data set size. In specific cases (a set of compressed mbox files for example), the index can become much bigger than the documents. It may also be much smaller if the documents contain a lot of images or other non-indexed data (an extreme example being a set of mp3 files where only the tags would be indexed).

Of course, images, sound and video do not increase the index size, which means that in most cases, the space used by the index will be negligible compared to the total amount of data on the computer.

The index data directory (xapiandb) only contains data that can be completely rebuilt by an index run (as long as the original documents exist), and it can always be destroyed safely.

2.2.1. Xapian index formats

Xapian versions usually support several formats for index storage. A given major Xapian version will have a current format, used to create new indexes, and will also support the format from the previous major version.

Xapian will not convert automatically an existing index from the older format to the newer one. If you want to upgrade to the new format, or if a very old index needs to be converted because its format is not supported any more, you will have to explicitly delete the old index (typically ~/.recoll/xapiandb), then run a normal indexing command. Using recollindex option -z would not work in this situation.

2.2.2. Security aspects

The Recoll index holds almost complete copies of the indexed documents. If confidential data is indexed, access to the database directory must be restricted.

Recoll will create the configuration directory with a mode of 0700 on Unix-like systems (access by owner only). As the index data directory is by default a sub-directory of the configuration directory, this should result in appropriate protection.

If you use another setup, you should think of the kind of protection you need for your index, set the directory and files access modes appropriately, and also maybe adjust the umask used during index updates.

2.2.3. Special considerations for big indexes

This only needs concern you if your index is going to be bigger than around 10 GBytes. Most people have much smaller indexes. For reference, 10 GBytes would be around 4000 bibles, a lot of text. If you have a huge text dataset (remember: images don't count, the text content of PDFs is typically less than 5% of the file size), read on.

Recoll (thanks to Xapian) can manage huge indexes: in 2025, we heard of a 550 GB, 11+ million documents index. Big indexes just need a bit of thinking ahead and organisation (and appropriate hardware).

The amount of writing performed by Xapian during index creation is not linear with the index size (it is somewhere between linear and quadratic). For big indexes this becomes a performance issue, and may even be an SSD disk wear issue.

The problem can be mitigated by using the following approaches:

  • Partition the data set and create several indexes of smaller size rather than a huge one. These indexes can then be queried in parallel (using the Recoll external indexes facility), or merged using xapian-compact.

  • Have a lot of RAM available and set the idxflushmb Recoll configuration parameter as high as you can without swapping (experimentation will be needed). 200 would be a bare minimum in this context.

  • Use Xapian 1.4.10 or newer, as this version brought a significant improvement in the amount of writes.

Recoll versions 1.38 and newer have an option to use multiple temporary indexes and a final merge internally. This was designed as a CPU performance optimization (increasing parallelism), but it may also provide a simple solution for the index size issue, though it may not give enough control over the temporary indexes physical placement for really huge datasets.

2.3. Index configuration

Variables stored inside the Recoll configuration files control which areas of the file system are indexed, and how files are processed. The values can be set by editing the text files. Most of the more commonly used ones can also be adjusted by using the dialogs in the recoll GUI.

The first time you start recoll, you will be asked whether or not you would like it to build the index. If you want to adjust the configuration before indexing, just click Cancel at this point, which will get you into the configuration interface. If you exit at this point, recoll will have created a default configuration directory with empty configuration files, which you can then edit.

The configuration is documented inside the configuration chapter of this document, or in the recoll.conf(5) manual page. Both documents are automatically generated from the comments inside the configuration file.

The most immediately useful variable is topdirs, which lists the subtrees and files to be indexed. The variable name is a bit misleading for native English speakers, so the corresponding GUI label is Start folders.

The applications needed to index file types other than text, HTML or email (e.g.: pdf, postscript, ms-word...) are described in the external packages section.

There are two incompatible types of Recoll indexes, depending on the treatment of character case and diacritics. A further section describes the two types in more detail. The default type is appropriate in most cases.

2.3.1. The index configuration GUI

Most index configuration parameters can be set from the recoll GUI (set RECOLL_CONFDIR or use the -c option to affect a non-default index.)

The interface is started from the PreferencesIndex Configuration menu entry. It is divided in four tabs, Global parameters, Local parameters, Web history (details) and Search parameters.

The Global parameters tab allows setting global variables, like the lists of top/start directories, skipped paths, or stemming languages.

The Local parameters tab allows setting variables that can be redefined for subdirectories. This second tab has an initially empty list of customisation directories, to which you can add. The variables are then set for the currently selected directory (or at the top level if the empty line is selected).

The Search parameters section defines parameters which are used at query time, but are global to an index and affect all search tools, not only the GUI.

The meaning for most entries in the interface is self-evident and documented by a ToolTip popup on the text label. For more detail, you may need to refer to the configuration section of this guide.

The configuration tool normally respects the comments and most of the formatting inside the configuration file, so that it is quite possible to use it on hand-edited files, which you might nevertheless want to backup first...

2.3.2. Multiple indexes

Multiple Recoll indexes can be created by using several configuration directories which would typically be set to index different areas of the file system.

A plausible usage scenario for the multiple index feature would be for a system administrator to set up a central index for shared data, that you choose to search or not in addition to your personal data. Of course, there are other possibilities. for example, there are many cases where you know the subset of files that should be searched, and where narrowing the search can improve the results. You can achieve approximately the same effect by using a directory filter clause in a search, but multiple indexes may have better performance and may be worth the trouble with huge data sets.

A more advanced use case would be to use multiple indexes to improve indexing performance, by updating several indexes in parallel (using multiple CPU cores and disks, or possibly several machines), and then either merging them, or querying them in parallel.

A specific configuration can be selected by setting the RECOLL_CONFDIR environment variable or giving the -c option to recoll and recollindex.

The recollindex program, used for creating or updating indexes, always works on a single index. The different configurations are entirely independent (no parameters are ever shared between configurations when indexing).

All the search interfaces (recoll, recollq, the Python API, etc.) operate with a main configuration, from which both configuration and index data are used, and can also query data from multiple additional indexes. Only the index data from additional indexes is used, their configuration parameters are ignored. This implies that some parameters should be consistent among index configurations which are to be used together.

When searching, the current main index (defined by RECOLL_CONFDIR or -c) is always active. If this is undesirable, you can set up your base configuration to index an empty directory.

Index configuration parameters can be set either by using a text editor on the files, or, for most parameters, by using the recoll index configuration GUI. In the latter case, the configuration directory for which parameters are modified is the one which was selected by RECOLL_CONFDIR or the -c parameter, and there is no way to switch configurations within the GUI.

See the configuration section for a detailed description of the parameters

Some configuration parameters must be consistent among a set of multiple indexes used together for searches. Most importantly, all indexes to be queried concurrently must have the same option concerning character case and diacritics stripping, but there are other constraints. Most of the relevant parameters affect the term generation.

Using multiple configurations implies a small level of command line or file manager usage. The user must explicitly create additional configuration directories, the GUI will not do it. This is to avoid mistakenly creating additional directories when an argument is mistyped. Also, the GUI or the indexer must be launched with a specific option or environment to work on the right configuration.

To start a new configuration, you need to create an empty directory in a location of your choice, and then instruct recoll or recollindex to use it by setting either a command line option (-c /some/directory), or an environment variable (RECOLL_CONFDIR=/some/directory). Any modification performed by the commands (e.g. configuration customisation or searches by recoll or index creation by recollindex) would then apply to the new directory and not to the default one.

Creating and using an additional index: Unix-like systems example

The following applies to Unix-like systems

Initially creating the configuration and index:

mkdir /path/to/my/new/config

Configuring the new index can be done from the recoll GUI, launched from the command line to pass the -c option (you could create a desktop file to do it for you), and then using the GUI index configuration tool to set up the index.

recoll -c /path/to/my/new/config

Alternatively, you can just start a text editor on the main configuration file:

someEditor /path/to/my/new/config/recoll.conf

Creating and updating the index can be done from the command line:

recollindex -c /path/to/my/new/config

or from the File menu of a GUI launched with the same option (recoll, see above).

The same GUI would also let you set up batch indexing for the new index. Real time indexing can only be set up from the GUI for the default index (the menu entry will be inactive if the GUI was started with a non-default -c option).

The new index can be queried alone with:

recoll -c /path/to/my/new/config

Or, in parallel with the default index, by starting recoll without a -c option, and using the External Indexes tab in the preferences dialog, which can be reached either trough: PreferencesGUI ConfigurationExternal Index Dialog or QueryExternal index dialog. See the GUI external indexes section for more details.

Creating an alternate index: Windows example

When running Recoll under Windows, the simplest approach for using separate indexes is to start the GUI from different desktop icons. The following approach can be used:

  1. Create an empty folder somewhere for holding the new configuration and index.

  2. Select the Recoll icon on the desktop and Copy/Paste it. If no desktop icon was created during installation, you can right-drag the recoll.exe program from C:\Program Files\Recoll to the desktop and select Create shortcuts here to create one.

  3. Right-click the new shortcut and go to the Properties->shortcut tab

  4. Modify the Target value from the original C:\Program Files\Recoll\recoll.exe to something like:

    "C:\Program Files\Recoll\recoll.exe" -c C:\Path\To\My\New\Directory

    Use double quotes around the directory path is it contains spaces.

  5. Then save the new Icon by clicking ok, and double click it to start a Recoll GUI for the new configuration. You should be presented with the initial configuration dialog.

Any other method for running the GUI or recollindex program with a -c option or a RECOLL_CONFDIR value in the environment would work too.

2.3.3. Index case and diacritics sensitivity

You have a choice of building an index with terms stripped of character case and diacritics, or one with raw terms. For a source term of Résumé, the former will store resume, the latter Résumé.

Each type of index allows performing searches insensitive to case and diacritics: with a raw index, the user entry will be expanded to match all case and diacritics variations present in the index. With a stripped index, the search term will be stripped before searching.

A raw index allows using case and diacritics to discriminate between terms, e.g., returning different results when searching for US and us or resume and résumé. Read the section about search case and diacritics sensitivity for more details.

The type of index to be created is controlled by the indexStripChars configuration variable which can only be changed by editing the configuration file. Any change implies an index reset (not automated by Recoll), and all indexes in a search must be set in the same way (again, not checked by Recoll).

Recoll creates a stripped index by default if indexStripChars is not set.

As a cost for added capability, a raw index will be slightly bigger than a stripped one (around 10%). Also, searches will be more complex, so probably slightly slower, and the feature is relatively little used, so that a certain amount of weirdness cannot be excluded.

One of the most adverse consequence of using a raw index is that some phrase and proximity searches may become impossible: because each term needs to be expanded, and all combinations searched for, the multiplicative expansion may become unmanageable.

2.4. Indexing performance and resource usage

2.4.1. Indexing threads configuration (Unix-like systems)

Note: you don't probably don't need to read this. The default automatic configuration is fine is most cases. Only the part about disabling multithreading may be more commonly useful, so I'll prepend it here. In recoll.conf:

thrQSizes = -1 -1 -1

The Recoll indexing process recollindex can use multithreading to speed up indexing on multiprocessor systems. This is currently enabled on MacOS systems and Unix-like systems systems, but not under Windows.

The data processing used to index files is divided in several stages and some of the stages can be executed by multiple threads. The stages are:

  1. File system walking: this is always performed by the main thread.

  2. File conversion and data extraction.

  3. Text processing (splitting, stemming, etc.).

  4. Xapian index update.

You can also read a longer document about the transformation of Recoll indexing to multithreading.

The threads configuration is controlled by two configuration file parameters.

thrQSizes

This variable defines the job input queues configuration. There are three possible queues for stages 2, 3 and 4, and this parameter should give the queue depth for each stage (three integer values). If a value of -1 is used for a given stage, no queue is used, and the thread will go on performing the next stage. In practise, deep queues have not been shown to increase performance. A value of 0 for the first queue tells Recoll to perform autoconfiguration (no need for anything else in this case, thrTCounts is not used) - this is the default configuration.

thrTCounts

This defines the number of threads used for each stage. If a value of -1 is used for one of the queue depths, the corresponding thread count is ignored. It makes no sense to use a value other than 1 for the last stage because updating the Xapian index is necessarily single-threaded (and protected by a mutex).

Note

If the first value in thrQSizes is 0, thrTCounts is ignored.

The following example would use three queues (of depth 2), and 4 threads for converting source documents, 2 for processing their text, and one to update the index. This was tested to be the best configuration on the test system (quadri-processor with multiple disks).

thrQSizes = 2 2 2
thrTCounts = 4 2 1

The following example would use a single queue, and the complete processing for each document would be performed by a single thread (several documents will still be processed in parallel in most cases). The threads will use mutual exclusion when entering the index update stage. In practise the performance would be close to the precedent case in general, but worse in certain cases (e.g. a Zip archive would be performed purely sequentially), so the previous approach is preferred. YMMV... The 2 last values for thrTCounts are ignored.

thrQSizes = 2 -1 -1
thrTCounts = 6 1 1

The following example would disable multithreading. Indexing will be performed by a single thread.

thrQSizes = -1 -1 -1

2.4.2. Using multiple temporary indexes to improve indexing time (1.41.1)

Note

The underlying code is buggy between 1.38 and 1.41.0, fixed in 1.41.1. The bug affects the storing of document texts inside the index, so it only affects snippets generation inside result lists. If the result lists snippets are important to you, do not use the function with an affected release.

In some cases, either when the input documents are simple and require little processing (e.g. HTML files), or possibly with a high number of available cores, the single-threaded Xapian index updates can become the performance bottleneck for indexing.

In this case, it is possible to configure the indexer to use multiple temporary indexes which are merged at the end of the operation. This can provide a huge gain in performance, but, as opposed to multithreading for document preparation, it can also have a (slight) negative impact in some cases, so that it is not enabled by default.

In most cases, this should also be turned off after the initial index creation is done, because it is extremely detrimental to the speed of small incremental updates.

The parameter which controls the number of temporary indexes in recoll.conf is named thrTmpDbCnt. The default value is 0, meaning that no temporary indexes are used.

If your document set is big, and you are using a processor with many cores for indexing, especially if the input documents are simple, it may be worth it to experiment with the value. For example, with a partial Wikipedia dump (many HTML small files), indexing times could be divided almost by three, by using four temporary indexes on a quad-core machine. More detail in this article on the Recoll Web site.

All the tests were performed on SSDs, it is quite probable that this approach would not work well on spinning disks, at least not in its current form.

2.4.3. Quieting down the indexing process

The Recoll indexing process, recollindex is usually configured to have very low priority and not disturb other activity on the machine. Still, on an idle system, even with multithreading disabled, it will use 100% of one core if needed and available. This may be enough to get a laptop fan to spin up in some cases. To prevent this, we want to limit the CPU utilisation for every short time quanta (e.g. not more than 20 mS for every 100 mS).

This would be extremely difficult to do from inside the indexing process, because of the many places where intensive CPU usage takes place, some not under our control (Xapian or external helpers). On Linux systems, you can use the cgroup facility to throttle the process CPU usage. This is further documented on the Recoll Web site.

2.5. Index update scheduling

2.5.1. Periodic indexing

Running the indexer

The recollindex program performs index updates. You can start it either from the command line or from the File menu in the recoll GUI program. When started from the GUI, the indexing will run on the same configuration recoll was started on. When started from the command line, recollindex will use the RECOLL_CONFDIR variable or accept a -c confdir option to specify a non-default configuration directory.

If the recoll program finds no index when it starts, it will automatically start indexing (except if canceled).

The GUI File menu has entries to start or stop the current indexing operation. When indexing is not currently running, you have a choice between Update Index or Rebuild Index. The first choice only processes changed files, the second one erases the index before starting so that all files are processed.

The GUI can also be used to manage the indexing operation. Stopping the indexer can be done from the recoll GUI FileStop Indexing menu entry.

On Unix-like systems, the recollindex indexing process can be interrupted by sending an interrupt (Ctrl-C, SIGINT) or terminate (SIGTERM) signal.

When stopped, some time may elapse before recollindex exits, because it needs to properly write data to disk (flush), and close the index.

After an interruption, the index will be somewhat inconsistent because some operations which are normally performed at the end of the indexing pass will have been skipped (for example, the stemming and spelling databases will be inexistent or out of date). You just need to restart indexing at a later time to restore consistency. The indexing will restart at the interruption point (the full file tree will be traversed, but files that were indexed up to the interruption and for which the index is still up to date will not be reindexed).

recollindex command line

recollindex has many options which are listed in its manual page. Only a few will be described here.

Option -z will reset the index when starting. This is almost the same as destroying the index files (the nuance is that the Xapian format version will not be changed).

Option -Z will force the update of all documents without resetting the index first. This will not have the "clean start" aspect of -z, but the advantage is that the index will remain available for querying while it is rebuilt, which can be a significant advantage if it is very big (some installations need days for a full index rebuild).

Option -k will force retrying files which previously failed to be indexed, for example because of a missing helper program.

Of special interest also, maybe, are the -i and -f options. -i allows indexing an explicit list of files (given as command line parameters or read on stdin). -f tells recollindex to ignore file selection parameters from the configuration. Together, these options allow building a custom file selection process for some area of the file system, by adding the top directory to the skippedPaths list and using an appropriate file selection method to build the file list to be fed to recollindex -if. Trivial example:

find . -name indexable.txt -print | recollindex -if

recollindex -i will not descend into subdirectories specified as parameters, but just add them as index entries. It is up to the external file selection method to build the complete file list.

Unix-like systems: using cron to automate indexing

The most common way to set up indexing is to have a cron task execute it every night. For example the following crontab entry would do it every day at 3:30AM (supposing recollindex is in your PATH):

30 3 * * * recollindex > /some/tmp/dir/recolltrace 2>&1

Or, using anacron:

1  15  su mylogin -c "recollindex recollindex > /tmp/rcltraceme 2>&1"

The Recoll GUI has dialogs to manage crontab entries for recollindex. You can reach them from the PreferencesIndexing Schedule menu. They only work with the good old cron, and do not give access to all features of cron scheduling. Entries created via the tool are marked with a RCLCRON_RCLINDEX= marker so that the tool knows which entries belong to it. As a side effect, this sets an environment variable for the process, but it's not actually used, this is just a marker.

The usual command to edit your crontab is crontab -e (which will usually start the vi editor to edit the file). You may have more sophisticated tools available on your system.

Please be aware that there may be differences between your usual interactive command line environment and the one seen by crontab commands. Especially the PATH variable may be of concern. Please check the crontab manual pages about possible issues.

2.5.2. Real time indexing

Real time monitoring/indexing is performed by starting the recollindex -m command. With this option, recollindex will permanently monitor file changes and update the index.

On Windows systems, the monitoring process is started from the recoll GUI File menu. On Unix-like systems, there are other possibilities, see the following sections.

When this is in use, the recoll GUI File menu makes two operations available: Stop and Trigger incremental pass.

Trigger incremental pass has the same effect as restarting the indexer, and will cause a complete walk of the indexed area, processing the changed files, then switch to monitoring. This is only marginally useful, maybe in cases where the indexer is configured to delay updates, or to force an immediate rebuild of the stemming and phonetic data, which are only processed at intervals by the real time indexer.

While it is convenient that data is indexed in real time, repeated indexing can generate a significant load on the system when files such as email folders change. Also, monitoring large file trees by itself significantly taxes system resources. You probably do not want to enable it if your system is short on resources. Periodic indexing is adequate in most cases.

As of Recoll 1.24, you can set the monitordirs configuration variable to specify that only a subset of your indexed files will be monitored for instant indexing. In this situation, an incremental pass on the full tree can be triggered by either restarting the indexer, or just running recollindex, which will notify the running process. The recoll GUI also has a menu entry for this.

Unix-like systems: automatic daemon start with systemd

The installation contains two example files (in share/recoll/examples) for starting the indexing daemon with systemd.

recollindex.service would be used for starting recollindex as a user service. The indexer will start when the user logs in and run while there is a session open for them.

recollindex@.service is a template service which would be used for starting the indexer at boot time, running as a specific user. It can be useful when running the text search as a shared service (e.g. when users access it through the Web UI).

If configured to do so, the unit files should have been installed in your system's default systemd paths (usually /usr/lib/systemd/system/ and /usr/lib/systemd/user/). If not, you may need to copy the files there before starting the service.

With the unit files installed in the proper location, the user unit can be started with the following commands:

systemctl --user daemon-reload
systemctl --user enable --now recollindex.service

The system unit file can be enabled for a particular user by running, as root:

systemctl daemon-reload
systemctl enable --now recollindex@username.service

(A valid user name should be substituted for username, of course.)

Unix-like systems: automatic daemon start from the desktop session

Under KDE, Gnome and some other desktop environments, the daemon can automatically started when you log in, by creating a desktop file inside the ~/.config/autostart directory. This can be done for you by the Recoll GUI. Use the Preferences->Indexing Schedule menu.

With older X11 setups, starting the daemon is normally performed as part of the user session script.

The rclmon.sh script can be used to easily start and stop the daemon. It can be found in the examples directory (typically /usr/local/[share/]recoll/examples).

For example, a good old xdm-based session could have a .xsession script with the following lines at the end:

recollconf=$HOME/.recoll-home
recolldata=/usr/local/share/recoll
RECOLL_CONFDIR=$recollconf $recolldata/examples/rclmon.sh start

fvwm

The indexing daemon gets started, then the window manager, for which the session waits.

By default the indexing daemon will monitor the state of the X11 session, and exit when it finishes, it is not necessary to kill it explicitly. (The X11 server monitoring can be disabled with option -x to recollindex).

If you use the daemon completely out of an X11 session, you need to add option -x to disable X11 session monitoring (else the daemon will not start).

Miscellaneous details

Logging.  By default, the messages from the indexing daemon will be sent to the same file as those from the interactive commands (logfilename). You may want to change this by setting the daemlogfilename and daemloglevel configuration parameters. Also the log file will only be truncated when the daemon starts. If the daemon runs permanently, the log file may grow quite big, depending on the log level.

Unix-like systems: increasing resources for inotify.  On Linux systems, monitoring a big tree may need increasing the resources available to inotify, which are normally defined in /etc/sysctl.conf.

### inotify
#
# cat  /proc/sys/fs/inotify/max_queued_events   - 16384
# cat  /proc/sys/fs/inotify/max_user_instances  - 128
# cat  /proc/sys/fs/inotify/max_user_watches    - 16384
#
# -- Change to:
#
fs.inotify.max_queued_events=32768
fs.inotify.max_user_instances=256
fs.inotify.max_user_watches=32768

Especially, you will need to trim your tree or adjust the max_user_watches value if indexing exits with a message about errno ENOSPC (28) from inotify_add_watch.

Slowing down the reindexing rate for fast changing files.  When using the real time monitor, it may happen that some files need to be indexed, but change so often that they impose an excessive load for the system. Recoll provides a configuration option to specify the minimum time before which a file, specified by a wildcard pattern, cannot be reindexed. See the mondelaypatterns parameter in the configuration section.

2.6. Fields and metadata

Apart from the main text content, documents usually aggregate other data elements, such as an author names, dates, abstracts, etc. These are usually called metadata elements because they qualify or describe the data rather than being part of it. Recoll has a slightly more general notion of field to mean any named piece of data associated with a document.

Fields are extracted by the document handlers when processing a document and further used by Recoll for searching or displaying results.

Some fields, like e.g. a file modification time, have a strict and predefined usage. For most fields though, the processing is entirely configurable and defined in the fields configuration file

Fields have two main processing options (at least one of which will be set if they are processed at all):

  • Their content can be indexed. This makes them searchable.

  • Their content can be stored in the index as document attribute data. This makes them displayable as part of a result list entry.

These options are preset in the default fields file for common elements like a title or an author name.

The terms from indexed fields are stored in the inverted index with a specific prefix, which makes them searchable by specifying the field name (e.g. author:Balzac). The terms can optionally also be used for the main index section to provide hits for non-prefixed searches. This is decided by an attribute in the fields file.

In most cases, field data is provided by the document itself, for example, by HTML <meta> elements. They can also be obtained from other sources, this is described in the following section.

2.6.1. Incorporating external metadata

Unix-like systems and MacOS systems: using extended attributes

User extended attributes are named pieces of information that most modern file systems can attach to any file.

Recoll processes all extended attributes as document fields. Note that most fields are not indexed by default, you need to activate them by defining a prefix in the fields configuration file.

A freedesktop standard defines a few special attributes, which are handled as such by Recoll:

mime_type

If set, this overrides any other determination of the file MIME type.

charset

If set, this defines the file character set (mostly useful for plain text files).

By default, other attributes are handled as Recoll fields of the same name, after removing the "user" prefix on Linux.

The name translation can be configured more precisely, inside the fields configuration file.

Setting the document modification/creation date

Some documents have an internal date attribute (e.g. emails), but most get their date from the file modification time. It is possible to set a document date different from the file's by setting a specific extended attribute. For obscure and uninteresting reasons, the name of the attribute is harcoded as modificationdate. Its contents should be the ASCII representation of a decimal integer representing the Unix time (seconds since the epoch). An example Linux command line for setting this particular field follow. The substituted date prints the example date parameter in Unix time format (seconds since the epoch).

setfattr -n user.modificationdate -v `date -d '2022-09-30 08:30:00' +%s` /some/file

The date substitution will then be automatic, you do not need to customise the fields file.

Using a command for importing external metadata

During indexing, it is possible to import metadata for each file by executing commands. This allows, for example, extracting tag data from an external application and storing it in a field for indexing.

See the section about the metadatacmds field in the main configuration chapter for a description of the configuration syntax.

For example, if you would want Recoll to use tags managed by tmsu in a field named tags, you would add the following to the configuration file:

[/some/area/of/the/fs]
metadatacmds = ; tags = tmsu tags %f

Note the initial semi-colon after the equal sign.

You may want to restrict this processing to a subset of the directory tree, because it may slow down indexing a bit ([some/area/of/the/fs]).

In the example above, the output of tmsu is used to set a field named tags. The field name is arbitrary and could be tmsu or myfield just the same, but tags is an alias for the standard Recoll keywords field, and the tmsu output will just augment its contents. This will avoid the need to extend the field configuration.

Note

Depending on the tmsu version, you may need/want to add options like --database=/some/db.

After setting or updating the parameter, you will need to tell Recoll to reindex the affected files. Just reset the index or see recollindex options -e or -r.

You will then be able to search the field from the query language: tags:some/alternate/values or tags:all,these,values.

Tags changes will not be detected by the indexer if the file itself did not change. One possible workaround would be to update the file ctime when you modify the tags, which would be consistent with how extended attributes function. A pair of chmod commands could accomplish this, or a touch -a. Alternatively, just couple the tag update with a recollindex -e -i /path/to/the/file.

2.7. Miscellaneous indexing notes

2.7.1. Indexing punctuation characters (1.39)

By default, the Recoll indexer only uses most non-alphanumeric characters as separators, treating them as white space, so that inputs like all words, and all,words produce the same terms.

It may sometimes be useful to index some of these characters so that they can be used as discriminants for searches. This can be done by setting the indexedpunctuation configuration parameter. The value is an UTF-8 string, for example, setting:

indexedpunctuation = %€

would allow searching separately 100% or 100€.

The affected characters are indexed as terms with their own term positions, and they are their own separators, so that 100% and 100 % would be equivalent inputs.

2.7.2. The PDF input handler

The PDF format is very important for scientific and technical documentation, and document archival. It has extensive facilities for storing metadata along with the document, and these facilities are actually used in the real world.

In consequence, the rclpdf.py PDF input handler has more complex capabilities than most others, and it is also more configurable, because some extra features need executing external commands, so that they are not enabled by default. Specifically, rclpdf.py has the following optional features:

  • It can extract PDF outlines and bookmarks.

  • It can be configured to extract specific metadata tags from an XMP packet.

  • It can extract PDF attachments.

  • It can automatically perform OCR if the document text is empty. This is done by executing an external program and is now described in a separate section, because the OCR framework can also be used with non-PDF image files.

Extracting PDF outlines and bookmarks

These data elements will be extracted if pdfoutline=1 is set in the configuration file and the pdftohtml command (from poppler-tools) is available. Executing the command takes extra time, which is why the feature is not enabled by default.

XMP fields extraction

The rclpdf.py script in Recoll version 1.23.2 and later can extract XMP metadata fields by executing the pdfinfo command (usually found with poppler-utils). This is controlled by the pdfextrameta configuration variable, which specifies which tags to extract and, possibly, how to rename them.

The pdfextrametafix variable can be used to designate a file with Python code to edit the metadata fields (available for Recoll 1.23.3 and later. 1.23.2 has equivalent code inside the handler script). Example:

import sys
import re

class MetaFixer(object):
    def __init__(self):
        pass

    def metafix(self, nm, txt):
        if nm == 'bibtex:pages':
            txt = re.sub(r'--', '-', txt)
        elif nm == 'someothername':
            # do something else
           pass
        elif nm == 'stillanother':
           # etc.
          pass
        return txt
    def wrapup(self, metaheaders):
        pass

If the 'metafix()' method is defined, it is called for each metadata field. A new MetaFixer object is created for each PDF document (so the object can keep state for, for example, eliminating duplicate values). If the 'wrapup()' method is defined, it is called at the end of XMP fields processing with the whole metadata as parameter, as an array of '(nm, val)' pairs, allowing an alternate approach for editing or adding/deleting fields.

See this page for a more detailed discussion about indexing PDF XMP properties.

PDF attachment indexing

Indexing PDF attachments used to be done with the pdftk toolkit and was disabled by default. As of Recoll 1.43.1, it uses the Poppler pdfdetach command, and it is enabled in the default configuration. Set the pdfattach configure variable to 0 to disable the feature.

The PDF attachments are indexed as sub-documents of the PDF file.

2.7.3. Running OCR on image documents

The Recoll PDF handler (rclpdf.py), and the alternate image handler (rclimg.py) have the ability to call an external OCR program (only as of Recoll 1.43.3 for the latter).

The operation details are slightly different for PDF and other image documents.

To enable the Recoll OCR feature, you need to install one of the supported OCR applications (tesseract or ABBYY), enable OCR in the PDF or image handler by setting the appropriate configuration parameter, and tell Recoll how to run the OCR by setting the specific OCR configuration variables. All parameters can be localized in subdirectories through the usual main configuration mechanism (path sections).

Running OCR is relatively slow and expensive. Recoll caches OCR output, stored as separate files. The caching is ultimately based on a hash value of the original file contents, so that it is immune to file renames. A first path-based layer ensures fast operation for unchanged (unmoved files), and the data hash (which is still orders of magnitude faster than OCR) is only re-computed if the file was moved. OCR is only performed if the file was not previously processed or if it changed.

The support for a specific OCR program is implemented in a simple Python module. It should be straightforward to add support for any OCR engine with a capability to run from the command line.

Modules initially exist for tesseract (Linux and Windows), and ABBYY FineReader (Linux, tested with version 11). ABBYY FineReader is a commercial closed source program, but it sometimes perform better than tesseract.

OCR for PDF documents

Note

If modifying the files (or a copy) is acceptable, then using OCRmyPDF to add a text layer to the PDF itself is a better solution than using the Recoll OCR feature: e.g. allowing Recoll to position the PDF viewer on the search target when opening the document, and permitting secondary search in the native tool.

The Recoll OCR is enabled by the pdfocr configuration variable, and will only be executed if the processed file has no text content.

Example configuration fragment in recoll.conf:

pdfocr = 1
ocrprogs = tesseract
tesseractlang = eng

The pdfocr variable can be set globally or for specific subtrees.

Under Windows the recoll.conf configuration file is found by default in C:/Users/[you]/AppData/Local/Recoll/recoll.conf and you will probably need to indicate the actual path of the tesseract command by setting the tesseractcmd variable, for example:

tesseractcmd = C:/Program Files/Tesseract-OCR/tesseract.exe

OCR for image documents

As of Recoll 1.43.3, the alternate Python rclimg.py handler can execute OCR on image files. The default image handler is the Perl-based rclimg script and has not been OCR-enabled. So, for performing image OCR, you need to tell Recoll to use the alternate handler and also to enable OCR by setting the imgocr variable. This is done by editing two text files in the index configuration directory (by default ~/.recoll under Unix-like systems or MacOS systems, or C:/users/[you]/AppData/Local/Recoll under Windows.

Example configuration:

In mimeconf (e.g. ~/.recoll/mimeconf):

[index]
image/gif = execm rclimg.py
image/jp2 = execm rclimg.py
image/jpeg = execm rclimg.py
image/png = execm rclimg.py
image/tiff = execm rclimg.py
image/x-nikon-nef = execm rclimg.py
image/x-xcf = execm rclimg.py

Of course you can also only use a subset of the image types.

In recoll.conf, by example for Windows, the tesseractcmd setting is usually not needed otherwise:

ocrprogs = tesseract
tesseractcmd = C:/Program Files(x86)/Tesseract-OCR/tesseract.exe
tesseractlang = eng
[/path/to/my/images/directory]          
imgocr = 1

If you are running an older Recoll release, you can grab an up to date copy of rclimg.py from the git repository. You will have to copy it to the Recoll filters/ directory and make it executable. The script needs to run from the installation directory because of how it runs the OCR script.

2.7.4. Running a speech to text program on audio files

If the OpenAI Whisper program is available and the appropriate parameters set in the configuration files, the Recoll audio file handler will run speech to text recognition on audio files and the resulting text will be indexed. See the the FAQ entry for more details.

The results of the speech recognition will be cached in the same manner as the results of image OCR.

2.7.5. Removable volumes

Recoll used to have no support for indexing removable volumes (portable disks, USB keys, etc.). Recent versions have improved the situation and support indexing removable volumes in two different ways:

  • By indexing the volume in the main, fixed, index, and ensuring that the volume data is not purged if the indexing runs while the volume is mounted. (since Recoll 1.25.2).

  • By storing a volume index on the volume itself (since Recoll 1.24).

Indexing removable volumes in the main index

As of version 1.25.2, Recoll provides a simple way to ensure that the index data for an absent volume will not be purged. Two conditions must be met:

  • The volume mount point must be a member of the topdirs list.

  • The mount directory must be empty (when the volume is not mounted).

If recollindex finds that one of the topdirs is empty when starting up, any existing data for the tree will be preserved by the indexing pass (no purge for this area).

Self contained volumes

As of Recoll 1.24, it has become possible to build self-contained datasets including a Recoll configuration directory and index together with the indexed documents, and to move such a dataset around (for example copying it to an USB drive), without having to adjust the configuration for querying the index.

Note

This is a query-time feature only. The index must only be updated in its original location. If an update is necessary in a different location, the index must be reset.

The principle of operation is that the configuration stores the location of the original configuration directory, which must reside on the movable volume. If the volume is later mounted elsewhere, Recoll adjusts the paths stored inside the index by the difference between the original and current locations of the configuration directory.

To make a long story short, here follows a script to create a Recoll configuration and index under a given directory (given as single parameter). The resulting data set (files + recoll directory) can later to be moved to a CDROM or thumb drive. Longer explanations come after the script.

#!/bin/sh

fatal()
{
    echo $*;exit 1
}
usage()
{
    fatal "Usage: init-recoll-volume.sh <top-directory>"
}

test $# = 1 || usage
topdir=$1
test -d "$topdir" || fatal $topdir should be a directory

confdir="$topdir/recoll-config"
test ! -d "$confdir" || fatal $confdir should not exist

mkdir "$confdir"
cd "$topdir"
topdir=`pwd`
cd "$confdir"
confdir=`pwd`

(echo topdirs = '"'$topdir'"'; \
    echo orgidxconfdir = $topdir/recoll-config) > "$confdir/recoll.conf"

recollindex -c "$confdir"

The examples below will assume that you have a dataset under /home/me/mydata/, with the index configuration and data stored inside /home/me/mydata/recoll-confdir.

In order to be able to run queries after the dataset has been moved, you must ensure the following:

  • The main configuration file must define the orgidxconfdir variable to be the original location of the configuration directory (orgidxconfdir=/home/me/mydata/recoll-confdir must be set inside /home/me/mydata/recoll-confdir/recoll.conf in the example above).

  • The configuration directory must exist with the documents, somewhere under the directory which will be moved. E.g. if you are moving /home/me/mydata around, the configuration directory must exist somewhere below this point, for example /home/me/mydata/recoll-confdir, or /home/me/mydata/sub/recoll-confdir.

  • You should keep the default locations for the index elements which are relative to the configuration directory by default (principally dbdir). Only the paths referring to the documents themselves (e.g. topdirs values) should be absolute (in general, they are only used when indexing anyway).

Only the first point needs an explicit user action, the Recoll defaults are compatible with the third one, and the second is natural.

If, after the move, the configuration directory needs to be copied out of the dataset (for example because the thumb drive is too slow), you can set the curidxconfdir, variable inside the copied configuration to define the location of the moved one. For example if /home/me/mydata is now mounted onto /media/me/somelabel, but the configuration directory and index has been copied to /tmp/tempconfig, you would set curidxconfdir to /media/me/somelabel/recoll-confdir inside /tmp/tempconfig/recoll.conf. orgidxconfdir would still be /home/me/mydata/recoll-confdir in the original and the copy.

If you are regularly copying the configuration out of the dataset, it will be useful to write a script to automate the procedure. This can't really be done inside Recoll because there are probably many possible variants. One example would be to copy the configuration to make it writable, but keep the index data on the medium because it is too big - in this case, the script would also need to set dbdir in the copied configuration.

The same set of modifications (Recoll 1.24) has also made it possible to run queries from a readonly configuration directory (with slightly reduced function of course, such as not recording the query history).

2.7.6. Unix-like systems: indexing visited Web pages

With the help of a Firefox extension, Recoll can index the Internet pages that you visit. The extension has a long history: it was initially designed for the Beagle indexer, then adapted to Recoll and the Firefox XUL API. The current version of the extension is located in the Mozilla add-ons repository uses the WebExtensions API, and works with current Firefox versions.

The extension works by copying visited Web pages to an indexing queue directory, which Recoll then processes, storing the data into a local cache, then indexing it, then removing the file from the queue.

The local cache is not an archive

As mentioned above, a copy of the indexed Web pages is retained by Recoll in a local cache (from which data is fetched for previews, or when resetting the index). The cache is not changed by an index reset, just read for indexing. The cache has a maximum size, which can be adjusted from the Index configuration / Web history panel (webcachemaxmbs parameter in recoll.conf). Once the maximum size is reached, old pages are erased to make room for new ones. The pages which you want to keep indefinitely need to be explicitly archived elsewhere. Using a very high value for the cache size can avoid data erasure, but see the above 'Howto' page for more details and gotchas.

The visited Web pages indexing feature can be enabled on the Recoll side from the GUI Index configuration panel, or by editing the configuration file (set processwebqueue to 1).

The Recoll GUI has a tool to list and edit the contents of the Web cache. (ToolsWebcache editor)

The recollindex command has two options to help manage the Web cache:

  • --webcache-compact will recover the space from erased entries. It may need to use twice the disk space currently needed for the Web cache.

  • --webcache-burst destdir will extract all current entries into pairs of metadata and data files created inside destdir

You can find more details on Web indexing, its usage and configuration in a Recoll 'Howto' entry.

Chapter 3. Searching

3.1. Introduction

Getting answers to specific queries is of course the whole point of Recoll. The multiple provided interfaces always understand simple queries made of one or several words, and return appropriate results in most cases.

In order to make the most of Recoll though, it may be worthwhile to understand how it processes your input. Five different modes exist:

  • In All Terms mode, Recoll looks for documents containing all your input terms.

  • The Query Language mode behaves like All Terms in the absence of special input, but it can also do much more. This is the best mode for getting the most of Recoll. It is usable from all possible interfaces (GUI, command line, Web UI, ...), and is described here.

  • In Any Term mode, Recoll looks for documents containing any your input terms, preferring those which contain more.

  • In File Name mode, Recoll will only match file names, not content. Using a small subset of the index allows things like left-hand wildcards without performance issues, and may sometimes be useful.

  • The GUI Advanced Search mode is actually not more powerful than the query language, but it helps you build complex queries without having to remember the language, and avoids any interpretation ambiguity, as it bypasses the user input parser.

These five input modes are supported by the different user interfaces which are described in the following sections.

3.2. Searching with the Qt graphical user interface (GUI)

The recoll program provides the main user interface for searching. It is based on the Qt library.

recoll has two search interfaces:

  • Simple search (the default, on the main screen) has a single entry field where you can enter multiple words or a query language query.

  • Advanced search (a panel accessed through the Tools menu or the toolbox bar icon) has multiple entry fields, which you may use to build a logical condition, with additional filtering on file type, location in the file system, modification date, and size.

The Advanced Search tool is easier to use, but not actually more powerful, than the Simple Search in query language mode. Its name is historical, but Assisted Search would probably have been a better designation.

In most text areas, you can enter the terms as you think them, even if they contain embedded punctuation or other non-textual characters (e.g. Recoll can handle things like email addresses).

The main case where you should enter text differently from how it is printed is for east-asian languages (Chinese, Japanese, Korean). Words composed of single or multiple characters should be entered separated by white space in this case (they would typically be printed without white space).

Some searches can be quite complex, and you may want to re-use them later, perhaps with some tweaking. Recoll can save and restore searches. See Saving and restoring queries.

3.2.1. Simple search

  1. Start the recoll program.

  2. Possibly choose a search mode: Any term, All terms, File name or Query language.

  3. Enter search term(s) in the text field at the top of the window.

  4. Click the Search button or hit the Enter key to start the search.

The initial default search mode is Query language. Without special directives, this will look for documents containing all of the search terms (the ones with more terms will get better scores), just like the All Terms mode.

Any term will search for documents where at least one of the terms appear.

File name will exclusively look for file names, not contents

All search modes allow terms to be expanded with wildcards characters (*, ?, []). See the section about wildcards for more details.

In all modes except File name, you can search for exact phrases (adjacent words in a given order) by enclosing the input inside double quotes. Ex: "virtual reality".

The Query Language features are described in a separate section.

When using a stripped index (the default), character case has no influence on search, except that you can disable stem expansion for any term by capitalizing it. E.g.: a search for floor will also normally look for flooring, floored, etc., but a search for Floor will only look for floor, in any character case. Stemming can also be disabled globally in the preferences. When using a raw index, the rules are a bit more complicated.

Recoll remembers the last few searches that you performed. You can directly access the search history by clicking the clock button on the right of the search entry, while the latter is empty. Otherwise, the history is used for entry completion (see next). Only the search texts are remembered, not the mode (all/any/file name).

While text is entered in the search area, recoll will display possible completions, filtered from the history and the index search terms. This can be disabled with a GUI Preferences option.

Double-clicking on a word in the result list or a preview window will insert it into the simple search entry field.

You can cut and paste any text into an All terms or Any term search field, punctuation, newlines and all - except for wildcard characters (single ? characters are ok). Recoll will process it and produce a meaningful search. This is what most differentiates this mode from the Query Language mode, where you have to care about the syntax.

The File name search mode will specifically look for file names. The point of having a separate file name search is that wildcard expansion can be performed more efficiently on a small subset of the index (allowing wildcards on the left of terms without excessive cost). Things to know:

  • White space in the entry should match white space in the file name, and is not treated specially.

  • The search is insensitive to character case and accents, independently of the type of index.

  • An entry without any wildcard character and not capitalized will be prepended and appended with '*' (e.g.: etc -> *etc*, but Etc -> etc).

  • If you have a big index (many files), excessively generic fragments may result in inefficient searches.

3.2.2. The filters panel (1.32)

By default, the GUI displays the filters panel on the left of the results area. You can adjust the width of the panel, and hide it by squeezing it completely. The width will be memorized for the next session.

The panel is only active in Query Language search mode, and it allows filtering by date or filesystem location, by adding date: and dir: clauses to the effective query text.

The dates filter can be activated by clicking the checkbox. It has two assisted date entry widgets, for the minimum and maximum dates of the search period.

The directory filter displays a subset of the filesystem directories, reduced to the indexed area, as defined by the topdirs list and the name exclusion parameters. Some directories may not be shown at all, depending on their (lack of) indexable content and other indexing parameters.

By default, the depth of the displayed tree is limited at 2 levels under the start directories. You can change this in the GUI Preferences, User interface panel. Please note that increasing the depth can strongly delay the GUI startup, you should experiment by single increments if you want to change the value.

You can independantly select and deselect directories by clicking them. Note that selecting a directory will activate the whole subtree for searching, there is no need to select the subdirectories, and no way to exclude some of them (use Query language dir: clauses if this is needed).

3.2.3. The result list

After starting a search, a list of results will instantly be displayed in the main window.

By default, the document list is presented in order of relevance (how well the application estimates that the document matches the query). You can sort the results by ascending or descending date by using the vertical arrows in the toolbar.

Each result is displayed as a structured text paragraph. The standard format is typically adequate, but the content and presentation are entirely customisable.

Most results will contain Preview and Open clickable links.

Clicking the Preview link will open an internal preview window for the document. Further Preview clicks for the same search will open tabs in the existing preview window. You can use Shift+Click to force the creation of another preview window, which may be useful to view the documents side by side. (You can also browse successive results in a single preview window by typing Shift+ArrowUp/Down in the window).

Clicking the Open link will start an external viewer for the document. By default, Recoll lets the desktop choose the appropriate application for most document types. See further for customising the applications.

The Preview and Open links may not be present for all entries. They are only available, respectively, for documents with MIME types that Recoll can extract text from, and for documents that have a configured viewer. However, you can modify the configuration to adjust this behavior. In more detail:

  • The Preview link will appear for documents with a MIME type present in the [index] section of the mimeconf file, and, only if the textunknownasplain configuration variable is set, for all types identified as a subtype of text (text/*).

  • The Open link will appear for documents with a MIME type present in the [view] section of the mimeview configuration file. If textunknownasplain is set and no specific viewer is found for a subtype of text, the viewer for text/plain will be used.

You can click on the Query details link at the top of the results page to see the actual Xapian query, after stem expansion and other processing.

Double-clicking on any word inside the result list or a preview window will insert it into the simple search text.

The result list is divided into pages. You can change the page size in the preferences. Use the arrow buttons in the toolbar or the links at the bottom of the page to browse the results.

No results: the spelling suggestions

When a search yields no result, and if the aspell dictionary is configured, Recoll will try to check for misspellings among the query terms, and will propose lists of replacements. Clicking on one of the suggestions will replace the word and restart the search. You can hold any of the modifier keys (Ctrl, Shift, etc.) while clicking if you would rather stay on the suggestion screen because several terms need replacement.

The result list right-click menu

Apart from the preview and edit links, you can display a pop-up menu by right-clicking over a paragraph in the result list. This menu has the following entries:

  • Preview

  • Open

  • Open With

  • Run Script

  • Copy File Name

  • Copy Url

  • Save to File

  • Find similar

  • Preview Parent document

  • Open Parent document

  • Open Snippets Window

The Preview and Open entries do the same thing as the corresponding links.

Open With (Unix-like systems) lets you open the document with one of the applications claiming to be able to handle its MIME type (the information comes from the .desktop files in /usr/share/applications).

Run Script allows starting an arbitrary command on the result file. It will only appear for results which are top-level files. See further for a more detailed description.

The Copy File Name and Copy Url copy the relevant data to the clipboard, for later pasting.

Save to File allows saving the contents of a result document to a chosen file. This entry will only appear if the document does not correspond to an existing file, but is a subdocument inside such a file (e.g.: an email attachment). It is especially useful to extract attachments with no associated editor.

The Open/Preview Parent document entries allow working with the higher level document (e.g. the email message an attachment comes from). Recoll is sometimes not totally accurate as to what it can or can't do in this area. For example the Parent entry will also appear for an email which is part of an mbox folder file, but you can't actually visualize the mbox (there will be an error dialog if you try).

If the document is a top-level file, Open Parent will start the default file manager on the enclosing filesystem directory.

The Find similar entry will select a number of relevant term from the current document and enter them into the simple search field. You can then start a simple search, with a good chance of finding documents related to the current result. I can't remember a single instance where this function was actually useful to me...

The Open Snippets Window entry will only appear for documents which support page breaks (typically PDF, Postscript, DVI). The snippets window lists extracts from the document, taken around search terms occurrences, along with the corresponding page number, as links which can be used to start the native viewer on the appropriate page. If the viewer supports it, its search function will also be primed with one of the search terms.

3.2.4. The result table

As an alternative to the result list, the results can also be displayed in spreadsheet-like fashion. You can switch to this presentation by clicking the table-like icon in the toolbar (this is a toggle, click again to restore the list).

Clicking on the column headers will allow sorting by the values in the column. You can click again to invert the order, and use the header right-click menu to reset sorting to the default relevance order (you can also use the sort-by-date arrows to do this).

Both the list and the table display the same underlying results. The sort order set from the table is still active if you switch back to the list mode. You can click twice on a date sort arrow to reset it from there.

The header right-click menu allows adding or deleting columns. The columns can be resized, and their order can be changed (by dragging). All the changes are recorded when you quit recoll

Hovering over a table row will update the detail area at the bottom of the window with the corresponding values. You can click the row to freeze the display. The bottom area is equivalent to a result list paragraph, with links for starting a preview or a native application, and an equivalent right-click menu. Typing Esc (the Escape key) will unfreeze the display.

Using Shift-click on a row will display the document extracted text (somewhat like a preview) instead of the document details. The functions of Click and Shift-Click can be reversed in the GUI preferences.

3.2.5. The preview window

The preview window opens when you first click a Preview link inside the result list.

Subsequent preview requests for a given search open new tabs in the existing window (except if you hold the Shift key while clicking which will open a new window for side by side viewing).

Starting another search and requesting a preview will create a new preview window. The old one stays open until you close it.

You can close a preview tab by typing Ctrl-W (Ctrl + W) in the window. Closing the last tab, or using the window manager button in the top of the frame will also close the window.

You can display successive or previous documents from the result list inside a preview tab by typing Shift+Down or Shift+Up (Down and Up are the arrow keys).

A right-click menu in the text area allows switching between displaying the main text or the contents of fields associated to the document (e.g.: author, abtract, etc.). This is especially useful in cases where the term match did not occur in the main text but in one of the fields. In the case of images, you can switch between three displays: the image itself, the image metadata as extracted by exiftool (used as main body text) and the fields.

You can print the current preview window contents by typing Ctrl-P (Ctrl + P) in the window text.

Searching inside the preview

The preview window has an internal search capability, mostly controlled by the panel at the bottom of the window, which works in two modes: as a classical editor incremental search, where we look for the text entered in the entry zone, or as a way to walk the matches between the document and the Recoll query that found it.

Incremental text search

The preview tabs have an internal incremental search function. You initiate the search either by typing a / (slash) or CTL-F inside the text area or by clicking into the Search for: text field and entering the search string. You can then use the Next and Previous buttons to find the next/previous occurrence. You can also type F3 inside the text area to get to the next occurrence.

If you have a search string entered and you use Ctrl-Up/Ctrl-Down to browse the results, the search is initiated for each successive document. If the string is found, the cursor will be positioned at the first occurrence of the search string.

Walking the match lists

If the entry area is empty when you click the Next or Previous buttons, the editor will be scrolled to show the next match to any search term (the next highlighted zone). If you select a search group from the dropdown list and click Next or Previous, the match list for this group will be walked. This is not the same as a text search, because the occurrences will include non-exact matches (as caused by stemming or wildcards). The search will revert to the text mode as soon as you edit the entry area.

3.2.6. Assisted Complex Search (A.K.A. "Advanced Search")

The advanced search dialog helps you build more complex queries without having to memorize the search language constructs.

The dialog can be opened through the Tools menu or through the main toolbar. There is also an option to have it open when the program starts. The results of the search are processed and displayed in the same way as the results from the "simple search".

Recoll keeps a history of searches. See Advanced search history.

The dialog has two tabs:

  1. The first tab lets you specify terms to search for, and permits specifying multiple clauses which are combined to build the search.

  2. The second tab allows filtering the results according to file size, date of modification, MIME type, or location.

Click on the Start Search button in the advanced search dialog, or type Enter in any text field to start the search. The button in the main window always performs a simple search.

Click on the Show query details link at the top of the result page to see the query expansion.

Advanced search: the "find" tab

This part of the dialog lets you construct a query by combining multiple clauses of different types. Each entry field is configurable for the following modes:

  • All terms.

  • Any term.

  • None of the terms.

  • Phrase (exact terms in order within an adjustable window).

  • Proximity (terms in any order within an adjustable window).

  • Filename search.

Additional entry fields can be created by clicking the Add clause button.

When searching, the non-empty clauses will be combined either with an AND or an OR conjunction, depending on the choice made on the left (All clauses or Any clause).

Entries of all types except "Phrase" and "Near" accept a mix of single words and phrases enclosed in double quotes. Stemming and wildcard expansion will be performed as for simple search.

Phrase and Proximity searches

These two clauses look for a group of terms in specified relative positions. They differ in the sense that the order of input terms is significant for phrase searches, but not for proximity searches. The latter do not impose an order on the words. In both cases, an adjustable number (slack) of non-matched words may be accepted between the searched ones. For phrase searches, the default count is zero (exact match). For proximity searches it is ten (meaning that two search terms, would be matched if found within a window of twelve words).

Examples: a phrase search for quick fox with a slack of 0 will match quick fox but not quick brown fox. With a slack of 1 it will match the latter, but not fox quick. A proximity search for quick fox with the default slack will match the latter, and also a fox is a cunning and quick animal.

The slack can be adjusted with the counter to the left of the input area

Advanced search: the "filter" tab

This part of the dialog has several sections which allow filtering the results of a search according to a number of criteria

  • The first section allows filtering by dates of last modification. You can specify both a minimum and a maximum date. The initial values are set according to the oldest and newest documents found in the index.

  • The next section allows filtering the results by file size. There are two entries for minimum and maximum size. Enter decimal numbers. You can use suffix multipliers: k/K, m/M, g/G, t/T for 10E3, 10E6, 10E9, 10E12 respectively.

  • The next section allows filtering the results by their MIME types, or MIME categories (e.g.: media/text/message/etc.).

    You can transfer the types between two boxes, to define which will be included or excluded by the search.

    The state of the file type selection can be saved as the default (the file type filter will not be activated at program start-up, but the lists will be in the restored state).

  • The bottom section allows restricting the search results to a sub-tree of the indexed area. You can use the Invert checkbox to search for files not in the sub-tree instead. If you use directory filtering often and on big subsets of the file system, you may think of setting up multiple indexes instead, as the performance may be better.

    You can use relative/partial paths for filtering. E.g., entering dirA/dirB would match either /dir1/dirA/dirB/myfile1 or /dir2/dirA/dirB/someother/myfile2.

Advanced search history

The advanced search tool memorizes the last 100 searches performed. You can walk the saved searches by using the up and down arrow keys while the keyboard focus belongs to the advanced search dialog.

The complex search history can be erased, along with the one for simple search, by selecting the FileErase Search History menu entry.

3.2.7. Document history

Documents that you actually view (with the internal preview or an external tool) are entered into the document history, which is remembered.

You can display the history list by using the Tools/Doc History menu entry.

You can erase the document history by using the Erase document history entry in the File menu.

3.2.8. Saving and restoring queries

Both simple and advanced query dialogs save recent history, but the amount is limited: old queries will eventually be forgotten. Also, important queries may be difficult to find among others. This is why both types of queries can also be explicitly saved to files, from the GUI menus: FileSave last query / Load last query

The default location for saved queries is a subdirectory of the current configuration directory, but saved queries are ordinary files and can be written or moved anywhere.

Some of the saved query parameters are part of the preferences (e.g. autophrase or the active external indexes), and may differ when the query is loaded from the time it was saved. In this case, Recoll will warn of the differences, but will not change the user preferences.

3.2.9. Sorting search results and collapsing duplicates

The documents in a result list are normally sorted in order of relevance. It is possible to specify a different sort order, either by using the vertical arrows in the GUI toolbox to sort by date, or switching to the result table display and clicking on any header. The sort order chosen inside the result table remains active if you switch back to the result list, until you click one of the vertical arrows, until both are unchecked (you are back to sort by relevance).

Sort parameters are remembered between program invocations, but result sorting is normally always inactive when the program starts. It is possible to keep the sorting activation state between program invocations by checking the Remember sort activation state option in the preferences.

It is also possible to hide duplicate entries inside the result list (documents with the exact same contents as the displayed one). The test of identity is based on an MD5 hash of the document container, not only of the text contents (so that e.g., a text document with an image added will not be a duplicate of the text only). Duplicates hiding is controlled by an entry in the GUI configuration dialog, and is off by default.

When a result document does have undisplayed duplicates, a Dups link will be shown with the result list entry. Clicking the link will display the paths (URLs + ipaths) for the duplicate entries.

3.2.10. The term explorer tool

Recoll automatically manages the expansion of search terms to their derivatives (e.g.: plural/singular, verb inflections). But there are other cases where the exact search term is not known. For example, you may not remember the exact spelling, or only know the beginning of the name.

The search will only propose replacement terms with spelling variations when no matching document were found. In some cases, both proper spellings and mispellings are present in the index, and it may be interesting to look for them explicitly.

The term explorer tool (started from the toolbar icon or from the Term explorer entry of the Tools menu) can be used to search the full index terms list, or (later addition), display some statistics or other index information. It has several modes of operations:

Wildcard

In this mode of operation, you can enter a search string with shell-like wildcards (*, ?, []). e.g.: xapi* would display all index terms beginning with xapi. (More about wildcards here).

Regular expression

This mode will accept a regular expression as input. Example: word[0-9]+. The expression is implicitly anchored at the beginning. E.g.: press will match pression but not expression. You can use .*press to match the latter, but be aware that this will cause a full index term list scan, which can be quite long.

Stem expansion

This mode will perform the usual stem expansion normally done as part user input processing. As such it is probably mostly useful to demonstrate the process.

Spelling/Phonetic

In this mode, you enter the term as you think it is spelled, and Recoll will do its best to find index terms that sound like your entry. This mode uses the Aspell spelling application, which must be installed on your system for things to work (if your documents contain non-ASCII characters, Recoll needs an aspell version newer than 0.60 for UTF-8 support). The language which is used to build the dictionary out of the index terms (which is done at the end of an indexing pass) is the one defined by your NLS environment. Weird things will probably happen if languages are mixed up.

Show index statistics

This will print a long list of boring numbers about the index

List files which could not be indexed

This will show the files which caused errors, usually because recollindex could not translate their format into text.

Note that in cases where Recoll does not know the beginning of the string to search for (e.g. a wildcard expression like *coll), the expansion can take quite a long time because the full index term list will have to be processed. The expansion is currently limited at 10000 results for wildcards and regular expressions. It is possible to change the limit in the configuration file.

Double-clicking on a term in the result list will insert it into the simple search entry field. You can also cut/paste between the result list and any entry field (the end of lines will be taken care of).

3.2.11. The Query Fragments window

The Query Fragments window can be used to control filtering query language elements modifying the current query, simply by clicking a button. This can be useful to save typing, or avoid memorizing, simple clauses of common usage (e.g. selecting only standalone documents or attachments, or filtering out Web results, selecting a file system subtree, a file type, etc.).

Selecting the ToolsQuery Fragments menu entry will open the dialog.

The contents of the window are entirely customisable, and defined by the contents of a XML text file, named fragment-buttons.xml and which will be looked for in the current index configuration directory. The sample file distributed with Recoll contains a number of example filters. This will be automatically copied to the configuration directory if the file does not exist in there (e.g. ~/.recoll/fragment-buttons.xml under Linux and MacOS, $HOME/AppData/Local/Recoll/fragment-buttons.xml for Windows). Editing the copy will allow you to configure the tool for your needs .

Note

The fragment-buttons.xml file was named fragbuts.xml up to Recoll version 1.31.0. This was deemed too close to offensive for native English speakers, so that the file was renamed. An existing fragbuts.xml will still be used if fragment-buttons.xml does not exist. No automatic renaming will be performed.

Here follows an example window:

And the corresponding configuration file:

<?xml version="1.0" encoding="UTF-8"?>
<fragbuttons version="1.0">

  <radiobuttons>
    <!-- Toggle Web queue results inclusion -->
    <fragbutton>
      <label>Include Web Results</label>
      <frag></frag>
    </fragbutton>
    <fragbutton>
      <label>Exclude Web Results</label>
      <frag>-rclbes:BGL</frag>
    </fragbutton>
    <fragbutton>
      <label>Only Web Results</label>
      <frag>rclbes:BGL</frag>
    </fragbutton>
  </radiobuttons>

  <radiobuttons>
    <!-- Standalone vs embedded switch -->
    <fragbutton>
      <label>Include embedded documents</label>
      <frag></frag>
    </fragbutton>
    <fragbutton>
      <label>Only standalone documents</label>
      <frag>issub:0</frag>
    </fragbutton>
    <fragbutton>
      <label>Only embedded documents</label>
      <frag>issub:1</frag>
    </fragbutton>
  </radiobuttons>

  <buttons>
    <fragbutton>
      <label>Example: Year 2010</label>
      <frag>date:2010-01-01/2010-12-31</frag>
    </fragbutton>
    <fragbutton>
      <label>Example: c++ files</label>
      <frag>ext:cpp OR ext:cxx</frag>
    </fragbutton>
    <fragbutton>
      <label>Example: My Great Directory</label>
      <frag>dir:/my/great/directory</frag>
    </fragbutton>
  </buttons>
</fragbuttons>

There are two types of groupings radiobuttons and buttons, each defining a line of checkbuttons or radiobuttons inside the window. Any number of buttons can be selected, but the radiobuttons in a line are exclusive.

Buttons are defined by a fragbutton section, which provides the label for a button, and the Query Language fragment which will be added (as an AND filter) before performing the query if the button is active.

    <fragbutton>
      <label>Example: My Great Directory</label>
      <frag>dir:/my/great/directory</frag>
    </fragbutton>

It is also possible to add message elements inside the groups, for documenting the behaviour. message elements have a label but no frag element. Example:

  <buttons>
    <message>
      <label>This is a message</label> 
    </message>
  </buttons>

The label contents are interpreted as HTML. Take care to replace opening < characters with the &lt; entity if you use tags.

The only thing that you need to know about XML for editing this file is that any opening tag like <label> needs to be matched by a closing tag after the value: </label>.

You will normally edit the file with a regular text editor, like, e.g. vi or notepad. Double-clicking the file in a file manager may not work, because this usually opens it in a Web browser, which will not let you modify the contents.

3.2.12. Searching across multiple indexes

See the section describing the use of multiple indexes for generalities. Only the aspects concerning the recoll GUI are described here.

A recoll program instance is always associated with a main index, which is the one to be updated when requested from the File menu, but it can use any number of external Recoll indexes for searching. The external indexes can be selected through the External Indexes tab in the preferences dialog, which can be reached either trough: PreferencesGUI ConfigurationExternal Index Dialog or QueryExternal index dialog.

Index selection is performed in two phases. A set of all usable indexes must first be defined, and then the subset of indexes to be used for searching. These parameters are retained across program executions (there are kept separately for each Recoll configuration). The set of all indexes is usually quite stable, while the active ones might typically be adjusted quite frequently.

The main index (defined by RECOLL_CONFDIR) is always active. If this is undesirable, you can set up your base configuration to index an empty directory.

When adding a new index to the set, you can select either a Recoll configuration directory, or directly a Xapian index directory. In the first case, the Xapian index directory will be obtained from the selected configuration.

If the external index is actually located on a volume mounted from another machine, and references remote files, there may be a need to adjust the result paths so that they match the locally mounted ones (for opening documents). This can be done by using the path translation facility.

As building the set of all indexes can be a little tedious when done through the user interface, you can use the RECOLL_EXTRA_DBS environment variable to provide an initial set. This might typically be set up by a system administrator so that every user does not have to do it. The variable should define a colon-separated list of index directories, e.g.:

export RECOLL_EXTRA_DBS=/some/place/xapiandb:/some/other/db

On Windows, use semi-colons (;) as separators instead of colons.

Another environment variable, RECOLL_ACTIVE_EXTRA_DBS allows adding to the active list of indexes. This variable was suggested and implemented by a Recoll user. It is mostly useful if you use scripts to mount external volumes with Recoll indexes. By using RECOLL_EXTRA_DBS and RECOLL_ACTIVE_EXTRA_DBS, you can add and activate the index for the mounted volume when starting recoll. Unreachable indexes will automatically be deactivated when starting up.

3.2.13. Unix-like systems: displaying thumbnails

The default format for the result list entries and the detail area of the result table display an icon for each result document. The icon is either a generic one determined from the MIME type, or a thumbnail of the document appearance. Thumbnails are only displayed if found in the standard freedesktop location, where they would typically have been created by a file manager.

Recoll has no capability to create thumbnails. A relatively simple trick is to use the Open parent document/folder entry in the result list popup menu. This should open a file manager window on the containing directory, which should in turn create the thumbnails (depending on your settings). Restarting the search should then display the thumbnails.

There are also some pointers about thumbnail generation in the Recoll FAQ.

3.2.14. Unix-like systems: running arbitrary commands on result files

Apart from the Open and Open With operations, which allow starting an application on a result document (or a temporary copy), based on its MIME type, it is also possible to run arbitrary commands on results which are top-level files, using the Run Script entry in the results pop-up menu.

The commands which will appear in the Run Script submenu must be defined by .desktop files inside the scripts subdirectory of the current configuration directory.

Here follows an example of a .desktop file, which could be named for example, ~/.recoll/scripts/myscript.desktop (the exact file name inside the directory is irrelevant):

[Desktop Entry]
Type=Application
Name=MyFirstScript
Exec=/home/me/bin/tryscript %F
MimeType=*/*

The Name attribute defines the label which will appear inside the Run Script menu. The Exec attribute defines the program to be run, which does not need to actually be a script, of course. The MimeType attribute is not used, but needs to exist.

The commands defined this way can also be used from links inside the result paragraph.

As an example, it might make sense to write a script which would move the document to the trash and purge it from the Recoll index.

3.2.15. Keyboard shortcuts

A number of common actions within the graphical interface can be triggered through keyboard shortcuts. As of Recoll 1.29, many of the shortcut values can be customised from a screen in the GUI preferences. Most shortcuts are specific to a given context (e.g. within a preview window, within the result table).

Most shortcuts can be changed to a preferred value by using the GUI shortcut editor: PreferencesGUI configurationShortcuts. In order to change a shortcut, just click the corresponding cell in the Shortcut column, and type the desired sequence.

Table 3.1. Keyboard shortcuts

Description Default value
Context: almost everywhere
Program exit Ctrl+Q
Context: advanced search
Load the next entry from the search history Up
Load the previous entry from the search history Down
Context: main window
Clear search. This will move the keyboard cursor to the simple search entry and erase the current text Ctrl+S
Move the keyboard cursor to the search entry area without erasing the current text Ctrl+L
Move the keyboard cursor to the search entry area without erasing the current text Ctrl+Shift+S
Toggle displaying the current results as a table or as a list Ctrl+T
Context: main window, when showing the results as a table
Move the keyboard cursor to currently the selected row in the table, or to the first one if none is selected Ctrl+R
Jump to row 0-9 or a-z in the table Ctrl+[0-9] or Ctrl+Shift+[a-z]
Cancel the current selection Esc
Context: preview window
Close the preview window Esc
Close the current tab Ctrl+W
Open a print dialog for the current tab contents Ctrl+P
Load the next result from the list to the current tab Shift+Down
Load the previous result from the list to the current tab Shift+Up
Context: result table
Copy the text contained in the selected document to the clipboard Ctrl+G
Copy the text contained in the selected document to the clipboard, then exit recoll Ctrl+Alt+Shift+G
Open the current document Ctrl+O
Open the current document and exit Recoll Ctrl+Alst+Shift+O
Show a full preview for the current document Ctrl+D
Toggle showing the column names Ctrl+H
Show a snippets (keyword in context) list for the current document Ctrl+E
Toggle showing the row letters/numbers Ctrl+V
Context: snippets window
Close the snippets window Esc
Find in the snippets list (method #1) Ctrl+F
Find in the snippets list (method #2) /
Find the next instance of the search term F3
Find the previous instance of the search term Shift+F3

3.2.16. Search tips

Terms and search expansion

Term completion.  While typing into the simple search entry, a popup menu will appear and show completions for the current string. Values preceded by a clock icon come from the history, those preceded by a magnifier icon come from the index terms. This can be disabled in the preferences.

Picking up new terms from result or preview text.  Double-clicking on a word in the result list or in a preview window will copy it to the simple search entry field.

Wildcards.  Wildcards can be used inside search terms in all forms of searches. More about wildcards.

Automatic suffixes.  Words like odt or ods can be automatically turned into query language ext:xxx clauses. This can be enabled in the Search preferences panel in the GUI.

Disabling stem expansion.  Entering a capitalized word in any search field will prevent stem expansion (no search for gardening if you enter Garden instead of garden). This is the only case where character case should make a difference for a Recoll search. You can also disable stem expansion or change the stemming language in the preferences.

Finding related documents.  Selecting the Find similar documents entry in the result list paragraph right-click menu will select a set of "interesting" terms from the current result, and insert them into the simple search entry field. You can then possibly edit the list and start a search to find documents which may be apparented to the current result.

File names.  File names are added as terms during indexing, and you can specify them as ordinary terms in normal search fields (Recoll used to index all directories in the file path as terms. This has been abandoned as it did not seem really useful). Alternatively, you can use the specific file name search which will only look for file names, and may be faster than the generic search especially when using wildcards.

Working with phrases and proximity

Phrases searches.  A phrase can be looked for by enclosing a number of terms in double quotes. Example: "user manual" will look only for occurrences of user immediately followed by manual. You can use the "Phrase" field of the advanced search dialog to the same effect. Phrases can be entered along simple terms in all simple or advanced search entry fields, except "Phrase".

Proximity searches.  A proximity search differs from a phrase search in that it does not impose an order on the terms. Proximity searches can be entered by specifying the "Proximity" type in the advanced search, or by postfixing a phrase search with a 'p'. Example: "user manual"p would also match "manual user". Also see the modifier section from the query language documentation.

AutoPhrases.  This option can be set in the preferences dialog. If it is set, a phrase will be automatically built and added to simple searches in All terms and Query language modes. This will not change radically the results, but will give a relevance boost to the results where the search terms appear as a phrase. E.g.: searching for virtual reality will still find all documents where either virtual and reality appear, but those which contain virtual reality should appear sooner in the list.

Phrase searches can slow down a query if most of the terms in the phrase are common. If the autophrase option is on, very common terms will be removed from the automatically constructed phrase. The removal threshold can be adjusted from the search preferences. This has become much less of a concern with recent Xapian versions and the autophrase option is set by default.

Phrases and abbreviations.  Dotted abbreviations like I.B.M. are also automatically indexed as a word without the dots: IBM. Searching for the word inside a phrase (e.g.: "the IBM company") will only match the dotted abbreviation if you increase the phrase slack (using the advanced search panel control, or the o query language modifier). Literal occurrences of the word will be matched normally.

Others

Using fields.  You can use the query language and field specifications to only search certain parts of documents. This can be especially helpful with email, for example only searching emails from a specific originator:

search tips from:helpfulgui

Result table tips.  When displaying results in table mode, you can use a right click on the table headers to activate a pop-up menu which will let you adjust what columns are displayed. You can drag the column headers to adjust their order. You can click them to sort by the field displayed in the column. You can also save the result list in CSV format.

Changing the GUI geometry.  It is possible to configure the GUI in wide form factor by dragging the toolbars to one of the sides (their location is remembered between sessions), and moving the category filters to a menu (can be set in the PreferencesGUI configurationUser interface panel).

Query explanation.  You can get an exact description of what the query looked for, including stem expansion, and Boolean operators used, by clicking on the result list header.

Advanced search history.  You can display any of the last 100 complex searches performed by using the up and down arrow keys while the advanced search panel is active.

Forced opening of a preview window.  You can use Shift+Click on a result list Preview link to force the creation of a preview window instead of a new tab in the existing one.

3.2.17. Customising the search interface

You can customise some aspects of the search interface by using the GUI configuration entry in the Preferences menu.

There are several tabs in the dialog, dealing with the interface itself, the parameters used for searching and returning results, and what indexes are searched.

Most GUI settings are global and do not depend on the index in use. As of Recoll 1.42, it is possible to specify that some settings will depend on the index. At the moment, only the result table configuration can be saved in such a way.

Choosing the viewer applications

By default Recoll lets the desktop choose what application should be used to open a given document, with exceptions.

The details of this behaviour can be customised with the PreferencesGUI configurationUser interfaceChoose editor applications dialog or by editing the mimeview configuration file.

When Use desktop preferences, at the top of the dialog, is checked, the desktop default is generally used, but there is a small default list of exceptions, for MIME types where the Recoll choice should override the desktop one. These are applications which are well integrated with Recoll, for example, on Linux, evince for viewing PDF and Postscript files because of its support for opening the document at a specific page and passing a search string as an argument. You can add or remove document types to the exceptions by using the dialog.

If you prefer to completely customise the choice of applications, you can uncheck Use desktop preferences, in which case the Recoll predefined applications will be used, and can be changed for each document type. This is probably not the most convenient approach in most cases.

The applications choice dialog accepts multiple selections of MIME types in the top section, and lets you define how they are processed in the bottom one.

Some substitutions will be performed on the template command line before execution:

  • %f : document file name.
  • %i : ipath.
  • %l : hit line number.
  • %M : MIME type.
  • %p : hit page number.
  • %S : a possibly multiword matched phrase. Only for simple phrase searches, else as %s.
  • %s : a heuristically selected matched term.
  • %U : URL of file path.
  • %u : URL.
  • %(xx) : xx metadata field value.

You may also change the choice of applications by editing the mimeview configuration file if you find this more convenient.

Under Unix-like systems, each result list entry also has a right-click menu with an Open With entry. This lets you choose an application from the list of those which registered with the desktop for the document MIME type, on a case by case basis.

The GUI preferences dialog

Many aspects of the Recoll GUI can be customised from dialogs reached through the PreferencesGUI configuration menu choice.

Not all choices from the different panels will be described below. Many are self-evident or have sufficient tooltip text to provide explanations.

User interface
  • Choose editor application: this opens the dialog which allows you to select the application to be used to open each MIME type, which was described in detail in the previous section.

  • Single application: when checked, starting the Recoll GUI will activate an existing instance instead of creating a new one.

  • Start with simple search mode: this lets you choose the value of the simple search type on program startup. Either a fixed value (e.g. Query Language), or the value in use when the program last exited.

  • Maximum size of search history: limit how many searches are stored in the history. Set to -1 for no limit. The history can be cleared in the File menu.

  • Start with advanced search dialog open : If you use this dialog frequently, checking the entries will get it to open when the GUI starts.

  • Remember sort activation state if set, the GUI will remember the sort tool state between invocations. It normally starts with sorting disabled.

  • Depth of side filter directory tree: decide how many levels should be shown in the directory filter panel.

  • Side filter dates format: allows changing how dates are displayed in the side filter. See the tooltip for details.

  • Document filter choice style: this will let you choose if the document categories are displayed as a list or a set of buttons, or a menu.

  • Show system tray icon: a gui instance will appear as an icon in the system tray. You can then also check Close to tray instead of exiting and Generate desktop notifications, to have e.g. a popup signal the completion of indexing.

  • Disable Qt autocompletion in search entry: this will disable the completion popup. Il will only appear, and display the full history, either if you enter only white space in the search area, or if you click the clock button on the right of the area.

  • Highlight CSS style for query terms: Terms from the user query are highlighted in the result list and the preview window. The highligthing style can be chosen here, for example color: blue or color: red;background: yellow. Mostly any CSS style should work.

  • Display scale: This actually adjust the font sizes everywhere inside the GUI and can be used on High resolution displays if the default characters are too small.

  • Color scheme: choose how the GUI is displayed: mostly dark on white (Light) or white on dark (Dark). On Windows you can also select System to conform to the system setting. On MacOS systems the option is not available, we always use the system mode.

  • Style sheet: The name of a Qt style sheet text file which is applied to the whole GUI on startup. The default value is empty, but there is a skeleton style sheet (recoll.qss) inside the /usr/share/recoll/examples directory. Using a style sheet, you can change most recoll graphical parameters: colors, fonts, etc. See the sample file for a few simple examples.

    You should be aware that parameters (e.g.: the background color) set inside the Recoll GUI style sheet will override global system preferences, with possible strange side effects: for example if you set the foreground to a light color and the background to a dark one in the desktop preferences, but only the background is set inside the Recoll style sheet, and it is light too, then text will appear light-on-light inside the Recoll GUI.

  • Interface language: the recoll GUI messages are normally shown in the language determined by the system locale (if the translation is available). This choice allows forcing the interface language, e.g. to English if the default translation is incomplete or of bad quality.

Result list:
  • Result list font: There is quite a lot of information shown in the result list, and you may want to customise the font and/or font size. The rest of the fonts used by Recoll are determined by your generic Qt configuration (try the qtconfig command).

  • Edit result list paragraph format string: allows you to change the presentation of each result list entry. See the result list customisation section.

  • Edit result page HTML header insert: allows you to define text inserted at the end of the result page HTML header. More detail in the result list customisation section.

  • Date format: allows specifying the format used for displaying dates inside the result list. This should be specified as an strftime() string (man strftime).

  • Abstract snippet separator: for synthetic abstracts built from index data, which are usually made of several snippets from different parts of the document, this defines the snippet separator, an ellipsis by default.

Preview
  • Maximum text size highlighted for preview: Disable search term highlighting for texts bigger than the given size to speed up loading. Creating highlights on search terms involves quite a lot of processing, and can be slow.

  • Prefer HTML to plain text for preview: if set, Recoll will display HTML as such inside the preview window. If this causes display problems, you can uncheck it to display the plain text version instead. A common issue is insufficient contrast on a dark mode display, caused by the document style sheet.

  • Activate links in preview: if set, Recoll will turn HTTP links found inside plain text into proper HTML anchors, and clicking a link inside a preview window will start the default browser on the link target.

  • Fields display: max field length before using summary: this is used to limit the size of metadata text displayed on the fields view (reached through the right-click popup). Fields over this size will be truncated, with a clickable option to expand.

  • Plain text to HTML line style: when displaying plain text inside the preview window, Recoll tries to preserve some of the original text line breaks and indentation. It can either use PRE HTML tags, which will well preserve the indentation but will force horizontal scrolling for long lines, or use BR tags to break at the original line breaks, which will let the editor introduce other line breaks according to the window width, but will lose some of the original indentation. The third option is the default and probably the best one in most cases: use PRE tags with line wrapping.

  • Search term line offset: how many lines to display over a search hit. Allows having some context for the found search term.

Search parameters:
  • Hide duplicate results: decides if result list entries are shown for identical documents found in different places.

  • Stemming language: stemming obviously depends on the document's language. This listbox will let you chose among the stemming databases which were built during indexing (this is set in the main configuration file), or later added with recollindex -s (See the recollindex manual). Stemming languages which are dynamically added will be deleted at the next indexing pass unless they are also added in the configuration file.

  • Automatically add phrase to simple searches: a phrase will be automatically built and added to simple searches when looking for Any terms. This will give a relevance boost to the results where the search terms appear as a phrase (consecutive and in order).

  • Autophrase term frequency threshold percentage: very frequent terms should not be included in automatic phrase searches for performance reasons. The parameter defines the cutoff percentage (percentage of the documents where the term appears).

  • Replace abstracts from documents: this decides if we should synthesize and display an abstract in place of an explicit abstract found within the document itself.

  • Dynamically build abstracts: this decides if Recoll tries to build document abstracts (lists of snippets) when displaying the result list. Abstracts are constructed by taking context from the document information, around the search terms.

  • Synthetic abstract size: adjust to taste.

  • Synthetic abstract context words: how many words should be displayed around each term occurrence.

  • Query language magic file name suffixes: a list of words which automatically get turned into ext:xxx file name suffix clauses when starting a query language query (e.g.: doc xls xlsx...). This will save some typing for people who use file types a lot when querying.

External indexes:

This panel will let you browse for additional indexes that you may want to search. External indexes are designated by their database directory (e.g.: /home/someothergui/.recoll/xapiandb, /usr/local/recollglobal/xapiandb).

Once entered, the indexes will appear in the External indexes list, and you can chose which ones you want to use at any moment by checking or unchecking their entries.

Your main database (the one the current configuration indexes to), is always implicitly active. If this is not desirable, you can set up your configuration so that it indexes, for example, an empty directory. An alternative indexer may also need to implement a way of purging the index from stale data.

The result list format

Recoll normally uses a full function HTML processor to display the result list and the snippets window. Depending on the version, this may be based on either Qt WebKit or Qt WebEngine. It is then possible to completely customise the result list with full support for CSS and Javascript.

It is also possible to build Recoll to use a simpler Qt QTextBrowser widget to display the HTML, which may be necessary if the ones above are not ported on the system, or to reduce the application size and dependencies. There are limits to what you can do in this case, but it is still possible to decide what data each result will contain, and how it will be displayed.

The result list presentation can be customised by adjusting two elements:

  • The paragraph format

  • HTML code inside the header section. This is also used for the snippets window.

The paragraph format and the header fragment can be edited from the Result list tab of the GUI configuration.

The header fragment is used both for the result list and the snippets window. The snippets list is a table and has a snippets class attribute. Each paragraph in the result list is a table, with class respar, but this can be changed by editing the paragraph format.

There are a few examples on the page about customising the result list on the Recoll Web site.

The paragraph format

This is an arbitrary HTML string which will be transformed by printf-like % substitutions to show the results.

Note

Any literal % character in the input must be quoted as %%. E.g. <table style="width: 100%;"> should be entered as <table style="width: 100%%;">.

The following substitutions will be performed:

%A

Abstract. If %s is not present, this will be either the document abstract attribute if one is present, or the synthetic snippets abstract. If %s is present, this will be the document abstract or empty.

%D

Date.

%I

Icon image name. This is normally determined from the MIME type. The associations are defined inside the mimeconf configuration file. If a thumbnail for the file is found at the standard Freedesktop location, this will be displayed instead.

%K

Keywords.

%L

Precooked Preview, Edit, and possibly Snippets links.

%M

MIME type.

%N

result Number inside the result page.

%P

Parent folder Url. In the case of an embedded document, this is the parent folder for the top level container file.

%R

Relevance percentage.

%S

Size information.

%s

Synthetic "snippets" abstract (selected text around search terms found in the document.

%T

Title if this is set, else Filename.

%t

Title or empty.

%(filename)

File name.

%U

Url

In addition to the predefined values above, all strings like %(fieldname) will be replaced by the value of the field named fieldname for this document. Only stored fields can be accessed in this way, the value of indexed but not stored fields is not known at this point in the search process (see field configuration). There are currently very few fields stored by default, apart from the values above (only author and filename), so this feature will need some custom local configuration to be useful. An example candidate would be the recipient field which is generated by the message input handlers.

The format of the Preview, Edit, and Snippets links is <a href="P%N">, <a href="E%N"> and <a href="A%N"> where docnum (%N) expands to the document number inside the result page).

A link target defined as "F%N" will open the document corresponding to the %P parent folder expansion, usually creating a file manager window on the folder where the container file resides. E.g.:

<a href="F%N">%P</a>

A link target defined as R%N|scriptname will run the corresponding script on the result file (if the document is embedded, the script will be started on the top-level parent). See the section about defining scripts. Note that scriptname value should be the value of the Name field of the desktop file, and not the desktop file name.

The default value for the paragraph format string is:

"<table class=\"respar\">\n"
"<tr>\n"
"<td><a href='%U'><img src='%I' width='64'></a></td>\n"
"<td>%L &nbsp;<i>%S</i> &nbsp;&nbsp;<b>%T</b><br>\n"
"<span style='white-space:nowrap'><i>%M</i>&nbsp;%D</span>&nbsp;&nbsp;&nbsp; <i>%U</i>&nbsp;%i<br>\n"
"%s %A %K</td>\n"
"</tr></table>\n"

You may, for example, try the following for a more web-like experience:

<u><b><a href="P%N">%T</a></b></u><br>
%A<font color=#008000>%U - %S</font> - %L

Note that the P%N link in the above paragraph makes the title a preview link. Or the clean looking:

<img src="%I" align="left">%L <font color="#900000">%R</font>
&nbsp;&nbsp;<b>%T&</b><br>%S&nbsp;
<font color="#808080"><i>%U</i></font>
<table bgcolor="#e0e0e0">
<tr><td><div>%A</div></td></tr>
</table>%K

These samples, and some others are on the web site, with pictures to show how they look.

It is also possible to define the value of the snippet separator inside the abstract section.

3.2.18. The recoll GUI command line options

The recoll command has a number of useful command line options.

-c configdir specifies a non-default configuration directory.

-L lang can be used to use a different language for the GUI labels than the one which would be chosen according to the system locale. Some translations are quite incomplete and you may prefer to see the English messages, even if your machine is generally setup for, e.g. Spanish. Example:

recoll -L en

-q query specifies a query to be run when the program starts. It takes a single argument, which must be quoted if it contains white space.

-o/-l/-f/-a specify the type of query. The default is to interpret the -q argument as a query language string. You can use these options to interpret the argument as an Any Term, File Name or All Terms query instead.

The -t option will tell the program to behave exactly like the recollq command, printing the results to the standard output (terminal) instead of starting a graphical window. This option must be given separately, e.g.

recoll -tq some query

will *not* work, use

recoll -t -q some query

instead.

The -w option starts the program minimized. -W only creates a system tray icon (the system tray support must be enabled in the GUI preferences User interface tab).

3.3. Searching with the KDE KIO slave

The Recoll KIO slave allows performing a Recoll search by entering an appropriate URL in a KDE open dialog, or a Dolphin URL. The results are displayed as directory entries.

The instructions for building this module are located in the source tree. See: kde/kio/recoll/00README.txt. Some Linux distributions do package the kio-recoll module, so check before diving into the build process, maybe it's already out there ready for one-click installation.

3.4. Searching on the command line

There are several ways to obtain search results as a text stream, without a graphical interface:

  • By passing option -t to the recoll program, or by calling it as recollq (through a link).

  • By using the actual recollq program.

  • By writing a custom Python program, using the Recoll Python API.

The first two methods work in the same way and accept/need the same arguments (except for the additional -t to recoll). The query to be executed is specified as command line arguments.

Depending on the platform, recollq is not always built or installed by default (as recoll -t works the same). This is a very simple program, and if you can program a little c++, you may find it useful to taylor its output format to your needs. Apart from being easily customised, recollq is only really useful on systems where the Qt libraries are not available.

recollq has a man page. The Usage string follows:

Usage: recollq [options] [query elements]
 Runs a recoll query and displays result lines. 
   By default, the argument(s) will be interpreted as a Recoll query language
   string. The -q option was kept for compatibility with the GUI and is just
   ignored: the query *must* be specified in the non-option arguments.
  Query language elements:
   * Implicit AND, exclusion, field spec:  t1 -t2 title:t3
   * OR has priority: t1 OR t2 t3 OR t4 means (t1 OR t2) AND (t3 OR t4)
   * Phrase: "t1 t2" (needs additional quoting on cmd line)
 Other query modes :
  -o Emulate the GUI simple search in ANY TERM mode.
  -a Emulate the GUI simple search in ALL TERMS mode.
  -f Emulate the GUI simple search in filename mode.
 Query and results options:
  -c <configdir> : specify configuration directory, overriding $RECOLL_CONFDIR.
  -C : collapse duplicates.
  -d also dump file contents.
  -n [first-]<cnt> define the result slice. The default value for [first] is 0.
     Without the option, the default max count is 2000. Use n=0 for no limit.
  -b : basic. Just output urls, no mime types or titles.
  -Q : no result lines, just the processed query and result count.
  -m : dump the whole document meta[] array for each result.
  -A : output the document abstracts.
     -p <cnt> : show <cnt> snippets, with page numbers instead of the
         concatenated abstract.
     -g <cnt> : show <cnt> snippets, with line numbers instead of the
         concatenated abstract.
  -S fld : sort by field <fld>.
    -D : sort descending.
  -s stemlang : set stemming language to use (must exist in index...).
     Use -s "" to turn off stem expansion.
  -T <synonyms file>: use the parameter (Thesaurus) for word expansion.
  -i <dbdir> : additional index, several can be given.
  -e use url encoding (%xx) for urls.
  -E use exact result count instead of lower bound estimate.
  -F <field name list> : output exactly these fields for each result.
     The field values are encoded in base64, output in one line and 
     separated by one space character. This is the recommended format 
     for use by other programs. Use a normal query with option -m to 
     see the field names. Use -F '' to output all fields, but you probably
     also want option -N in this case.
    -N : with -F, print the (plain text) field names before the field values.
  --extract_to <filepath> : extract the first result to filepath, which must not
     exist. Use a -n option with an offset to select the appropriate result.
  --paths-only: only print results which would have a file:// scheme, and
     exclude the scheme.
 Other non-query usages:
  -P: Show the date span for all the documents present in the index.

Sample execution:

recollq 'ilur -nautique mime:text/html'
Recoll query: ((((ilur:(wqf=11) OR ilurs) AND_NOT (nautique:(wqf=11) OR nautiques OR nautiqu OR nautiquement)) FILTER Ttext/html))
4 results
text/html       [file:///Users/dockes/projets/bateaux/ilur/comptes.html]      [comptes.html]  18593   bytes   
text/html       [file:///Users/dockes/projets/nautique/webnautique/articles/ilur1/index.html] [Constructio...
text/html       [file:///Users/dockes/projets/pagepers/index.html]    [psxtcl/writemime/recoll]...
text/html       [file:///Users/dockes/projets/bateaux/ilur/factEtCie/recu-chasse-maree....
      

3.5. The query language

The Recoll query language was based on the now defunct Xesam user search language specification. It allows defining general boolean searches within the main body text or specific fields, and has many additional features, broadly equivalent to those provided by complex search interface in the GUI.

The query language processor is activated in the GUI simple search entry when the search mode selector is set to Query Language. It can also be used from the command line search, the KIO slave, or the Web UI.

If the results of a query language search puzzle you and you doubt what has been actually searched for, you can use the GUI Show Query link at the top of the result list to check the exact query which was finally executed by Xapian.

3.5.1. General syntax

Here follows a sample request that we are going to explain:

        author:"john doe" Beatles OR Lennon Live OR Unplugged -potatoes
      

This would search for all documents with John Doe appearing as a phrase in the author field (exactly what this is would depend on the document type, e.g.: the From: header, for an email message), and containing either beatles or lennon and either live or unplugged but not potatoes (in any part of the document).

An element is composed of an optional field specification, and a value, separated by a colon (the field separator is the last colon in the element). Examples:

  • Eugenie

  • author:balzac

  • dc:title:grandet

  • dc:title:"eugenie grandet"

The colon, if present, means "contains". Xesam defines other relations, which are mostly unsupported for now (except in special cases, described further down).

All elements in the search entry are normally combined with an implicit AND. It is possible to specify that elements be OR'ed instead, as in Beatles OR Lennon. The OR must be entered literally (capitals), and it has priority over the AND associations: word1 word2 OR word3 means word1 AND (word2 OR word3) not (word1 AND word2) OR word3.

You can use parentheses to group elements, which will sometimes make things clearer, and may allow expressing combinations which would have been difficult otherwise.

An element preceded by a - specifies a term that should not appear.

By default, words inside double-quotes define a phrase search (the order of words is significant), so that title:"prejudice pride" is not the same as title:prejudice title:pride, and is unlikely to find a result. This can be changed by using modifiers.

Words inside phrases and capitalized words are not stem-expanded. Wildcards may be used anywhere inside a term. Specifying a wildcard on the left of a term can produce a very slow search (or even an incorrect one if the expansion is truncated because of excessive size). Also see More about wildcards.

To save you some typing, a field value given as a comma-separated list of terms will be interpreted as an AND list and a slash-separated list as an OR list. No white space is allowed. So:

author:john,lennon

will search for documents with john AND lennon inside the author field (in any order), and

author:john/ringo

would search for john OR ringo. This behaviour is only triggered by a field prefix: without it, comma- or slash- separated input will produce a phrase search. However, you can use a text field name to search the main text this way, as an alternate to using an explicit OR, e.g. text:napoleon/bonaparte would generate a search for napoleon OR bonaparte in the main text body.

Modifiers can be set on a double-quote value, for example to specify a proximity search (unordered). See the modifier section. No space must separate the final double-quote and the modifiers value, e.g. "two one"po10

Recoll currently manages the following default fields:

  • title, subject or caption are synonyms which specify data to be searched for in the document title or subject.

  • author or from for searching the documents originators.

  • recipient or to for searching the documents recipients.

  • keyword for searching the document-specified keywords (few documents actually have any).

  • filename for the document's file name. You can use the shorter fn alias. This value is not set for all documents: internal documents contained inside a compound one (for example an EPUB section) do not inherit the container file name any more, this was replaced by an explicit field (see next). Sub-documents can still have a filename, if it is implied by the document format, for example the attachment file name for an email attachment.

  • containerfilename, aliased as cfn. This is set for all documents, both top-level and contained sub-documents, and is always the name of the filesystem file which contains the data. The terms from this field can only be matched by an explicit field specification (as opposed to terms from filename which are also indexed as general document content). This avoids getting matches for all the sub-documents when searching for the container file name.

  • ext specifies the file name extension (Ex: ext:html).

  • rclmd5 the MD5 checksum for the document. This is used for displaying the duplicates of a search result (when querying with the option to collapse duplicate results). Incidentally, this could be used to find the duplicates of any given file by computing its MD5 checksum and executing a query with just the rclmd5 value.

You can define aliases for field names, in order to use your preferred denomination or to save typing (e.g. the predefined fn and cfn aliases defined for filename and containerfilename). See the section about the fields file.

The document input handlers have the possibility to create other fields with arbitrary names, and aliases may be defined in the configuration, so that the exact field search possibilities may be different for you if someone took care of the customisation.

3.5.2. Special field-like specifiers

The field syntax also supports a few field-like, but special, criteria, for which the values are interpreted differently. Regular processing does not apply (for example the slash- or comma- separated lists don't work). A list follows.

  • dir for filtering the results on file location. For example, dir:/home/me/somedir will restrict the search to results found anywhere under the /home/me/somedir directory (including subdirectories).

    Tilde expansion will be performed as usual. Wildcards will be expanded, but please have a look at an important limitation of wildcards in path filters.

    You can also use relative paths. For example, dir:share/doc would match either /usr/share/doc or /usr/local/share/doc.

    -dir will find results not in the specified location.

    Several dir clauses can be specified, both positive and negative. For example the following makes sense:

    dir:recoll dir:src -dir:utils -dir:common

    This would select results which have both recoll and src in the path (in any order), and which have not either utils or common.

    You can also use OR conjunctions with dir: clauses.

    On Unix-like systems, a special aspect of dir clauses is that the values in the index are not transcoded to UTF-8, and never lower-cased or unaccented, but stored as binary. This means that you need to enter the values in the exact lower or upper case, and that searches for names with diacritics may sometimes be impossible because of character set conversion issues. Non-ASCII UNIX file paths are an unending source of trouble and are best avoided.

    You need to use double-quotes around the path value if it contains space characters.

    The shortcut syntax to define OR or AND lists within fields with commas or slash characters is not available.

  • size for filtering the results on file size. Example: size<10000. You can use <, > or = as operators. You can specify a range like the following: size>100 size<1000. The usual k/K, m/M, g/G, t/T can be used as (decimal) multipliers. Ex: size>1k to search for files bigger than 1000 bytes.

  • date for searching or filtering on dates. The syntax for the argument is based on the ISO8601 standard for dates and time intervals. Only dates are supported, no times. The general syntax is 2 elements separated by a / character. Each element can be a date or a period of time. Periods are specified as PnYnMnD. The n numbers are the respective numbers of years, months or days, any of which may be missing. Dates are specified as YYYY-MM-DD. The days and months parts may be missing. If the / is present but an element is missing, the missing element is interpreted as the lowest or highest date in the index. Examples:

    • 2001-03-01/2002-05-01 the basic syntax for an interval of dates.

    • 2001-03-01/P1Y2M the same specified with a period.

    • 2001/ from the beginning of 2001 to the latest date in the index.

    • 2001 the whole year of 2001

    • P2D/ means 2 days ago up to now if there are no documents with dates in the future.

    • /2003 all documents from 2003 or older.

    Periods can also be specified with small letters (e.g.: p2y).

  • mime or format for specifying the MIME type. These clauses are processed apart from the normal Boolean logic of the search: multiple values will be OR'ed (instead of the normal AND). You can specify types to be excluded, with the usual -, and use wildcards. Example: mime:text/* -mime:text/plain. Specifying an explicit boolean operator before a mime specification is not supported and will produce strange results.

  • type or rclcat for specifying the category (as in text/media/presentation/etc.). The classification of MIME types in categories is defined in the Recoll configuration (mimeconf), and can be modified or extended. The default category names are those which permit filtering results in the main GUI screen. Categories are OR'ed like MIME types above, and can be negated with -.

  • issub for specifying that only standalone (issub:0) or only embedded (issub:1) documents should be returned as results.

Note

mime, rclcat, size, issub and date criteria always affect the whole query (they are applied as a final filter), even if set with other terms inside a parenthesis.

Note

mime (or the equivalent rclcat) is the only field with an OR default. You do need to use OR with ext terms for example.

3.5.3. Range clauses

Recoll 1.24 and later support range clauses on fields which have been configured to support it. No default field uses them currently, so this paragraph is only interesting if you modified the fields configuration and possibly use a custom input handler.

A range clause looks like one of the following:

myfield:small..big
myfield:small..
myfield:..big
        

The nature of the clause is indicated by the two dots .., and the effect is to filter the results for which the myfield value is in the possibly open-ended interval.

See the section about the fields configuration file for the details of configuring a field for range searches (list them in the [values] section).

3.5.4. Modifiers

Some characters are recognized as search modifiers when found immediately after the closing double quote of a phrase, as in "some term"modifierchars. The actual "phrase" can be a single term of course. Supported modifiers:

  • l can be used to turn off stemming (mostly makes sense with p because stemming is off by default for phrases, but see also x further down).

  • o can be used to specify a "slack" for both phrase and proximity searches: the number of additional terms that may be found between the specified ones. If o is followed by an integer number, this is the slack, else the default is 10. The default slack (with no o) is 0 for phrase searches and 10 for proximity searches.

  • p can be used to turn an ordered phrase search into an unordered proximity one. Example: "order any in"p. You can find a little more detail about phrase and proximity searches here.

  • s can be used to turn off synonym expansion, if a synonyms file is in place.

  • x (1.33.2) will enable the expansion of terms inside a phrase search (the default is for phrases to be searched verbatim). Also see the stemexpandphrases in the configuration section, for changing the default behaviour.

  • A weight can be specified for a query element by specifying a decimal value at the start of the modifiers. Example: "Important"2.5.

The following only make sense on indexes which are capable of case and diacritics sensitivity (not the default):

  • C will turn on case sensitivity.

  • D will turn on diacritics sensitivity (if the index supports it).

  • e (explicit) will turn on diacritics sensitivity and case sensitivity, and prevent stem expansion.

3.6. Wildcards and anchored searches

Some special characters are interpreted by Recoll in search strings to expand or specialize the search. Wildcards expand a root term in controlled ways. Anchor characters can restrict a search to succeed only if the match is found at or near the beginning of the document or one of its fields.

3.6.1. Wildcards

All words entered in Recoll search fields will be processed for wildcard expansion before the request is finally executed.

The wildcard characters are:

  • * which matches 0 or more characters.

  • ? which matches a single character.

  • [] which allow defining sets of characters to be matched (ex: [abc] matches a single character which may be 'a' or 'b' or 'c', [0-9] matches any number.

You should be aware of a few things when using wildcards.

  • Using a wildcard character at the beginning of a word can make for a slow search because Recoll will have to scan the whole index term list to find the matches. However, this is much less a problem for field searches, and queries like author:*@domain.com can sometimes be very useful.

  • Using a * at the end of a word can produce more matches than you would think, and strange search results. You can use the term explorer tool to check what completions exist for a given term. You can also see exactly what search was performed by clicking on the link at the top of the result list. In general, for natural language terms, stem expansion will produce better results than an ending * (stem expansion is turned off when any wildcard character appears in the term).

Wildcards and path filtering

Due to the way that Recoll processes wildcards inside dir path filtering clauses, they will have a multiplicative effect on the query size. A clause containing wildcards in several paths elements, like, for example, dir:/home/me/*/*/docdir, will almost certainly fail if your indexed tree is of any realistic size.

Depending on the case, you may be able to work around the issue by specifying the paths elements more narrowly, with a constant prefix, or by using 2 separate dir: clauses instead of multiple wildcards, as in dir:/home/me dir:docdir. The latter query is not equivalent to the initial one because it does not specify a number of directory levels, but that's the best we can do (and it may be actually more useful in some cases).

3.6.2. Anchored searches

Two characters are used to specify that a search hit should occur at the beginning or at the end of the text. ^ at the beginning of a term or phrase constrains the search to happen at the start, $ at the end force it to happen at the end.

As this function is implemented as a phrase search it is possible to specify a maximum distance at which the hit should occur, either through the controls of the advanced search panel, or using the query language, for example, as in:

"^someterm"o10

which would force someterm to be found within 10 terms of the start of the text. This can be combined with a field search as in somefield:"^someterm"o10 or somefield:someterm$.

This feature can also be used with an actual phrase search, but in this case, the distance applies to the whole phrase and anchor, so that, for example, bla bla my unexpected term at the beginning of the text would be a match for "^my term"o5.

Anchored searches can be very useful for searches inside somewhat structured documents like scientific articles, in case explicit metadata has not been supplied, for example for looking for matches inside the abstract or the list of authors (which occur at the top of the document).

3.7. Using Synonyms

Term synonyms and text search:  in general, there are two main ways to use term synonyms for searching text:

  • At index creation time, they can be used to alter the indexed terms, either increasing or decreasing their number, by expanding the original terms to all synonyms, or by reducing all synonym terms to a canonical one.

  • At query time, they can be used to match texts containing terms which are synonyms of the ones specified by the user, either by expanding the query for all synonyms, or by reducing the user entry to canonical terms (the latter only works if the corresponding processing has been performed while creating the index).

With one exception, Recoll only uses synonyms at query time. A user query term which part of a synonym group will be optionally expanded into an OR query for all terms in the group.

The one exception is that if the idxsynonyms parameter is set during indexing, and if the file contains multi-word synonyms, a multi-word single term will be emitted for every occurrence found in the text. If the same file is in use at query time, this will allow phrase and proximity searches to work for the multi-word synonyms.

Synonym groups are defined inside ordinary text files. Each line in the file defines a group.

Example:

hi hello "good morning"

# not sure about "au revoir" though. Is this english ?
bye goodbye "see you" \
"au revoir"

As usual, lines beginning with a # are comments, empty lines are ignored, and lines can be continued by ending them with a backslash.

Multi-word synonyms are supported, but be aware that these will generate phrase queries, which may degrade performance and will disable stemming expansion for the phrase terms.

The contents of the synonyms file must be casefolded (not only lowercased), because this is what expected at the point in the query processing where it is used. There are a few cases where this makes a difference, for example, German sharp s should be expressed as ss, Greek final sigma as sigma. For reference, Python3 has an easy way to casefold words (str.casefold()).

The synonyms file can be specified in the Search parameters tab of the GUI configuration Preferences menu entry, or as an option for command-line searches.

Once the file is defined, the use of synonyms can be enabled or disabled directly from the Preferences menu.

The synonyms are searched for matches with user terms after the latter are stem-expanded, but the contents of the synonyms file itself is not subjected to stem expansion. This means that a match will not be found if the form present in the synonyms file is not present anywhere in the document set (same with accents when using a raw index).

The synonyms function is probably not going to help you find your letters to Mr. Smith. It is best used for domain-specific searches. For example, it was initially suggested by a user performing searches among historical documents: the synonyms file would contains nicknames and aliases for each of the persons of interest.

3.8. Path translations

In some cases, the document paths stored inside the index do not match the actual ones, so that document previews and accesses will fail. This can occur in a number of circumstances:

  • When using multiple indexes it is a relatively common occurrence that some will actually reside on a remote volume, for example mounted via NFS. In this case, the paths used to access the documents on the local machine are not necessarily the same than the ones used while indexing on the remote machine. For example, /home/me may have been used as a topdirs elements while indexing, but the directory might be mounted as /net/server/home/me on the local machine.

  • The case may also occur with removable disks. It is perfectly possible to configure an index to live with the documents on the removable disk, but it may happen that the disk is not mounted at the same place so that the documents paths from the index are invalid. In some case, the path adjustments can be automated.

  • As a last example, one could imagine that a big directory has been moved, but that it is currently inconvenient to run the indexer.

Recoll has a facility for rewriting access paths when extracting the data from the index. The translations can be defined for the main index and for any additional query index.

In the above NFS example, Recoll could be instructed to rewrite any file:///home/me URL from the index to file:///net/server/home/me, allowing accesses from the client.

The translations are defined in the ptrans configuration file, which can be edited with a plain text editor or by using the GUI external indexes configuration dialog: PreferencesExternal index dialog, then click the Paths translations button on the right below the index list: translations will be set for the main index if no external index is currently selected in the list, or else for the currently selected index.

Example entry from a ptrans file: 

[/path/to/external/xapiandb]
/some/index/path = /some/local/path

This would decide that, for the index stored in /path/to/external/xapiandb, any occurence of /some/index/path should be replaced with /some/local/path when presenting a result.

Windows note

At the moment, the path comparisons done for path translation under MS Windows are case sensitive (this will be fixed at some point). Use the natural character case as displayed in the file explorer. Example:

[Z:/some/mounted/xapiandb]
C: = Z:

3.9. Search case and diacritics sensitivity

When working with a raw index (not the default), searches can be made sensitive to character case and diacritics. How this happens is controlled by configuration variables and what search data is entered.

The general default is that searches entered without upper-case or accented characters are insensitive to case and diacritics. An entry of resume will match any of Resume, RESUME, résumé, Résumé etc.

Two configuration variables can automate switching on sensitivity:

autodiacsens

If this is set, search sensitivity to diacritics will be turned on as soon as an accented character exists in a search term. When the variable is set to true, resume will start a diacritics-unsensitive search, but résumé will be matched exactly. The default value is false.

autocasesens

If this is set, search sensitivity to character case will be turned on as soon as an upper-case character exists in a search term except for the first one. When the variable is set to true, us or Us will start a diacritics-unsensitive search, but US will be matched exactly. The default value is true (contrary to autodiacsens).

As usual, capitalizing the first letter of a word will turn off its stem expansion and have no effect on case-sensitivity.

You can also explicitly activate case and diacritics sensitivity by using modifiers with the query language. C will make the term case-sensitive, and D will make it diacritics-sensitive. Examples:

"us"C will search for the term us exactly (Us will not be a match).

"resume"D will search for the term resume exactly (résumé will not be a match).

When either case or diacritics sensitivity is activated, stem expansion is turned off. Having both does not make much sense.

3.10. Desktop integration

Being independent of the desktop type has its drawbacks: Recoll desktop integration is minimal. However there are a few tools available:

  • Users of recent Ubuntu-derived distributions, or any other Gnome desktop systems (e.g. Fedora) can install the Recoll GSSP (Gnome Shell Search Provider).

  • For KDE users, there is a KIO worker module, which was described in a previous section, and a Krunner plugin. Both are usually installed with the main Recoll package.

  • Hotkeying recoll: it is surprisingly convenient to be able to show or hide the Recoll GUI with a single keystroke. Recoll comes with a small Python script, based on the libwnck window manager interface library, which will allow you to do just this. The detailed instructions are on this wiki page.

Chapter 4. Programming interface

Recoll has an Application Programming Interface, usable both for indexing and searching, currently accessible from the Python language.

Another less radical way to extend the application is to write input handlers for new types of documents.

The processing of metadata attributes for documents (fields) is highly configurable.

4.1. Writing a document input handler

Terminology

The small programs or pieces of code which handle the processing of the different document types for Recoll used to be called filters, which is still reflected in the name of the directory which holds them and many configuration variables. They were named this way because one of their primary functions is to filter out the formatting directives and keep the text content. However these modules may have other behaviours, and the term input handler is now progressively substituted in the documentation. filter is still used in many places though.

Recoll input handlers cooperate to translate from the multitude of input document formats, simple ones as opendocument, acrobat, or compound ones such as Zip or Email, into the final Recoll indexing input format, which is plain text (in many cases the processing pipeline has an intermediary HTML step, which may be used for better previewing presentation). Most input handlers are executable programs or scripts. A few handlers are coded in C++ and live inside recollindex. This latter kind will not be described here.

There are two kinds of external executable input handlers:

  • Simple exec handlers run once and exit. They can be bare programs like antiword, or scripts using other programs. They are very simple to write, because they just need to print the converted document to the standard output. Their output can be plain text or HTML. HTML is usually preferred because it can store metadata fields and it allows preserving some of the formatting for the GUI preview. However, these handlers have limitations:

    • They can only process one document per file.

    • The output MIME type must be known and fixed.

    • For handlers producing text/plain, the character encoding must be known and fixed (or possibly just depending on location).

  • Multiple execm handlers can process multiple files (sparing the process startup time which can be very significant), or multiple documents per file (e.g.: for archives or multi-chapter publications). They communicate with the indexer through a simple protocol, but are nevertheless a bit more complicated than the older kind. Most of the new handlers are written in Python (exception: rclimg which is written in Perl because exiftool has no real Python equivalent). The Python handlers use common modules to factor out the boilerplate, which can make them very simple in favorable cases. The subdocuments output by these handlers can be directly indexable (text or HTML), or they can be other simple or compound documents that will need to be processed by another handler.

In both cases, handlers deal with regular file system files, and can process either a single document, or a linear list of documents in each file. Recoll is responsible for performing up to date checks, deal with more complex embedding, temporary files, and other upper level issues.

A simple handler returning a document in text/plain format, can transfer no metadata to the indexer. Generic metadata, like document size or modification date, will be gathered and stored by the indexer.

Handlers that produce text/html format can return an arbitrary amount of metadata inside HTML meta tags. These will be processed according to the directives found in the fields configuration file.

The handlers that can handle multiple documents per file return a single piece of data to identify each document inside the file. This piece of data, called an ipath will be sent back by Recoll to extract the document at query time, for previewing, or for creating a temporary file to be opened by a viewer. These handlers can also return metadata either as HTML meta tags, or as named data through the communication protocol.

The following section describes the simple handlers, and the next one gives a few explanations about the execm ones. You could conceivably write a simple handler with only the elements in the manual. This will not be the case for the other ones, for which you will have to look at the code.

4.1.1. Simple input handlers

Recoll simple handlers are usually shell-scripts, but this is in no way necessary. Extracting the text from the native format is the difficult part. Outputting the format expected by Recoll is trivial. Happily enough, most document formats have translators or text extractors which can be called from the handler. In some cases the output of the translating program is completely appropriate, and no intermediate shell-script is needed.

Input handlers are called with a single argument which is the source file name. They should output the result to stdout.

When writing a handler, you should decide if it will output plain text or HTML. Plain text is simpler, but you will not be able to add metadata or vary the output character encoding (this will be defined in a configuration file). Additionally, some formatting may be easier to preserve when previewing HTML. Actually the deciding factor is metadata: Recoll has a way to extract metadata from the HTML header and use it for field searches..

The RECOLL_FILTER_FORPREVIEW environment variable (values yes, no) tells the handler if the operation is for indexing or previewing. Some handlers use this to output a slightly different format, for example stripping uninteresting repeated keywords (e.g.: Subject: for email) when indexing. This is not essential.

You should look at one of the simple handlers, for example rclps for a starting point.

Don't forget to make your handler executable before testing !

4.1.2. "Multiple" handlers

If you can program and want to write an execm handler, it should not be too difficult to make sense of one of the existing handlers.

The best documentation of the communication "protocol" is found in the comments at the top of the internfile/mh_execm.h header file.

The existing handlers differ in the amount of helper code which they are using:

  • rclimg is written in Perl and handles the execm protocol all by itself (showing how trivial it is).

  • All the Python handlers share at least the rclexecm.py module, which handles the communication. Have a look at, for example, rclzip.py for a handler which uses rclexecm.py directly.

  • Most Python handlers which process single-document files by executing another command are further abstracted by using the rclexec1.py module. See for example rclrtf.py for a simple one, or rcldoc.py for a slightly more complicated one (possibly executing several commands).

  • Handlers which extract text from an XML document by using an XSLT style sheet are now executed inside recollindex, with only the style sheet stored in the filters/ directory. These can use a single style sheet (e.g. abiword.xsl), or two sheets for the data and metadata (e.g. opendoc-body.xsl and opendoc-meta.xsl). The mimeconf configuration file defines how the sheets are used, have a look. Before the C++ import, the xsl-based handlers used a common module rclgenxslt.py, it is still around but unused at the moment. The handler for OpenXML presentations is still the Python version because the format did not fit with what the C++ code does. It would be a good base for another similar issue.

There is a sample trivial handler based on rclexecm.py, with many comments, not actually used by Recoll. It would index a text file as one document per line. Look for rcltxtlines.py in the src/filters directory in the online Recoll Git repository (the sample not in the distributed release at the moment).

You can also have a look at the slightly more complex rclzip.py which uses Zip file paths as identifiers (ipath).

execm handlers sometimes need to make a choice for the nature of the ipath elements that they use in communication with the indexer. Here are a few guidelines:

  • Use ASCII or UTF-8 (if the identifier is an integer print it, for example, like printf %d would do).

  • If at all possible, the data should make some kind of sense when printed to a log file to help with debugging.

  • Recoll uses a colon (:) as a separator to store a complex path internally (for deeper embedding). Colons inside the ipath elements output by a handler will be escaped, but would be a bad choice as a handler-specific separator (mostly, again, for debugging issues).

In any case, the main goal is that it should be easy for the handler to extract the target document, given the file name and the ipath element.

execm handlers will also produce a document with a null ipath element. Depending on the type of document, this may have some associated data (e.g. the body of an email message), or none (typical for an archive file). If it is empty, this document will be useful anyway for some operations, as the parent of the actual data documents.

4.1.3. Telling Recoll about the handler

There are two elements that link a file to the handler which should process it: the association of file to MIME type and the association of a MIME type with a handler.

The association of files to MIME types is mostly based on name suffixes. The types are defined inside the mimemap file. Example:

.doc = application/msword

If no suffix association is found for the file name, recent Recoll will use libmagic. Older versions or specially built ones may try to execute a system command (typically file -i or xdg-mime).

The second element is the association of MIME types to handlers in the mimeconf file. A sample will probably be better than a long explanation:

[index]
application/msword = exec antiword -t -i 1 -m UTF-8;\
mimetype = text/plain ; charset=utf-8

application/ogg = exec rclogg

text/rtf = exec unrtf --nopict --html; charset=iso-8859-1; mimetype=text/html

application/x-chm = execm rclchm.py

The fragment specifies that:

  • application/msword files are processed by executing the antiword program, which outputs text/plain encoded in utf-8.

  • application/ogg files are processed by the rclogg script, with default output type (text/html, with encoding specified in the header, or utf-8 by default).

  • text/rtf is processed by unrtf, which outputs text/html. The iso-8859-1 encoding is specified because it is not the utf-8 default, and not output by unrtf in the HTML header section.

  • application/x-chm is processed by a persistent handler. This is determined by the execm keyword.

4.1.4. Input handler output

Both the simple and persistent input handlers can return any MIME type to Recoll, which will further process the data according to the MIME configuration.

Most input filters filters produce either text/plain or text/html data. There are exceptions, for example, filters which process archive file (zip, tar, etc.) will usually return the documents as they are found, without processing them further.

There is nothing to say about text/plain output, except that its character encoding should be consistent with what is specified in the mimeconf file.

For filters producing HTML, the output could be very minimal like the following example:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
  </head>
  <body>
    Some text content
  </body>
</html>

You should take care to escape some characters inside the text by transforming them into appropriate entities. At the very minimum, "&" should be transformed into "&amp;", "<" should be transformed into "&lt;". This is not always properly done by external helper programs which output HTML, and of course never by those which output plain text.

When encapsulating plain text in an HTML body, the display of a preview may be improved by enclosing the text inside <pre> tags.

The character set needs to be specified in the header. It does not need to be UTF-8 (Recoll will take care of translating it), but it must be accurate for good results.

Recoll will process meta tags inside the header as possible document fields candidates. Documents fields can be processed by the indexer in different ways, for searching or displaying inside query results. This is described in a following section.

By default, the indexer will process the standard header fields if they are present: title, meta/description, and meta/keywords are both indexed and stored for query-time display.

A predefined non-standard meta tag will also be processed by Recoll without further configuration: if a date tag is present and has the right format, it will be used as the document date (for display and sorting), in preference to the file modification date. The date format should be as follows:

<meta name="date" content="YYYY-mm-dd HH:MM:SS">

or

<meta name="date" content="YYYY-mm-ddTHH:MM:SS">

Example:

<meta name="date" content="2013-02-24 17:50:00">

Input handlers also have the possibility to "invent" field names. This should also be output as meta tags:

<meta name="somefield" content="Some textual data" />

You can embed HTML markup inside the content of custom fields, for improving the display inside result lists. In this case, add a (wildly non-standard) markup attribute to tell Recoll that the value is HTML and should not be escaped for display.

<meta name="somefield" markup="html" content="Some <i>textual</i> data" />

As written above, the processing of fields is described in a further section.

Persistent filters can use another, probably simpler, method to produce metadata, by calling the setfield() helper method. This avoids the necessity to produce HTML, and any issue with HTML quoting. See, for example, rclaudio.py in Recoll 1.23 and later for an example of handler which outputs text/plain and uses setfield() to produce metadata.

4.1.5. Page numbers

The indexer will interpret ^L characters in the handler output as indicating page breaks, and will record them. At query time, this allows starting a viewer on the right page for a hit or a snippet. Currently, only the PDF, Postscript and DVI handlers generate page breaks.

4.2. Field data processing

Fields are named pieces of information in or about documents, like title, author, abstract.

The field values for documents can appear in several ways during indexing: either output by input handlers as meta fields in the HTML header section, or extracted from file extended attributes, or added as attributes of the Doc object when using the API, or again synthetized internally by Recoll.

The Recoll query language allows searching for text in a specific field.

Recoll defines a number of default fields. Additional ones can be output by handlers, and described in the fields configuration file.

Fields can be:

  • indexed, meaning that their terms are separately stored in inverted lists (with a specific prefix), and that a field-specific search is possible.

  • stored, meaning that their value is recorded in the index data record for the document, and can be returned and displayed with search results.

A field can be either or both indexed and stored. This and other aspects of fields handling is defined inside the fields configuration file.

Some fields may also designated as supporting range queries, meaning that the results may be selected for an interval of its values. See the configuration section for more details.

The sequence of events for field processing is as follows:

  • During indexing, recollindex scans all meta fields in HTML documents (most document types are transformed into HTML at some point). It compares the name for each element to the configuration defining what should be done with fields (the fields file)

  • If the name for the meta element matches one for a field that should be indexed, the contents are processed and the terms are entered into the index with the prefix defined in the fields file.

  • If the name for the meta element matches one for a field that should be stored, the content of the element is stored with the document data record, from which it can be extracted and displayed at query time.

  • At query time, if a field search is performed, the index prefix is computed and the match is only performed against appropriately prefixed terms in the index.

  • At query time, the field can be displayed inside the result list by using the appropriate directive in the definition of the result list paragraph format. All fields are displayed on the fields screen of the preview window (which you can reach through the right-click menu). This is independent of the fact that the search which produced the results used the field or not.

You can find more information in the section about the fields file, or in comments inside the file.

You can also have a look at the example in the FAQs area, detailing how one could add a page count field to pdf documents for displaying inside result lists.

4.3. Python API

4.3.1. Introduction

The Recoll Python programming interface can be used both for searching and for creating/updating an index with a program run by the Python3 interpreter. It is available on all platforms (Unix-like systems, MS Windows, MacOS).

The search interface is used in a number of active projects: the Recoll Gnome Shell Search Provider, the Recoll Web UI, and the upmpdcli UPnP Media Server, in addition to many small scripts.

The index updating part of the API can be used to create and update Recoll indexes. Up to Recoll 1.37 these needed to use separate configurations (but could be queried in conjunction with the regular index). As of Recoll 1.37, an external indexer based on the Python extension can update the main index. For example the Recoll indexer for the Joplin notes application is using this method.

The search API is modeled along the Python database API version 2.0 specification (early versions used the version 1.0 spec).

The recoll package contains two modules:

  • The recoll module contains functions and classes used to query or update the index.

  • The rclextract module contains functions and classes used at query time to access document data. This can be used, for example, for extracting embedded documents into standalone files.

There is a good chance that your system repository has packages for the Recoll Python API, sometimes in a package separate from the main one (maybe named something like python3-recoll). Else refer to the Building from source chapter.

As an introduction sample, the following small program will run a query and list the title and url for each of the results. The python/samples source directory contains several examples of Python programming with Recoll, exercising the extension more completely, and especially its data extraction features.

#!/usr/bin/python3

from recoll import recoll

db = recoll.connect()
query = db.query()
nres = query.execute("some query")
results = query.fetchmany(20)
for doc in results:
    print("%s %s" % (doc.url, doc.title))

You can also take a look at the source for (in order of complexity) the Recoll Gnome Shell Search Provider or WebUI, and the upmpdcli local media server.

4.3.2. Interface elements

A few elements in the interface are specific and and need an explanation.

ipath

An ipath identifies an embedded document inside a standalone one (designated by an URL). The value, if needed, is stored along with the URL, but not indexed. It is accessible or set as a field in the Doc object.

ipaths are opaque values for the lower index layers (Doc objects producers or consumers), and their use is up to the specific indexer. For example, the Recoll file system indexer uses the ipath to store the part of the document access path internal to (possibly imbricated) container documents. ipath in this case is a vector of access elements (e.g, the first part could be a path inside a zip file to an archive member which happens to be an mbox file, the second element would be the message sequential number inside the mbox etc.). The index itself has no knowledge of this hierarchical structure.

At the moment, only the filesystem indexer uses hierarchical ipaths (neither the Web nor the Joplin one do), and there are some assumptions in the upper software layers about their structure. For example, the Recoll GUI knows about using an FS indexer ipath for such functions as opening the immediate parent of a given document.

url and ipath are returned in every search result and define the access to the original document. ipath is empty for top-level document/files (e.g. a PDF document which is a filesystem file).

udi

An udi (unique document identifier) identifies a document. Because of limitations inside the index engine, it is restricted in length (to 200 bytes). The structure and contents of the udi is defined by the application and opaque to the index engine. For example, the internal file system indexer uses the complete document path (file path + internal path), truncated to a maximum length, the suppressed part being replaced by a hash value to retain practical unicity.

To rephrase, and hopefully clarify: the filesystem indexer can't use the URL+ipath as a unique document-identifying term because this may be too big: it derives a shorter udi from URL+ipath. Another indexer could use a completely different method. For example, the Joplin indexer uses the note ID.

parent_udi

If this attribute is set on a document when entering it in the index, it designates its physical container document. In a multilevel hierarchy, this may not be the immediate parent. If the indexer uses the purge() method, then the use of parent_udi is mandatory for subdocuments. Else it is optional, but its use by an indexer may simplify index maintenance, as Recoll will automatically delete all children defined by parent_udi == udi when the document designated by udi is destroyed. e.g. if a Zip archive contains entries which are themselves containers, like mbox files, all the subdocuments inside the Zip file (mbox, messages, message attachments, etc.) would have the same parent_udi, matching the udi for the Zip file, and all would be destroyed when the Zip file (identified by its udi) is removed from the index.

Stored and indexed fields

The fields file inside the Recoll configuration defines which document fields are either indexed (searchable), stored (retrievable with search results), or both. Apart from a few standard/internal fields, only the stored fields are retrievable through the Python search interface.

4.3.3. Log messages for Python scripts

Two specific configuration variables: pyloglevel and pylogfilename allow overriding the generic values for Python programs. Set pyloglevel to 2 to suppress default startup messages (printed at level 3).

4.3.4. Python search interface

The recoll module

connect(confdir=None, extra_dbs=None, writable = False)

The connect() function connects to one or several Recoll index(es) and returns a Db object.

This call initializes the recoll module, and it should always be performed before any other call or object creation.

  • confdir designates the main index configuration directory. The usual system-dependant defaults apply if the value is empty.

  • extra_dbs is a list of additional external indexes (Xapian directories). These will be queried, but supply no configuration values.

  • writable decides if we can index new data through this connection.

Example:

from recoll import recoll

# Opening the default db            
db = recoll.connect()

# Opening the default db and a pair of additional indexes            
db = recoll.connect(extra_dbs=["/home/me/.someconfdir/xapiandb", "/data/otherconf/xapiandb"])
The Db class

A Db object is created by a connect() call and holds a connection to a Recoll index.

Db.query(), Db.cursor()

These (synonym) methods return a blank Query object for this index.

Db.getdoc(udi, idxidx=0)

Retrieve a document given its unique document identifier, and its index if external indexes are in use. The main index is always index 0. The udi value could have been obtained from an earlier query as doc.rcludi, or would be known because the application is the indexer and generates the values.

Db.termMatch(match_type, expr, field='', maxlen=-1, casesens=False, diacsens=False, lang='english')

Expand an expression against the index term list. Performs the basic function from the GUI term explorer tool. match_type can be one of wildcard, regexp or stem. field, if set, restricts the matches to the contents of the specified metadata field. Returns a list of terms expanded from the input expression.

Db.setAbstractParams(maxchars, contextwords)

Set the parameters used to build snippets (sets of keywords in context text fragments). maxchars defines the maximum total size of the abstract. contextwords defines how many terms are shown around the keyword.

Db.close()

Closes the connection. You can't do anything with the Db object after this. If the index was opened as writable, this commits any pending change.

Db.setSynonymsFile(path)

Set the synonyms file used when querying.

The Query class

A Query object (equivalent to a cursor in the Python DB API) is created by a Db.query() call. It is used to execute index searches.

Query.sortby(fieldname, ascending=True)

Set the sorting order for future searches to using fieldname, in ascending or descending order. Must be called before executing the search.

Query.execute(query_string, stemming=1, stemlang="english", fetchtext=False, collapseduplicates=False)

Start a search for query_string, a Recoll search language string. If the index stores the documents texts and fetchtext is True, the Doc objects in the query result will store the document extracted text in doc.text. Else, the doc.text fields will be empty. If collapseduplicates is true, only one of multiple identical documents (defined by having the same MD5 hash) will appear in the result list.

Query.executesd(SearchData, fetchtext=False, collapseduplicates=False)

Starts a search for the query defined by the SearchData object. See above for a description of the other parameters.

Query.fetchmany(size=query.arraysize)

Fetch the next Doc objects from the current search result list, and return them as an array of the required size, which is by default the value of the arraysize data member.

Query.fetchone()

Fetch the next Doc object from the current search result list. Generates a StopIteration exception if there are no results left.

Query.__iter__() and Query.next()

So that things like for doc in query: will work. Example:

from recoll import recoll

db = recoll.connect()
q = db.query()
nres = q.execute("some query")
for doc in q:
    print("%s" % doc.title)
              
Query.close()

Close the query. The object is unusable after the call.

Query.scroll(value, mode='relative')

Adjust the position in the current result set. mode can be relative or absolute.

Query.getgroups()

Retrieve the expanded query terms as a list of pairs. Meaningful only after executexx In each pair, the first entry is a list of user terms (of size one for simple terms, or more for group and phrase clauses), the second a list of query terms derived from the user terms and used in the Xapian Query.

Query.getxquery()

Return the Xapian query description as a Unicode string. Meaningful only after executexx.

Query.highlight(text, ishtml = 0, methods = object)

Will insert <span "class=rclmatch">, and </span> tags around the match areas in the input text and return the modified text. ishtml can be set to indicate that the input text is HTML and that HTML special characters should not be escaped. methods, if set, should be an object having methods startMatch(i) and endMatch() which will be called for each match and should return a begin and end tag. Example:

class MyHighlighter:
    def startMatch(self, idx):
        return "<span style='color:red;background:yellow;'>"
    def endMatch(self):
        return "</span>"
Query.makedocabstract(doc, methods = object))

Create a snippets abstract for doc (a Doc object) by selecting text around the match terms. If methods is set, will also perform highlighting. See the highlight() method.

Query.getsnippets(doc, maxoccs = -1, ctxwords = -1, sortbypage=False, methods=object)

Return a list of extracts from the result document by selecting text around the match terms. Each entry in the result list is a triple: page number, term, text. By default, the most relevants snippets appear first in the list. Set sortbypage to sort by page number instead. If methods is set, the fragments will be highlighted (see the highlight() method). If maxoccs is set, it defines the maximum result list length. ctxwords allows adjusting the individual snippet context size.

Query.arraysize

(r/w). Default number of records processed by fetchmany().

Query.rowcount

Number of records returned by the last execute.

Query.rownumber

Next index to be fetched from results. Normally increments after each fetchone() call, but can be set/reset before the call to effect seeking (equivalent to using scroll()). Starts at 0.

The Doc class

A Doc object contains index data for a given document. The data is extracted from the index when searching, or set by the indexer program when updating.

Please note that a Doc should never be instanciated by its constructor but instead by calling db.doc() or some other API method returning a doc object. Otherwise, the object will lack some necessary references.

The Doc object has many attributes to be read or set by its user. It mostly matches the Rcl::Doc C++ object. Some of the attributes are predefined, but, especially when indexing, others can be set, the name of which will be processed as field names by the indexing configuration. Inputs can be specified as Unicode or strings. Outputs are Unicode objects. All dates are specified as Unix timestamps, printed as strings. Please refer to the rcldb/rcldoc.cpp C++ file for a full description of the predefined attributes. Here follows a short list.

  • url the document URL but see also getbinurl()

  • ipath the document ipath for embedded documents.

  • fbytes, dbytes the document file and text sizes.

  • fmtime, dmtime the document file and document times.

  • xdocid the document Xapian document ID. This is useful if you want to access the document through a direct Xapian operation.

  • mtype the document MIME type.

  • text holds the document processed text, if the index itself is configured to store it (true by default) and if the fetchtext query execute() option was true. See also the rclextract module for accessing document contents.

  • Other fields stored by default: author, filename, keywords, recipient

At query time, only the fields that are defined as stored either by default or in the fields configuration file will be meaningful in the Doc object.

get(key), [] operator

Retrieve the named document attribute. You can also use getattr(doc, key) or doc.key.

doc.key = value

Set the the named document attribute. You can also use setattr(doc, key, value).

getbinurl()

Retrieve the URL in byte array format (no transcoding), for use as parameter to a system call. This is useful for the filesystem indexer file:// URLs which are stored unencoded, as binary data.

setbinurl(url)

Set the URL in byte array format (no transcoding).

items()

Return a dictionary of doc object keys/values

keys()

list of doc object keys (attribute names).

The SearchData class

A SearchData object allows building a query by combining clauses, for execution by Query.executesd(). It can be used in replacement of the query language approach. The interface is going to change a little, so no detailed doc for now...

addclause(type='and'|'or'|'excl'|'phrase'|'near'|'sub', qstring=string, slack=0, field='', stemming=1, subSearch=SearchData)

The rclextract module

Prior to Recoll 1.25, index queries could not provide document content because it was never stored. Recoll 1.25 and later usually store the document text, which can be optionally retrieved when running a query (see query.execute() above - the result is always plain text).

Independantly, the rclextract module can give access to the original document and to the document text content, possibly as an HTML version. Accessing the original document is particularly useful if it is embedded (e.g. an email attachment).

You need to import the recoll module before the rclextract module.

The Extractor class
Extractor(doc)

An Extractor object is built from a Doc object, output from a query.

Extractor.textextract(ipath)

Extract document defined by ipath and return a Doc object. The doc.text field has the document text converted to either text/plain or text/html according to doc.mimetype. The typical use would be as follows:

from recoll import recoll, rclextract

qdoc = query.fetchone()
extractor = rclextract.Extractor(qdoc)
doc = extractor.textextract(qdoc.ipath)
# use doc.text, e.g. for previewing

Passing qdoc.ipath to textextract() is redundant, but reflects the fact that the Extractor object actually has the capability to access the other entries in a compound document.

Extractor.idoctofile(ipath, targetmtype, outfile='')

Extracts document into an output file, which can be given explicitly or will be created as a temporary file to be deleted by the caller. Typical use:

from recoll import recoll, rclextract

qdoc = query.fetchone()
extractor = rclextract.Extractor(qdoc)
filename = extractor.idoctofile(qdoc.ipath, qdoc.mimetype)

In all cases the output is a copy, even if the requested document is a regular system file, which may be wasteful in some cases. If you want to avoid this, you can test for a simple file document as follows:

not doc.ipath and (not "rclbes" in doc.keys() or doc["rclbes"] == "FS")

Search API usage example

The following sample would query the index with a user language string. See the python/samples directory inside the Recoll source for other examples. The recollgui subdirectory has a very embryonic GUI which demonstrates the highlighting and data extraction functions.

#!/usr/bin/python3

from recoll import recoll

db = recoll.connect()
db.setAbstractParams(maxchars=80, contextwords=4)

query = db.query()
nres = query.execute("some user question")
print("Result count: %d" % nres)
if nres > 5:
    nres = 5
for i in range(nres):
    doc = query.fetchone()
    print("Result #%d" % (query.rownumber))
    for k in ("title", "size"):
        print("%s : %s" % (k, getattr(doc, k)))
    print("%s\n" % db.makeDocAbstract(doc, query))

The fsudi module

The fsudi module contains a single method, which duplicates the code used by the main filesystem indexer to derive an UDI from a filesystem path. In turn, this allows external code to call the getDoc() method to retrieve the Doc object. This can be useful, for example, for updating the metadata without fully reindexing the document.

fsudi.fs_udi(path, ipath='')

Obtain the UDI value for the given path and ipath. The returned value can be used with the db.getDoc() method.

4.3.5. Python indexing interface

Recoll external indexers

The Recoll indexer is capable of processing many different document formats. However, some forms of data storage do not lend themselves easily to standard processing because of their great variability. A canonical example would be data in an SQL database. While it might be possible to create a configurable handler to process data from a database, the many variations in storage organisation and SQL dialects make this difficult.

Recoll can instead support external indexers where all the responsibility to handle the data format is delegated to an external script. The script language has to be Python 3 at the moment, because this is the only language for which an API binding exists.

Up to Recoll 1.35, such an indexer had to work on a separate Recoll index, which would be added as an external index for querying from the main one, and for which a separate indexing schedule had to be managed. The reason was that the main document indexer purge pass (removal of deleted documents) would also remove all the documents belonging to the external indexer, as they were not seen during the filesystem walk (and conversely, the external indexer purge pass would delete all the regular document entries).

As of Recoll 1.36, an improvement and new API call allows external indexers to be fully integrated, and work on the main index, with updates triggered from the normal recollindex program.

An external indexer has to do the same work as the Recoll file system indexer: look for modified documents, extract their text, call the API for indexing them, and the one for purging the data for deleted documents.

A description of the API method follows, but you can also jump ahead for a look at some sample pseudo-code and a pair of actual implementations, one of which does something useful.

The Python indexing API

There are two parts in the indexing interface:

  • Methods inside the recoll module allow the foreign indexer to update the index.

  • An interface based on scripts execution is defined for executing the indexer (from recollindex) and to allow either the GUI or the rclextract module to access original document data for previewing or editing.

Two sample scripts are included with the Recoll source and described in more detail a bit further.

Python indexing interface methods

The update methods are part of the recoll module. The connect() method is used with a writable=true parameter to obtain a writable Db object. The following Db object methods are then available.

Note that the changes are only guaranteed to be flushed to the index when db.close() is called. This normally occurs when the program exits, but it is much safer to use an explicit call after making the changes.

addOrUpdate(udi, doc, parent_udi=None, metaonly=False)

Add or update index data for a given document.

The udi string must define a unique id for the document. It is an opaque interface element and not interpreted inside the lower level Recoll code.

doc is a Doc object, containing the data to be indexed.

If parent_udi is set, this is a unique identifier for the top-level container, the document for which needUpdate() would be called (e.g. for the filesystem indexer, this would be the one which is an actual file).

If metaonly is set, the main document text (in the doc.text attribute) will be ignored and only the other metadata fields present in the doc object will be processed. This can be useful for updating the metadata apart from the main text.

Document attributes: doc.text should have the main text. It is ignored if metaonly is set. For actual indexing (metaonly not set), the url and possibly ipath fields should also be set to allow access to the actual document after a query. Other fields may also need to be set by an external indexer see the description further down: rclbes, sig, mimetype. Of course, any standard or custom Recoll field can also be added.

delete(udi)

Purge the index from all data for udi, and all documents (if any) which have udi as parent_udi.

needUpdate(udi, sig)

Test if the index needs to be updated for the document identified by udi. If this call is to be used, the doc.sig field should contain a signature value when calling addOrUpdate(). The needUpdate() call then compares its parameter value with the stored sig for udi. sig is an opaque value, compared as a string.

The filesystem indexer uses a concatenation of the decimal string values for file size and update time, but a hash of the contents could also be used.

As a side effect, if the return value is false (the index is up to date), the call will set the existence flag for the document (and any subdocument defined by its parent_udi), so that a later purge() call will preserve them.

The use of needUpdate() and purge() is optional, and the indexer may use another method for checking the need to reindex or to delete stale entries.

preparePurge(backend_name)

Mark all documents which do *not* belong to backend_name as existing. backend_name is the value chosen for the rclbes field for the indexer documents (e.g. "MBOX", "JOPLIN"... for the samples). This is a mandatory call before starting an update if the index is shared with other backends and you are going to call purge() after the update, else all documents for other backends will be deleted from the index by the purge.

purge()

Delete all documents that were not touched during the just finished indexing pass (since preparePurge()). These are the documents for which the needUpdate() call was not performed, indicating that they no longer exist in the storage system.

createStemDbs(lang|sequence of langs)

Create stemming dictionaries for query stemming expansion. Note that this is not needed at all if the indexing is done from the recollindex program, as it will perform this action after calling all the external indexers. Should be called when done updating the index. Available only after Recoll 1.34.3. As an alternative, you can close the index and execute:

recollindex -c <confdir> -s <lang(s)>

The Python module currently has no interface to the Aspell speller functions, so the same approach can be used for creating the spelling dictionary (with option -S) (again, not needed if recollindex is driving the indexing).

Query data access for external indexers

Recoll has internal methods to access document data for its internal (filesystem) indexer. An external indexer needs to provide data access methods if it needs integration with the GUI (e.g. preview function), or support for the rclextract module.

An external indexer needs to provide two commands, for fetching data (typically for previewing) and for computing the document signature (for up-to-date checks when opening or previewing). The sample MBOX and JOPLIN implementations use the same script with different parameters to perform both operations, but this is just a choice. A third command must be provided for performing the indexing proper.

The "fetch" and "makesig" scripts are called with three additional arguments: udi, url, ipath. These were set by the indexer and stored with the document by the addOrUpdate() call described above. Not all arguments are needed in all cases, the script will use what it needs to perform the requested operation. The caller expects the result data on stdout.

recollindex will set the RECOLL_CONFDIR environment variable when executing the scripts, so that the configuration can be created as

rclconf = rclconfig.RclConfig()

if needed, and the configuration directory obtained as

confdir = rclconf.getConfDir()

External indexers configuration

The index data and the access method are linked by the rclbes (recoll backend storage) Doc field. You should set this to a short string value identifying your indexer (e.g. the filesystem indexer uses either FS or an empty value, the Web history indexer uses BGL, the Joplin notes indexer uses JOPLIN).

The link is actually performed inside a backends configuration file (stored in the configuration directory). This defines commands to execute to access data from the specified indexer. Example, for the mbox indexing sample found in the Recoll source (which sets rclbes="MBOX"):

[MBOX]
fetch = /path/to/recoll/src/python/samples/rclmbox.py fetch
makesig = /path/to/recoll/src/python/samples/rclmbox.py makesig
index = /path/to/recoll/src/python/samples/rclmbox.py index

When updating the index, the recollindex will execute the value of the the index parameter, if present (it may not be present if this concerns an external index).

If an external indexer needs to store additional configuration parameters, e.g. path to a specific instance of the indexed application, etc., I suggest storing them inside recoll.conf, with a backend-specific prefix (e.g. joplin_db, mbox_directory) and using methods from the rclconfig module to access them.

External indexer samples

First a quick look at an indexer main part, using pseudo-Python3 code:

# Connect to the recoll index. This will use the RECOLL_CONFDIR variable, set
# by the parent recollindex process, to use the right index.
rcldb = recoll.connect(writable=1)

# Important: tell the Recoll db that we are going to update documents for the
# MYBACK backend. All other documents will be marked as present so as
# not to be affect by the subsequent purge.
rcldb.preparePurge("MYBACK")

# Walk your dataset (of course your code will not look like this)
for mydoc in mydoclist:
    # Compute the doc unique identifier and the signature corresponding to its update state
    # (e.g. mtime and size for a file).
    udi = mydoc.udi()
    sig = mydoc.sig()
    # Check with recoll if the document needs updating. This has the side-effect or marking
    # it present.
    if not rcldb.needUpdate(udi, sig):
        continue
    # The document data does not exist in the index or needs updating. Create and add a Recoll
    # Doc object
    doc = recoll.Doc()
    doc.mimetype = "some/type"
    # Say that the document belongs to this indexer
    doc.rclbes = "MYBACK"
    # The url will be passed back to you along with the udi if the fetch
    # method is called later (for previewing), or may be used for opening the document with
    # its native app from Recoll. The udi has a maximum size because it is used as a Xapian
    # term. The url has no such limitation.
    doc.url = "someurl"
    doc.sig = sig
    # Of course add other fields like "text" (duh), "author" etc. See the samples.
    doc.text = mydoc.text()
    # [...]
    # Then add or update the data in the index.
    self.db.addOrUpdate(udi, doc)

# Finally call purge to delete the data for documents which were not seen at all.
db.purge()

The Recoll source tree has two samples of external indexers.

  • rclmbox.py indexes a directory containing mbox folder files. Of course it is not really useful because Recoll can do this by itself, but it exercises most features in the update interface, and it has both top-level and embedded documents so it demonstrates the uses of the ipath values.

  • rcljoplin.py indexes a Joplin application main notes SQL table. Joplin sets an an update date attribute for each record in the table, so each note record can be processed as a standalone document (no ipath necessary). The sample has full preview and open support (the latter using a Joplin callback URL which allows displaying the result note inside the native app), so it could actually be useful to perform a unified search of the Joplin data and the regular Recoll data. As of Recoll 1.37.0, the Joplin indexer is part of the default installation (see the features section of the Web site for more information).

See the comments inside the scripts for more information.

Using an external indexer index in conjunction with a regular one

When adding an external indexer to a regular one for unified querying, some elements of the foreign index configuration should be copied or merged into the main index configuration. At the very least, the backends file needs to be copied or merged, and also possibly data from the mimeconf and mimeview files. See the rcljoplin.py sample for an example.

Chapter 5. Configuration

5.1. Settings, configuration overview

Recoll has two kinds of configuration parameters:

  • GUI settings are global and always set through the GUI configuration Preferences menu entry.

  • Index configuration parameters are set per index, and stored in each index configuration directory. Many can be set either through the GUI or by editing a text configuration file, but some less common values can only be set by editing.

GUI settings

For reference, the GUI settings are stored in $HOME/.config/Recoll.org/recoll.conf on Unix-like systems and C:/Users/[you]/AppData/Roaming/Recoll/recoll.ini on Windows.

Index configuration parameters

The parameters for each Recoll index are set inside text configuration files located in a configuration directory. There can be several such directories, each of which defines the parameters for one index.

There is a default index configuration directory, used when not specified otherwise. On Unix-like systems it is located in $HOME/.recoll. Under Windows, it is located in C:\Users\[you]\AppData\Local\Recoll.

The configuration files can be edited with a plain text editor or through the Index configuration dialog (Preferences menu). The GUI tool will try to preserve your formatting and comments as much as possible, so it is quite possible to use both approaches on the same configuration.

For each index, there are actually at least two sets of configuration files. The parameters set in the locations listed above override or complement system-wide configuration files which come with the installation and are kept in a directory named like /usr/share/recoll/examples on Unix-like systems (or an equivalent on other systems), and define default values, shared by all indexes (the values in these files are often commented out, and just present to indicate the default coded in the program).

The local configuration directory only stores additional or overriding parameters. The defaults are stored in the central location. You should never edit the central files as they will be overwritten by a software update.

The location for the index configuration directory can be changed, or others can be added for separate indexes with the RECOLL_CONFDIR environment variable or the -c option parameter to recoll and recollindex.

Special use: in addition, for each index, it is possible to specify two additional configuration directories which will be stacked before and after the user configuration directory. These are defined by the RECOLL_CONFTOP and RECOLL_CONFMID environment variables. Values from configuration files inside the top directory will override user ones, values from configuration files inside the middle directory will override system ones and be overridden by user ones. These two variables may be of use to applications which augment Recoll functionality, and need to add configuration data without disturbing the user's files. Please note that the two, currently single, values will probably be interpreted as colon-separated lists in the future: do not use colon characters inside the directory paths.

If the default configuration directory does not exist when either recoll or recollindex is started, it will be created with a set of empty configuration files. recoll will give you a chance to edit the configuration file before starting indexing. recollindex will proceed immediately. To avoid mistakes, the automatic directory creation will only occur for the default location, not if -c or RECOLL_CONFDIR were used, in which case, you will have to create the directory.

All configuration files share the same format. For example, a short extract of the main configuration file might look as follows:

# Space-separated list of files and directories to index.
topdirs =  ~/docs /usr/share/doc

[~/somedirectory-with-utf8-txt-files]
defaultcharset = utf-8

There are three kinds of lines:

  • Comments: start with a hash mark #.

  • Parameter assignments: name = value.

  • Section definitions: [somedirname].

Lines which are empty or only containing white space are ignored.

Long lines can be broken by ending each incomplete part with a backslash (\).

Depending on the type of configuration file, section definitions either separate groups of parameters or allow redefining some parameters for a directory sub-tree. They stay in effect until another section definition, or the end of file, is encountered. Some of the parameters used for indexing are looked up hierarchically from the current directory location upwards. Not all parameters can be meaningfully redefined, this is specified for each in the next section.

Important

Global parameters must not be defined in a directory subsection, else they will not be found at all by the Recoll code, which looks for them at the top level (e.g. skippedPaths).

When found at the beginning of a file path, the tilde character (~) is expanded to the name of the user's home directory, as a shell would do. The same convention is used on Windows.

Some parameters are lists of strings. White space is used for separation. List elements with embedded spaces can be quoted using double-quotes. Double quotes inside these elements can be escaped with a backslash.

No value inside a configuration file can contain a newline character. Long lines can be continued by escaping the physical newline with backslash, even inside quoted strings.

          astringlist =  "some string \
          with spaces"
          thesame = "some string with spaces"

Parameters which are not part of string lists can't be quoted, and leading and trailing space characters are stripped before the value is used.

Important

Quotes processing is ONLY applied to parameter values which are lists. Double quoting a single value like, e.g. dbdir will result in an incorrect value, with quotes included. This is quite confusing, and was a design mistake but it is much too late to fix.

Encoding issues.  Most of the configuration parameters are plain ASCII. Two particular sets of values may cause encoding issues:

  • File path parameters may contain non-ASCII characters and should use the exact same byte values as found in the file system directory. Usually, this means that the configuration file should use the system default locale encoding.

  • The unac_except_trans parameter (meaning unaccenting exception translations) should be encoded in UTF-8. If your system locale is not UTF-8 (which is now very rare), and you need to also specify non-ASCII file paths, this poses a difficulty because common text editors cannot handle multiple encodings in a single file. In this relatively unlikely case, you can edit the configuration file as two separate text files with appropriate encodings, and concatenate them to create the complete configuration.

5.2. Environment variables

RECOLL_CONFDIR

Defines the main configuration directory.

RECOLL_TMPDIR, TMPDIR

Locations for temporary files, in this order of priority. The default if none of these is set is to use /tmp. Big temporary files may be created during indexing, mostly for decompressing, and also for processing, e.g. email attachments.

RECOLL_CONFTOP, RECOLL_CONFMID

Allow adding configuration directories with priorities below and above the user directory (see above the Configuration overview section for details).

RECOLL_EXTRA_DBS, RECOLL_ACTIVE_EXTRA_DBS

Help for setting up external indexes. See this paragraph for explanations.

RECOLL_DATADIR

Defines replacement for the default location of Recoll data files, normally found in, e.g., /usr/share/recoll).

RECOLL_FILTERSDIR

Defines replacement for the default location of Recoll filters, normally found in, e.g., /usr/share/recoll/filters).

ASPELL_PROG

aspell program to use for creating the spelling dictionary. The result has to be compatible with the libaspell which Recoll is using.

5.3. Recoll main configuration file, recoll.conf

5.3.1. Parameters affecting what documents we index

topdirs

Space-separated list of files or directories to recursively index. You can use symbolic links in the list, they will be followed, independently of the value of the followLinks variable. The default value is ~ : recursively index the user home folder.

monitordirs

Space-separated list of files or directories to monitor for updates. When running the real-time indexer, this allows monitoring only a subset of the whole indexed area. The elements must be included in the tree defined by the 'topdirs' members.

skippedNames

File and directory names which should be ignored. White space separated list of wildcard patterns (simple ones, not paths, must contain no '/' characters), which will be tested against file and directory names.

Have a look at the default configuration for the initial value, some entries may not suit your situation. The easiest way to see it is through the GUI Index configuration "local parameters" panel.

The list in the default configuration does not exclude hidden directories (names beginning with a dot), which means that it may index quite a few things that you do not want. On the other hand, email user agents like Thunderbird usually store messages in hidden directories, and you probably want this indexed. One possible solution is to have ".*" in "skippedNames", and add things like "~/.thunderbird" "~/.evolution" to "topdirs".

Not even the file names are indexed for patterns in this list, see the "noContentSuffixes" variable for an alternative approach which indexes the file names. Can be redefined for any subtree.

skippedNames-

List of name patterns to remove from the default skippedNames list. Allows modifying the list in the local configuration without copying it.

skippedNames+

List of name patterns to add to the default skippedNames list. Allows modifying the list in the local configuration without copying it.

onlyNames

Regular file name filter patterns. This is normally empty. If set, only the file names not in skippedNames and matching one of the patterns will be considered for indexing. Can be redefined per subtree. Does not apply to directories.

noContentSuffixes

List of name endings (not necessarily dot-separated suffixes) for which we don't try MIME type identification, and don't uncompress or index content. Only the names will be indexed. This complements the now obsoleted recoll_noindex list from the mimemap file, which will go away in a future release (the move from mimemap to recoll.conf allows editing the list through the GUI). This is different from skippedNames because these are name ending matches only (not wildcard patterns), and the file name itself gets indexed normally. This can be redefined for subdirectories.

noContentSuffixes-

List of name endings to remove from the default noContentSuffixes list.

noContentSuffixes+

List of name endings to add to the default noContentSuffixes list.

skippedPaths

Absolute paths we should not go into. Space-separated list of wildcard expressions for absolute filesystem paths (for files or directories). The variable must be defined at the top level of the configuration file, not in a subsection.

Any value in the list must be textually consistent with the values in topdirs, no attempts are made to resolve symbolic links. In practise, if, as is frequently the case, /home is a link to /usr/home, your default topdirs will have a single entry "~" which will be translated to "/home/yourlogin". In this case, any skippedPaths entry should start with "/home/yourlogin" *not* with "/usr/home/yourlogin".

The index and configuration directories will automatically be added to the list.

The expressions are matched using "fnmatch(3)" with the FNM_PATHNAME flag set by default. This means that "/" characters must be matched explicitly. You can set "skippedPathsFnmPathname" to 0 to disable the use of FNM_PATHNAME (meaning that "/*/dir3" will match "/dir1/dir2/dir3").

The default value contains the usual mount point for removable media to remind you that it is in most cases a bad idea to have Recoll work on these. Explicitly adding "/media/xxx" to the "topdirs" variable will override this.

skippedPathsFnmPathname

Set to 0 to override use of FNM_PATHNAME for matching skipped paths.

nowalkfn

File name which will cause its parent directory to be skipped. Any directory containing a file with this name will be skipped as if it was part of the skippedPaths list. Ex: .recoll-noindex

daemSkippedPaths

skippedPaths equivalent specific to real time indexing. This enables having parts of the tree which are initially indexed but not monitored. If daemSkippedPaths is not set, the daemon uses skippedPaths.

followLinks

Follow symbolic links during indexing. The default is to ignore symbolic links to avoid multiple indexing of linked files. No effort is made to avoid duplication when this option is set to true. This option can be set individually for each of the "topdirs" members by using sections. It can not be changed below the "topdirs" level. Links in the "topdirs" list itself are always followed.

indexedmimetypes

Restrictive list of indexed MIME types. Normally not set (in which case all supported types are indexed). If it is set, only the types from the list will have their contents indexed. The names will be indexed anyway if indexallfilenames is set (default). MIME type names should be taken from the mimemap file (the values may be different from xdg-mime or file -i output in some cases). Can be redefined for subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values.

excludedmimetypes

List of excluded MIME types. Lets you exclude some types from indexing. MIME type names should be taken from the mimemap file (the values may be different from xdg-mime or file -i output in some cases) Can be redefined for subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values.

nomd5types

MIME types for which we don't compute a md5 hash. md5 checksums are used only for deduplicating results, and can be very expensive to compute on multimedia or other big files. This list lets you turn off md5 computation for selected types. It is global (no redefinition for subtrees). At the moment, it only has an effect for external handlers (exec and execm). The file types can be specified by listing either MIME types (e.g. audio/mpeg) or handler names (e.g. rclaudio.py).

compressedfilemaxkbs

Size limit for compressed files. We need to decompress these in a temporary directory for identification, which can be wasteful in some cases. Limit the waste. Negative means no limit. 0 results in no processing of any compressed file. Default 100 MB. This does *not* concern archives like zip or rar files, but only single, e.g. gzipped, files.

textfilemaxmbs

Size limit for text files. Mostly for skipping monster logs. Also used for max mail msg body size. Default 20 MB. Use a value of -1 to disable.

textfilepagekbs

Page size for text files. If this is set, text/plain files will be divided into documents of approximately this size. This will reduce memory usage at index time and help with loading data in the preview window at query time. Particularly useful with very big files, such as application or system logs. Also see textfilemaxmbs and compressedfilemaxkbs.

textunknownasplain

Process unknown text/xxx files as text/plain Allows indexing misc. text files identified as text/whatever by "file" or "xdg-mime" without having to explicitely set config entries for them. This works fine for indexing (also will cause processing of a lot of useless files), but the documents indexed this way will be opened by the desktop viewer, even if text/plain has a specific editor.

indexallfilenames

Index the file names of unprocessed files. Index the names of files the contents of which we don't index because of an excluded or unsupported MIME type.

usesystemfilecommand

Use a system mechanism as last resort to guess a MIME type. Depending on platform and version, a compile-time configuration will decide if this actually executes a command or uses libmagic. This last-resort identification (if the suffix-based one failed) is generally useful, but will cause the indexing of many bogus extension-less "text" files. Also see "systemfilecommand".

systemfilecommand

Command to use for guessing the MIME type if the internal methods fail. This is ignored on Windows or with Recoll 1.38+ if compiled with libmagic enabled (the default). Otherwise, this should be a "file -i" workalike. The file path will be added as a last parameter to the command line. "xdg-mime" works better than the traditional "file" command, and is now the configured default (with a hard-coded fallback to "file")

processwebqueue

Decide if we process the Web queue. The queue is a directory where the Recoll Web browser plugins create the copies of visited pages.

membermaxkbs

Size limit for archive members. This is passed to the MIME handlers in the environment as RECOLL_FILTER_MAXMEMBERKB.

5.3.2. Parameters affecting how we generate terms and organize the index

indexStripChars

Decide if we store character case and diacritics in the index. If we do, searches sensitive to case and diacritics can be performed, but the index will be bigger, and some marginal weirdness may sometimes occur. The default is a stripped index. When using multiple indexes for a search, this parameter must be defined identically for all. Changing the value implies an index reset.

indexStoreDocText

Decide if we store the documents' text content in the index. Storing the text allows extracting snippets from it at query time, instead of building them from index position data.

Newer Xapian index formats have rendered our use of positions list unacceptably slow in some cases. The last Xapian index format with good performance for the old method is Chert, which is default for 1.2, still supported but not default in 1.4 and will be dropped in 1.6.

The stored document text is translated from its original format to UTF-8 plain text, but not stripped of upper-case, diacritics, or punctuation signs. Storing it increases the index size by 10-20% typically, but also allows for nicer snippets, so it may be worth enabling it even if not strictly needed for performance if you can afford the space.

The variable only has an effect when creating an index, meaning that the xapiandb directory must not exist yet. Its exact effect depends on the Xapian version.

For Xapian 1.4, if the variable is set to 0, we used to use the Chert format and not store the text. If the variable was 1, Glass was used, and the text stored. We don't do this any more: storing the text has proved to be the much better option, and dropping this possibility simplifies the code.

So now, the index format for a new index is always the default, but the variable still controls if the text is stored or not, and the abstract generation method. With Xapian 1.4 and later, and the variable set to 0, abstract generation may be very slow, but this setting may still be useful to save space if you do not use abstract generation at all, by using the appropriate setting in the GUI, and/or avoiding the Python API or recollq options which would trigger it.

nonumbers

Decides if terms will be generated for numbers. For example "123", "1.5e6", 192.168.1.4, would not be indexed if nonumbers is set ("value123" would still be). Numbers are often quite interesting to search for, and this should probably not be set except for special situations, ie, scientific documents with huge amounts of numbers in them, where setting nonumbers will reduce the index size. This can only be set for a whole index, not for a subtree.

notermpositions

Do not store term positions. Term positions allow for phrase and proximity searches, but make the index much bigger. In some special circumstances, you may want to dispense with them.

dehyphenate

Determines if we index "coworker" also when the input is "co-worker". This is new in version 1.22, and on by default. Setting the variable to off allows restoring the previous behaviour.

indexedpunctuation

String of UTF-8 punctuation characters to be indexed as words. The resulting terms will then be searchable and, for example, by setting the parameter to "%€" (without the double quotes), you would be able to search separately for "100%" or "100€" Note that "100%" or "100 %" would be indexed in the same way, the characters are their own word separators.

backslashasletter

Process backslash as a normal letter. This may make sense for people wanting to index TeX commands as such but is not of much general use.

underscoreasletter

Process underscore as normal letter. This makes sense in so many cases that one wonders if it should not be the default.

maxtermlength

Maximum term length in Unicode characters. Words longer than this will be discarded. The default is 40 and used to be hard-coded, but it can now be adjusted. You may need an index reset if you change the value.

maxdbdatarecordkbs

Maximum binary size of a Xapian document data record. The data record holds "stored" document metadata fields. A very big size usually indicates a document parse error. Xapian has a hard limit of around 100MB for this.

maxdbstoredtextmbs

Maximum binary size of a document stored text. Xapian has a hard limit of around 100MB for the compressed value, but our limit is before compression, so there may be some wiggle room.

nocjk

Decides if specific East Asian (Chinese Korean Japanese) characters/word splitting is turned off. This will save a small amount of CPU if you have no CJK documents. If your document base does include such text but you are not interested in searching it, setting nocjk may be a significant time and space saver.

cjkngramlen

This lets you adjust the size of n-grams used for indexing CJK text. The default value of 2 is probably appropriate in most cases. A value of 3 would allow more precision and efficiency on longer words, but the index will be approximately twice as large.

hangultagger

External tokenizer for Korean Hangul. This allows using an language specific processor for extracting terms from Korean text, instead of the generic n-gram term generator. See https://www.recoll.org/pages/recoll-korean.html for instructions.

chinesetagger

External tokenizer for Chinese. This allows using the language specific Jieba tokenizer for extracting meaningful terms from Chinese text, instead of the generic n-gram term generator. See https://www.recoll.org/pages/recoll-chinese.html for instructions.

indexstemminglanguages

Languages for which to create stemming expansion data. Stemmer names can be found by executing "recollindex -l", or this can also be set from a list in the GUI. The values are full language names, e.g. english, french...

defaultcharset

Default character set. This is used for files which do not contain a character set definition (e.g.: text/plain). Values found inside files, e.g. a "charset" tag in HTML documents, will override it. If this is not set, the default character set is the one defined by the NLS environment ($LC_ALL, $LC_CTYPE, $LANG), or ultimately iso-8859-1 (cp-1252 in fact). If for some reason you want a general default which does not match your LANG and is not 8859-1, use this variable. This can be redefined for any sub-directory.

unac_except_trans

A list of characters, encoded in UTF-8, which should be handled specially when converting text to unaccented lowercase. For example, in Swedish, the letter a with diaeresis has full alphabet citizenship and should not be turned into an a. Each element in the space-separated list has the special character as first element and the translation following. The handling of both the lowercase and upper-case versions of a character should be specified, as appartenance to the list will turn-off both standard accent and case processing. The value is global and affects both indexing and querying. We also convert a few confusing Unicode characters (quotes, hyphen) to their ASCII equivalent to avoid "invisible" search failures.

Examples: Swedish: unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl åå Åå ’' ❜' ʼ' ‐- . German: unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- . French: you probably want to decompose oe and ae and nobody would type a German ß unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- . The default for all until someone protests follows. These decompositions are not performed by unac, but it is unlikely that someone would type the composed forms in a search. unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐-

maildefcharset

Overrides the default character set for email messages which don't specify one. This is mainly useful for readpst (libpst) dumps, which are utf-8 but do not say so.

localfields

Set fields on all files (usually of a specific fs area). Syntax is the usual: name = value ; attr1 = val1 ; [...] value is empty so this needs an initial semi-colon. This is useful, e.g., for setting the rclaptg field for application selection inside mimeview.

testmodifusemtime

Use mtime instead of ctime to test if a file has been modified. The time is used in addition to the size, which is always used. Setting this can reduce re-indexing on systems where extended attributes are used (by some other application), but not indexed, because changing extended attributes only affects ctime. Notes: - This may prevent detection of change in some marginal file rename cases (the target would need to have the same size and mtime). - You should probably also set noxattrfields to 1 in this case, except if you still prefer to perform xattr indexing, for example if the local file update pattern makes it of value (as in general, there is a risk for pure extended attributes updates without file modification to go undetected). Perform a full index reset after changing this.

noxattrfields

Disable extended attributes conversion to metadata fields. This probably needs to be set if testmodifusemtime is set.

metadatacmds

Define commands to gather external metadata, e.g. tmsu tags. There can be several entries, separated by semi-colons, each defining which field name the data goes into and the command to use. Don't forget the initial semi-colon. All the field names must be different. You can use aliases in the "field" file if necessary. As a not too pretty hack conceded to convenience, any field name beginning with "rclmulti" will be taken as an indication that the command returns multiple field values inside a text blob formatted as a recoll configuration file ("fieldname = fieldvalue" lines). The rclmultixx name will be ignored, and field names and values will be parsed from the data. Example: metadatacmds = ; tags = tmsu tags %f; rclmulti1 = cmdOutputsConf %f

5.3.3. Parameters affecting where and how we store things

cachedir

Top directory for Recoll data. Recoll data directories are normally located relative to the configuration directory (e.g. ~/.recoll/xapiandb, ~/.recoll/mboxcache). If "cachedir" is set, the directories are stored under the specified value instead (e.g. if cachedir is ~/.cache/recoll, the default dbdir would be ~/.cache/recoll/xapiandb). This affects dbdir, webcachedir, mboxcachedir, aspellDicDir, which can still be individually specified to override cachedir. Note that if you have multiple configurations, each must have a different cachedir, there is no automatic computation of a subpath under cachedir.

maxfsoccuppc

Maximum file system occupation over which we stop indexing. The value is a percentage, corresponding to what the "Capacity" df output column shows. The default value is 0, meaning no checking. This parameter is only checked when the indexer starts, it will not change the behaviour or a running process.

dbdir

Xapian database directory location. This will be created on first indexing. If the value is not an absolute path, it will be interpreted as relative to cachedir if set, or the configuration directory (-c argument or $RECOLL_CONFDIR). If nothing is specified, the default is then ~/.recoll/xapiandb/

idxstatusfile

Name of the scratch file where the indexer process updates its status. Default: idxstatus.txt inside the configuration directory.

mboxcachedir

Directory location for storing mbox message offsets cache files. This is normally "mboxcache" under cachedir if set, or else under the configuration directory, but it may be useful to share a directory between different configurations.

mboxcacheminmbs

Minimum mbox file size over which we cache the offsets. There is really no sense in caching offsets for small files. The default is 5 MB.

mboxmaxmsgmbs

Maximum mbox member message size in megabytes. Size over which we assume that the mbox format is bad or we misinterpreted it, at which point we just stop processing the file.

webcachedir

Directory where we store the archived web pages after they are processed. This is only used by the Web history indexing code. Note that this is different from webdownloadsdir which tells the indexer where the web pages are stored by the browser, before they are indexed and stored into webcachedir. Default: cachedir/webcache if cachedir is set, else $RECOLL_CONFDIR/webcache

webcachemaxmbs

Maximum size in MB of the Web archive. This is only used by the web history indexing code. Default: 40 MB. Reducing the size will not physically truncate the file.

webqueuedir

The path to the Web indexing queue. This used to be hard-coded in the old plugin as ~/.recollweb/ToIndex so there would be no need or possibility to change it, but the WebExtensions plugin now downloads the files to the user Downloads directory, and a script moves them to webqueuedir. The script reads this value from the config so it has become possible to change it.

webdownloadsdir

The path to the browser add-on download directory. This tells the indexer where the Web browser add-on stores the web page data. The data is then moved by a script to webqueuedir, then processed, and finally stored in webcachedir for future previews.

webcachekeepinterval

Page recycle interval By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ("day", "week", "month", "year"). Note that increasing the interval will not erase existing entries.

aspellDicDir

Aspell dictionary storage directory location. The aspell dictionary (aspdict.(lang).rws) is normally stored in the directory specified by cachedir if set, or under the configuration directory.

filtersdir

Directory location for executable input handlers. If RECOLL_FILTERSDIR is set in the environment, we use it instead. Defaults to $prefix/share/recoll/filters. Can be redefined for subdirectories.

iconsdir

Directory location for icons. The only reason to change this would be if you want to change the icons displayed in the result list. Defaults to $prefix/share/recoll/images

5.3.4. Parameters affecting indexing performance and resource usage

idxflushmb

Threshold (megabytes of new data) where we flush from memory to disk index. Setting this allows some control over memory usage by the indexer process. A value of 0 means no explicit flushing, which lets Xapian perform its own thing, meaning flushing every $XAPIAN_FLUSH_THRESHOLD documents created, modified or deleted: as memory usage depends on average document size, not only document count, the Xapian approach is is not very useful, and you should let Recoll manage the flushes, however the program compiled value is 0. The configured default value (from this file) is now 100 MB, and should be ok in many cases. You can set it as low as 10 to conserve memory, but if you are looking for maximum speed, you may want to experiment with values between 20 and 300. In my experience, values beyond this tend to be counterproductive. If you find otherwise, please drop me a note.

filtermaxseconds

Linux: maximum external filter execution time in seconds. Default 1200 (20mn). Set to 0 for no limit. This is mainly to avoid infinite loops in postscript files (loop.ps)

filtermaxmbytes

Linux: maximum virtual memory space for filter processes (setrlimit(RLIMIT_AS)), in megabytes. Note that this includes any mapped libs (there is no reliable Linux way to limit the data space only), so we need to be a bit generous here. Anything over 2000 will be ignored on 32 bits machines. The high default value is needed because of java-based handlers (pdftk) which need a lot of VM (most of it text), esp. pdftk when executed from Python rclpdf.py. You can use a much lower value if you don't need Java.

oomadj

Linux: Out-Of-Memory killer adjust score value for the indexer process. See choom(1). During the indexer startup, this value is passed as the adjust parameter to the choom command with the indexer process as target.

thrQSizes

Task queue depths for each stage and threading configuration control. There are three internal queues in the indexing pipeline stages (file data extraction, terms generation, index update). This parameter defines the queue depths for each stage (three integer values). In practise, deep queues have not been shown to increase performance. The first value is also used to control threading autoconfiguration or disabling multithreading. If the first queue depth is set to 0 Recoll will set the queue depths and thread counts based on the detected number of CPUs. The arbitrarily chosen values are as follows (depth,nthread). 1 CPU -> no threading. Less than 4 CPUs: (2, 2) (2, 2) (2, 1). Less than 6: (2, 4), (2, 2), (2, 1). Else (2, 5), (2, 3), (2, 1). If the first queue depth is set to -1, multithreading will be disabled entirely. The second and third values are ignored in both these cases.

thrTCounts

Number of threads used for each indexing stage. If the first entry in thrQSizes is not 0 or -1, these three values define the number of threads used for each stage (file data extraction, term generation, index update). It makes no sense to use a value other than 1 for the last stage because updating the Xapian index is necessarily single-threaded (and protected by a mutex).

thrTmpDbCnt

Number of temporary indexes used during incremental or full indexing. If not set to zero, this defines how many temporary indexes we use during indexing. These temporary indexes are merged into the main one at the end of the operation. Using multiple indexes and a final merge can significantly improve indexing performance when the single-threaded Xapian index updates become a bottleneck. How useful this is depends on the type of input and CPU. See the manual for more details.

suspendonbattery

Suspend the real time indexing when the system runs on battery. The indexer will wait for a return on AC and reexec itself when it happens.

5.3.5. Miscellaneous parameters

loglevel

Log file verbosity 1-6. A value of 2 will print only errors and warnings. 3 will print information like document updates, 4 is quite verbose and 6 very verbose.

logfilename

Log file destination. Use "stderr" (default) to write to the console.

logthedate

Have each log line begin with the date and time. e.g.: 2025-08-21T18:58:24+0200 :3:...

idxloglevel

Override loglevel for the indexer.

idxlogfilename

Override logfilename for the indexer.

idxlogthedate

override logthedate for the indexer.

helperlogfilename

Destination file for external helpers standard error output. The external program error output is left alone by default, e.g. going to the terminal when the recoll[index] program is executed from the command line. Use /dev/null or a file inside a non-existent directory to completely suppress the output.

daemloglevel

Override loglevel for the real time indexer. The default is to use the idx... values if set, else the log... values.

daemlogfilename

Override logfilename for the real time indexer. The default is to use the idx... values if set, else the log... values.

daemlogthedate

override logthedate for the real time indexer.

pyloglevel

Override loglevel for the Python extension.

pylogfilename

Override logfilename for the Python extension.

pylogthedate

override logthedate for the Python extension.

idxnoautopurge

Do not purge data for deleted or inaccessible files This can be overridden by recollindex command line options and may be useful if some parts of the document set may predictably be inaccessible at times, so that you would only run the purge after making sure that everything is there.

orgidxconfdir

Original location of the configuration directory. This is used exclusively for movable datasets. Locating the configuration directory inside the directory tree makes it possible to provide automatic query time path translations once the data set has moved (for example, because it has been mounted on another location).

curidxconfdir

Current location of the configuration directory. Complement orgidxconfdir for movable datasets. This should be used if the configuration directory has been copied from the dataset to another location, either because the dataset is readonly and an r/w copy is desired, or for performance reasons. This records the original moved location before copy, to allow path translation computations. For example if a dataset originally indexed as "/home/me/mydata/config" has been mounted to "/media/me/mydata", and the GUI is running from a copied configuration, orgidxconfdir would be "/home/me/mydata/config", and curidxconfdir (as set in the copied configuration) would be "/media/me/mydata/config".

idxrundir

Indexing process current directory. The input handlers sometimes leave temporary files in the current directory, so it makes sense to have recollindex chdir to some temporary directory. If the value is empty, the current directory is not changed. If the value is (literal) tmp, we use the temporary directory as set by the environment (RECOLL_TMPDIR else TMPDIR else /tmp). If the value is an absolute path to a directory, we go there.

checkneedretryindexscript

Script used to heuristically check if we need to retry indexing files which previously failed. The default script checks the modified dates on /usr/bin and /usr/local/bin. A relative path will be looked up in the filters dirs, then in the path. Use an absolute path to do otherwise.

recollhelperpath

Additional places to search for helper executables. This is used, e.g., on Windows by the Python code, and on Mac OS by the bundled recoll.app (because I could find no reliable way to tell launchd to set the PATH). The example below is for Windows. Use ":" as entry separator for Mac and Ux-like systems, ";" is for Windows only.

idxabsmlen

Length of abstracts we store while indexing. Recoll stores an abstract for each indexed file. The text can come from an actual "abstract" section in the document or will just be the beginning of the document. It is stored in the index so that it can be displayed inside the result lists without decoding the original file. The idxabsmlen parameter defines the size of the stored abstract. The default value is 250 bytes. The search interface gives you the choice to display this stored text or a synthetic abstract built by extracting text around the search terms. If you always prefer the synthetic abstract, you can reduce this value and save a little space.

idxmetastoredlen

Truncation length of stored metadata fields. This does not affect indexing (the whole field is processed anyway), just the amount of data stored in the index for the purpose of displaying fields inside result lists or previews. The default value is 150 bytes which may be too low if you have custom fields.

idxtexttruncatelen

Truncation length for all document texts. Only index the beginning of documents. This is not recommended except if you are sure that the interesting keywords are at the top and have severe disk space issues.

idxsynonyms

Name of the index-time synonyms file. This is only used to issue multi-word single terms for multi-word synonyms so that phrase and proximity searches work for them (ex: applejack "apple jack"). The feature will only have an effect for querying if the query-time and index-time synonym files are the same.

idxniceprio

"nice" process priority for the indexing processes. Default: 19 (lowest) Appeared with 1.26.5. Prior versions were fixed at 19.

noaspell

Disable aspell use. The aspell dictionary generation takes time, and some combinations of aspell version, language, and local terms, result in aspell crashing, so it sometimes makes sense to just disable the thing.

aspellLanguage

Language definitions to use when creating the aspell dictionary. The value must match a set of aspell language definition files. You can type "aspell dicts" to see a list The default if this is not set is to use the NLS environment to guess the value. The values are the 2-letter language codes (e.g. "en", "fr"...)

aspellAddCreateParam

Additional option and parameter to aspell dictionary creation command. Some aspell packages may need an additional option (e.g. on Debian Jessie: --local-data-dir=/usr/lib/aspell). See Debian bug 772415.

aspellKeepStderr

Set this to have a look at aspell dictionary creation errors. There are always many, so this is mostly for debugging.

monauxinterval

Auxiliary database update interval. The real time indexer only updates the auxiliary databases (stemdb, aspell) periodically, because it would be too costly to do it for every document change. The default period is one hour.

monixinterval

Minimum interval (seconds) between processings of the indexing queue. The real time indexer does not process each event when it comes in, but lets the queue accumulate, to diminish overhead and to aggregate multiple events affecting the same file. Default 30 S.

mondelaypatterns

Timing parameters for the real time indexing. Definitions for files which get a longer delay before reindexing is allowed. This is for fast-changing files, that should only be reindexed once in a while. A list of wildcardPattern:seconds pairs. The patterns are matched with fnmatch(pattern, path, 0) You can quote entries containing white space with double quotes (quote the whole entry, not the pattern). The default is empty. Example: mondelaypatterns = *.log:20 "*with spaces.*:30"

monioniceclass

ionice class for the indexing process. Despite the misleading name, and on platforms where this is supported, this affects all indexing processes, not only the real time/monitoring ones. The default value is 3 (use lowest "Idle" priority).

monioniceclassdata

ionice class level parameter if the class supports it. The default is empty, as the default "Idle" class has no levels.

sofficecmd

Path to the soffice command (e.g. from libreoffice) This is used for Apple pages documents and big openoffice spreadsheets. Use double-quoting if there are spaces in the path (e.g. C:/Program Files/) *and* you want to add parameters to the default command (uncommon). If not set, recoll will try to find it in the PATH.

5.3.6. Query-time parameters (no impact on the index)

idxlocalguisettings

Store some GUI parameters locally to the index. GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index.

autodiacsens

auto-trigger diacritics sensitivity (raw index only). IF the index is not stripped, decide if we automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the "D" modifier to specify diacritics sensitivity. Default is no.

autocasesens

auto-trigger case sensitivity (raw index only). IF the index is not stripped (see indexStripChars), decide if we automatically trigger character case sensitivity if the search term has upper-case characters in any but the first position. Else you need to use the query language and the "C" modifier to specify character-case sensitivity. Default is yes.

maxTermExpand

Maximum query expansion count for a single term (e.g.: when using wildcards). This only affects queries, not indexing. We used to not limit this at all (except for filenames where the limit was too low at 1000), but it is unreasonable with a big index. Default 10000.

maxXapianClauses

Maximum number of clauses we add to a single Xapian query. This only affects queries, not indexing. In some cases, the result of term expansion can be multiplicative, and we want to avoid eating all the memory. Default 50000.

snippetMaxPosWalk

Maximum number of positions we walk while populating a snippet for the result list. The default of 1,000,000 may be insufficient for very big documents, the consequence would be snippets with possibly meaning-altering missing words.

thumbnailercmd

Command to use for generating thumbnails. If set, this should be a path to a command or script followed by its constant arguments. Four arguments will be appended before execution: the document URL, MIME type, target icon SIZE (e.g. 128), and output file PATH. The command should generate a thumbnail from these values. E.g. if the MIME is video, a script could use: ffmpegthumbnailer -iURL -oPATH -sSIZE.

stemexpandphrases

Default to applying stem expansion to phrase terms. Recoll normally does not apply stem expansion to terms inside phrase searches. Setting this parameter will change the default behaviour to expanding terms inside phrases. If set, you can use a "l" modifier to disable expansion for a specific instance.

autoSpellRarityThreshold

Inverse of the ratio of term occurrence to total db terms over which we look for spell neighbours for automatic query expansion When a term is very uncommon, we may (depending on user choice) look for spelling variations which would be more common and possibly add them to the query.

autoSpellSelectionThreshold

Ratio of spell neighbour frequency over user input term frequency beyond which we include the neighbour in the query. When a term has been selected for spelling expansion because of its rarity, we only include spelling neighbours which are more common by this ratio.

kioshowsubdocs

Show embedded document results in KDE dolphin/kio and krunner Embedded documents may clutter the results and are not always easily usable from the kio or krunner environment. Setting this variable will restrict the results to standalone documents.

5.3.7. Parameters for the PDF handler

pdfocr

Attempt OCR of PDF files with no text content. This can be defined in subdirectories. The default is off because OCR is so very slow.

pdfoutline

Extract outlines and bookmarks from PDF documents (needs pdftohtml). This is not enabled by default because it is rarely needed, and the extra command takes a little time.

pdfattach

Enable PDF attachment extraction by executing pdfdetach (if available). This used to be disabled by default because it used pdftk. We now use pdfdetach, which is part of poppler-utils and fast.

pdfextrameta

Extract text from selected XMP metadata tags. This is a space-separated list of qualified XMP tag names. Each element can also include a translation to a Recoll field name, separated by a "|" character. If the second element is absent, the tag name is used as the Recoll field names. You will also need to add specifications to the "fields" file to direct processing of the extracted data.

pdfextrametafix

Define name of XMP field editing script. This defines the name of a script to be loaded for editing XMP field values. The script should define a "MetaFixer" class with a metafix() method which will be called with the qualified tag name and value of each selected field, for editing or erasing. A new instance is created for each document, so that the object can keep state for, e.g. eliminating duplicate values.

5.3.8. Parameters for the ZIP file handler

zipUseSkippedNames

Use skippedNames inside Zip archives. Fetched directly by the rclzip.py handler. Skip the patterns defined by skippedNames inside Zip archives. Can be redefined for subdirectories. See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html

zipSkippedNames

Space-separated list of wildcard expressions for names that should be ignored inside zip archives. This is used directly by the zip handler. If zipUseSkippedNames is not set, zipSkippedNames defines the patterns to be skipped inside archives. If zipUseSkippedNames is set, the two lists are concatenated and used. Can be redefined for subdirectories. See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html

zipMetaEncoding

File path encoding. Needs Python 3.11+. Set to "detect" for using chardet. This is useful for non-standard zip files where the metadata is neither UTF-8 (indicated by a file flag), nor CP437 (default). The parameter can be set for specific subtrees. You need to install the Python3 "chardet" package if the value is set to "detect".

5.3.9. Parameters for the Org mode handler

orgmodesubdocs

Index org-mode level 1 sections as separate sub-documents This is the default. If set to false, org-mode files will be indexed as plain text

5.3.10. Parameters for the Thunderbird mbox handler

mhmboxquirks

Enable thunderbird/mozilla-seamonkey mbox format quirks Set this for the directory(ies) where the email mbox files are stored.

5.3.11. Parameters for OCR processing

imgocr

Tell the non-default Python image handler to run OCR. See the PDF section for PDF OCR. The image OCR also needs mimeconf changes. See the manual. imgocr can be defined for subdirectories.

ocrprogs

OCR modules to try. The top OCR script will try to load the corresponding modules in order and use the first which reports being capable of performing OCR on the input file. Modules for tesseract (tesseract) and ABBYY FineReader (abbyy) are present in the standard distribution. For compatibility with the previous version, if this is not defined at all, the default value is "tesseract". Use an explicit empty value if needed. The value be redefined in subtrees.

ocrcachedir

Location for caching OCR data. The default if this is empty or undefined is to store the cached OCR data under $RECOLL_CONFDIR/ocrcache.

tesseractlang

Language to assume for tesseract OCR. Important for improving the OCR accuracy. This can also be set through the contents of a file in the currently processed directory. See the rclocrtesseract.py script. Example values: eng, fra... See the tesseract Web sitedocumentation for language codes and how to download additional language packs. When specifying multiple languages, use a '+' separator and no spaces, e.g. eng+fra. The value be redefined in subtrees.

tesseractcmd

Path for the tesseract command. Do not quote. This is mostly useful on Windows, or for specifying a non-default tesseract command. E.g. on Windows. tesseractcmd = C:/ProgramFiles/Tesseract-OCR/tesseract.exe

abbyylang

Language to assume for abbyy OCR. Important for improving the OCR accuracy. This can also be set through the contents of a file in the currently processed directory. See the rclocrabbyy.py script. Typical values: English, French... See the ABBYY documentation.

abbyyocrcmd

Path for the abbyy command The ABBY directory is usually not in the path, so you should set this.

5.3.12. Parameters for running speech to text conversion

speechtotext

Activate speech to text conversion The only possible value at the moment is "whisper" for using the OpenAI whisper program.

sttmodel

Name of the whisper model

sttdevice

Name of the device to be used by for whisper

5.4. The fields file

This file contains information about dynamic fields handling in Recoll. Some very basic fields have hard-wired behaviour, and, mostly, you should not change the original data inside the fields file. But you can create custom fields fitting your data and handle them just like they were native ones.

The fields file has several sections, which each define an aspect of fields processing. Quite often, you'll have to modify several sections to obtain the desired behaviour.

We will only give a short description here, you should refer to the comments inside the default file for more detailed information.

Field names should be lowercase alphabetic ASCII.

[prefixes]

A field becomes indexed (searchable) by having a prefix defined in this section. There is a more complete explanation of what prefixes are in used by a standard recoll installation. In a nutshell: extension prefixes should be all caps, begin with XY, and short. E.g. XYMFLD.

[values]

Fields listed in this section will be stored as Xapian values inside the index. This makes them available for range queries, allowing to filter results according to the field value. This feature currently supports string and integer data. See the comments in the file for more detail

[stored]

A field becomes stored (displayable inside results) by having its name listed in this section (typically with an empty value).

[aliases]

This section defines lists of synonyms for the canonical names used inside the [prefixes] and [stored] sections

[queryaliases]

This section also defines aliases for the canonic field names, with the difference that the substitution will only be used at query time, avoiding any possibility that the value would pick-up random metadata from documents.

handler-specific sections

Some input handlers may need specific configuration for handling fields. Only the email message handler currently has such a section (named [mail]). It allows indexing arbitrary email headers in addition to the ones indexed by default. Other such sections may appear in the future.

Here follows a small example of a personal fields file. This would extract a specific email header and use it as a searchable field, with data displayable inside result lists. (Side note: as the email handler does no decoding on the values, only plain ASCII headers can be indexed, and only the first occurrence will be used for headers that occur several times).

[prefixes]
# Index mailmytag contents (with the given prefix)
mailmytag = XMTAG

[stored]
# Store mailmytag inside the document data record (so that it can be
# displayed - as %(mailmytag) - in result lists).
mailmytag = 

[queryaliases]
filename = fn
containerfilename = cfn

[mail]
# Extract the X-My-Tag mail header, and use it internally with the
# mailmytag field name
x-my-tag = mailmytag

5.4.1. Extended attributes in the fields file

Recoll processes user extended file attributes as documents fields by default.

Attributes are processed as fields of the same name, after removing the user prefix on Linux.

The [xattrtofields] section of the fields file allows specifying translations from extended attributes names to Recoll field names.

Name translations are set as xattrname = fieldname. They are case-sensitive. E.g. the following would map a quite an extended attribute named "tags" into the "keywords" field: tags = keywords.

Entering an empty translation will disable any use of the attribute.

The values from the extended attributes will not replace the data found from equivalent fields inside the document, instead they are concatenated.

Special case: an extended attribute named modificationdate will set the dmtime field (document date) only if it is not set by an internal document field (e.g. email Date:).

5.5. The mimemap file

mimemap specifies the file name extension to MIME type mappings.

For file names without an extension, or with an unknown one, recent Recoll versions will use libmagic. Older versions would execute a system command (file -i, or xdg-mime) will be executed to determine the MIME type (this can be switched off, or the command changed inside the main configuration file).

All extension values in mimemap must be entered in lower case. File names extensions are lower-cased for comparison during indexing, meaning that an upper case mimemap entry will never be matched.

The mappings can be specified on a per-subtree basis, which may be useful in some cases. Example: okular notes have a .xml extension but should be handled specially, which is possible because they are usually all located in one place. Example:

[~/.kde/share/apps/okular/docdata]
.xml = application/x-okular-notes

The recoll_noindex mimemap variable has been moved to recoll.conf and renamed to noContentSuffixes, while keeping the same function, as of Recoll version 1.21. For older Recoll versions, see the documentation for noContentSuffixes but use recoll_noindex in mimemap.

5.6. The mimeconf file

The main purpose of the mimeconf file is to specify how the different MIME types are handled for indexing. This is done in the [index] section, which should not be modified casually. See the comments in the file.

The file also contains other definitions which affect the query language and the GUI, and which, in retrospect, should have been stored elsewhere.

The [icons] section allows you to change the icons which are displayed by the recoll GUI in the result lists (the values are the basenames of the png images inside the iconsdir directory (which is itself defined in recoll.conf).

The [categories] section defines the groupings of MIME types into categories as used when adding an rclcat clause to a query language query. rclcat clauses are also used by the default guifilters buttons in the GUI (see next).

The filter controls appear at the top of the recoll GUI, either as checkboxes just above the result list, or as a dropbox in the tool area.

By default, they are labeled: media, message, other, presentation, spreadsheet and text, and each maps to a document category. This is determined in the [guifilters] section, where each control is defined by a variable naming a query language fragment.

A simple example will hopefully make things clearer.

[guifilters]

Big Books = dir:"~/My Books" size>10K
My Docs = dir:"~/My Documents"
Small Books = dir:"~/My Books" size<10K
System Docs = dir:/usr/share/doc

The above definition would create four filter checkboxes, labelled Big Books, My Docs, etc.

The text after the equal sign must be a valid query language fragment, and, when the button is checked, it will be combined with the rest of the query with an AND conjunction.

Any name text before a colon character will be erased in the display, but used for sorting. You can use this to display the checkboxes in any order you like. For example, the following would do exactly the same as above, but ordering the checkboxes in the reverse order.

[guifilters]

d:Big Books = dir:"~/My Books" size>10K
c:My Docs = dir:"~/My Documents"
b:Small Books = dir:"~/My Books" size<10K
a:System Docs = dir:/usr/share/doc

As you may have guessed, The default [guifilters] section looks like:

[guifilters]
text = rclcat:text
spreadsheet = rclcat:spreadsheet
presentation = rclcat:presentation
media = rclcat:media
message = rclcat:message
other = rclcat:other

5.7. The mimeview file

mimeview specifies which programs are started when you click on an Open link in a result list. E.g.: HTML is normally displayed using firefox, but you may prefer Konqueror, your openoffice.org program might be named oofice instead of openoffice etc.

Changes to this file can be done by direct editing, or through the recoll GUI preferences dialog.

If Use desktop preferences to choose document editor is checked in the Recoll GUI preferences, all mimeview entries will be ignored except the one labelled application/x-all (which is set to use xdg-open by default).

In this case, the xallexcepts top level variable defines a list of MIME type exceptions which will be processed according to the local entries instead of being passed to the desktop. This is so that specific Recoll options such as a page number or a search string can be passed to applications that support them, such as the evince viewer.

As for the other configuration files, the normal usage is to have a mimeview inside your own configuration directory, with just the non-default entries, which will override those from the central configuration file.

All viewer definition entries must be placed under a [view] section.

The keys in the file are normally MIME types. You can add an application tag to specialize the choice for an area of the filesystem (using a localfields specification in mimeconf). The syntax for the key is mimetype|tag

The nouncompforviewmts entry, (placed at the top level, outside of the [view] section), holds a list of MIME types that should not be uncompressed before starting the viewer (if they are found compressed, e.g.: mydoc.doc.gz).

The right side of each assignment holds a command to be executed for opening the file. The following substitutions are performed:

  • %D.  Document date

  • %f.  File name. This may be the name of a temporary file if it was necessary to create one (e.g.: to extract a subdocument from a container).

  • %i.  Internal path, for subdocuments of containers. The format depends on the container type. If this appears in the command line, Recoll will not create a temporary file to extract the subdocument, expecting the called application (possibly a script) to be able to handle it.

  • %M. MIME type

  • %p. Page index. Only significant for a subset of document types, currently only PDF, Postscript and DVI files. If it is set, a significant term will be chosen in the query, and %p will be substituted with the first page where the term appears. Can be used to start the editor at the right page for a match or snippet.

  • %l. Line number. Only significant for document types with relevant line breaks, mostly text/plain and analogs. If it is set, a significant term will be chosen in the query, and %p will be substituted with the first line where the term appears.

  • %s. Search term. The value will only be set for documents with indexed page or line numbers and if %p or %l is also used. The value will be one of the matched search terms. It would allow pre-setting the value in the "Find" entry inside Evince for example, for easy highlighting of the term.

  • %u. Url.

In addition to the predefined values above, all strings like %(fieldname) will be replaced by the value of the field named fieldname for the document. This could be used in combination with field customisation to help with opening the document.

5.8. The ptrans file

ptrans specifies query-time path translations. These can be useful in multiple cases.

The file has a section for any index which needs translations, either the main one or additional query indexes. The sections are named with the Xapian index directory names. No slash character should exist at the end of the paths (all comparisons are textual). An example should make things sufficiently clear

[/home/me/.recoll/xapiandb]
/this/directory/moved = /to/this/place

[/path/to/additional/xapiandb]
/server/volume1/docdir = /net/server/volume1/docdir
/server/volume2/docdir = /net/server/volume2/docdir

5.9. Examples of configuration adjustments

5.9.1. Adding an external viewer for an non-indexed type

Imagine that you have some kind of file which does not have indexable content, but for which you would like to have a functional Open link in the result list (when found by file name). The file names end in .blob and can be displayed by application blobviewer.

You need two entries in the configuration files for this to work:

  • In $RECOLL_CONFDIR/mimemap (typically ~/.recoll/mimemap), add the following line:

    .blob = application/x-blobapp

    Note that the MIME type is made up here, and you could call it diesel/oil just the same.

  • In $RECOLL_CONFDIR/mimeview under the [view] section, add:

    application/x-blobapp = blobviewer %f

    We are supposing that blobviewer wants a file name parameter here, you would use %u if it liked URLs better.

If you just wanted to change the application used by Recoll to display a MIME type which it already knows, you would just need to edit mimeview. The entries you add in your personal file override those in the central configuration, which you do not need to alter. mimeview can also be modified from the Gui.

5.9.2. Adding indexing support for a new file type

Let us now imagine that the above .blob files actually contain indexable text and that you know how to extract it with a command line program. Getting Recoll to index the files is easy. You need to perform the above alteration, and also to add data to the mimeconf file (typically in ~/.recoll/mimeconf):

  • Under the [index] section, add the following line (more about the rclblob indexing script later):

    application/x-blobapp = exec rclblob

    Or if the files are mostly text and you don't need to process them for indexing:

    application/x-blobapp = internal text/plain
  • Under the [icons] section, you should choose an icon to be displayed for the files inside the result lists. Icons are normally 64x64 pixels PNG files which live in /usr/share/recoll/images.

  • Under the [categories] section, you should add the MIME type where it makes sense (you can also create a category). Categories may be used for filtering in advanced search.

The rclblob handler should be an executable program or script which exists inside /usr/share/recoll/filters. It will be given a file name as argument and should output the text or html contents on the standard output.

The filter programming section describes in more detail how to write an input handler.

Part I. Appendices

Appendix A. Processing of wild card and other special characters

Recoll is primarily designed to search for natural language words, and the general rule is that non-alphanumeric characters are treated as white space (word separators).

However, a number of ASCII characters receive special treatment. The details are described in the following.

A.1. Words and spans

Some important searchable text elements contain non-alphanumeric characters, for example, email addresses (jfd@recoll.org), proper names (O'Brien) or internet addresses (192.168.4.1).

If we treat the special characters as white space in this situation, the only way to search for these terms with a reasonable degree of precision would to use phrase searches ("jf dockes org").

However, phrase searches need a lot of computation and are generally slower. This was especially true with older Xapian versions.

Recoll has special processing for these elements, designated as spans. The corresponding linkage characters will be designated as span glue in the following.

When indexing a span like jfd@recoll.org, Recoll generates both regular individual terms (jfd, recoll, org) and multiword terms linked by span glue: jfd@recoll.org, jfd@recoll, recoll.org.

When searching, only the larger term (complete span: jfd@recoll.org) is used, so that Xapian executes a regular single-term search instead of a phrase one.

A.2. Special ASCII characters during indexing

A.2.1. Characters with hard-coded processing

- and + have special treatment in numbers or terms like C++, else they are processed as span glue.

. and ' are always processed as span glue.

# is processed as a letter at the beginning (hashtag) or end (c#) of a word, else as white space.

The underscore (_) is processed as span glue except if the underscoreasletter index configuration parameter is set, in which case it is treated as a regular letter.

A.2.2. Characters generally treated as white space

!"$%&(),/:;<=>^\`{|}~ and wild card expression characters *[]? are generally treated as white space while indexing, except if they are included in the indexedpunctuation index configuration variable.

Elements of indexedpunctuation are treated as single terms which allows to match, e.g., 93% with precisely 93% (or just 93 if preferrable).

A.2.3. Backslash

\ is treated as a letter if backslashasletter is set, else treated as other punctuation according to indexedpunctuation. backslashasletter was broken until Recoll version 1.42.2

A.3. Special ASCII characters at search time

Slightly different rules apply when querying, for example because of the special characters used by the Query language, or because of wild card expansion.

A.3.1. Query language special characters

"():=<> and .. have special meaning for the query language. There is no way to escape them. This is generally not a problem because they are all treated as white space during indexing, except if included in indexedpunctuation. In the latter case, it is still possible to search for them through the All terms or Any term search modes or by using the Advanced search GUI dialog.

A.3.2. Wild card characters

When querying, wild card characters generally cause an expansion of the term they are found in. Until Recoll version 1.42.2, there was no way to escape them.

As of Recoll 1.42.2 it is possible to escape wild card characters with a backslash when in File name search mode and it becomes possible to exactly search for file names containing these characters. Previously, you would have had to use a less precise search by replacing them with a ? wild card or using another mode.

Appendix B. Building and Installation

B.1. Installing a binary copy

Recoll binary copies are always distributed as regular packages for your system. They can be obtained either through the system's normal software distribution framework (e.g. Debian/Ubuntu apt, FreeBSD ports, etc.), or from some type of "backports" repository providing versions newer than the standard ones, or found on the Recoll Web site in some cases. The most up-to-date information about Recoll packages can usually be found on the Recoll Web site downloads page

The Windows version of Recoll comes in a self-contained setup file, there is nothing else to install.

On Unix-like systems, the package management tools will automatically install hard dependencies for packages obtained from a proper package repository. You will have to deal with them by hand for downloaded packages (for example, when dpkg complains about missing dependencies).

In all cases, you will have to check or install supporting applications for the file types that you want to index beyond those that are natively processed by Recoll (text, HTML, email files, and a few others).

You should also maybe have a look at the configuration section (but this may not be necessary for a quick test with default parameters). Most parameters can be more conveniently set from the GUI interface.

B.2. Supporting packages

Note

The Windows installation of Recoll is self-contained. Windows users can skip this section.

Recoll uses external applications to index some file types. You need to install them for the file types that you wish to have indexed (these are run-time optional dependencies. None is needed for building or running Recoll except for indexing their specific file type).

After an indexing pass, the commands that were found missing can be displayed from the recoll File menu. The list is stored in the missing text file inside the configuration directory.

The past has proven that I was unable to maintain an up to date application list in this manual. Please check https://www.recoll.org/pages/features.html for a complete list along with links to the home pages or best source/patches pages, and misc tips. What follows is only a very short extract of the stable essentials.

  • PDF files need pdftotext which is part of Poppler (usually comes with the poppler-utils package). Avoid the original one from Xpdf.

  • MS Word documents need antiword. It is also useful to have wvWare installed as it may be be used as a fallback for some files which antiword does not handle.

  • RTF files need unrtf. Check https://www.recoll.org/pages/features.html for details.

  • Pictures: Recoll uses the Exiftool Perl package to extract tag information. Most image file formats are supported.

  • Up to Recoll 1.24, many XML-based formats need the xsltproc command, which usually comes with libxslt. These are: abiword, fb2 ebooks, kword, openoffice, opendocument svg. Recoll 1.25 and later process them internally (using libxslt).

  • Please check https://www.recoll.org/pages/features.html for a much more complete and up to date list.

B.3. Building from source

B.3.1. Prerequisites

The following prerequisites are described in broad terms and Debian package names. The dependencies should be available as packages on most common Unix-like systems, and it should be quite uncommon that you would have to build one of them. Finding the right package name for non-Debian systems is left to the sagacity of the reader.

Up to version 1.37, the Recoll build process used the GNU autotools. Versions 1.38 and later use meson/ninja instead.

If you do not need the GUI, you can avoid all GUI dependencies by disabling its build: see the configure section further down: -Dqtgui=false.

Check the Recoll download page for up to date Recoll version information and links to source release files in tar format.

The shopping list follows. I try to keep it up to date, but an easy way to see the current list of build dependencies is to have a look at the debian package control file in the recoll source tree (packaging/debian/debian/control).

  • If you start from git repository source code, you will need the git, obviously (package: git).

  • On Unix-like systems systems, you will need the meson and ninja commands. (package: meson, this will bring ninja as a dependency). Not needed on MacOS systems at the moment.

  • The pkg-config command is needed for configuring the build (package: pkg-config).

  • The make command is needed for building the GUI, unneeded if you disable this. (package: make).

  • A C++ compiler with at least C++17 compatibility (g++ or clang). Recoll Versions 1.33.4 and older only required c++11.

  • The bison command is not generally needed, but might be if you modify the query language yacc source or if some file modification times are not right (package: bison).

  • For building the documentation: the xsltproc command, and the Docbook XML and style sheet files. You can avoid this dependency by disabling documentation building with the -Duserdoc=false setup option.

  • Development files for Xapian core (libxapian-dev).

  • Development files for libxml2 and libxslt (packages: libxslt1-dev, which will pull libxml2-dev).

  • Development files for zlib (zlib1g-dev).

  • Development files for libmagic (libmagic-dev).

  • Development files for libaspell (package: libaspell-dev). Can be avoided with the -Daspell=false setup option.

  • If you want to process CHM files, you will need libchm (libchm-dev), else you can set the -Dpython-chm=false option to the setup command.

  • If you want the daemon indexer process to monitor the session for quitting, you need the X11 development library (package: libx11-dev). Else use the -Dx11mon=false setup option.

  • If you want to build the GUI: qmake and development files for Qt 5. Else give the -Dqtgui=false setup option. Packages: qtbase5-dev, qttools5-dev-tools, libqt5webkit5-dev. Replace libqt5webkit5-dev with libqt5webengine5 if you use -Dwebengine=true.

  • Development files for Python3 (packages: python3-all-dev, python3-setuptools). You can use the -Dpython-module=false setup option for disabling the build of the Python extension.

  • You may also need libiconv. On Linux systems, the iconv interface is part of libc and you should not need to do anything special.

B.3.2. Building

Recoll has been built on Linux, FreeBSD, MacOS, and Solaris, most versions after 2005 should be ok, maybe some older ones too (Solaris 8 used to be ok). Current Recoll versions (1.34 and later) need a c++17 compiler and Qt5, so they will not build on old systems, but if really needed, you can probably find an older version which will work for you. If you build on another system, and need to modify things, I would very much welcome patches.

meson setup options

Of course the usual meson setup options, like -Dprefix=/usr apply.

-Daspell=false will disable the code for phonetic matching of search terms.

-Dfam=true or -Dinotify=true will enable the code for real time indexing. Inotify support is enabled by default on Linux systems. MacOS systems and Windows platforms now have real time indexing enabled by default and need no setup options.

-Dqzeitgeist=true will enable sending Zeitgeist events about the visited search results, and needs the qzeitgeist package.

-Dqtgui=false will disable the Qt graphical interface, which allows building the indexer and the command line search program in absence of a Qt environment.

-Dwebkit=false will implement the result list with a Qt QTextBrowser instead of a WebKit widget if you do not or can't depend on the latter.

-Dwebengine=true will enable the use of Qt Webengine (only meaningful if the Qt GUI is enabled), in place or Qt Webkit.

-Dwebpreview=false: do not implement the GUI preview windows with webkit or webengine instead of qtextbrowser. Using webxx will usually produce a better display, but will sometimes fail to display anything because of javascript issues.

-Dguidebug=true will build the recoll GUI program with debug symbols. This makes it very big (~50MB), which is why it is stripped by default.

-Didxthreads=false will suppress multithreading inside the indexing process. You can also use the run-time configuration to restrict recollindex to using a single thread, but the compile-time option may disable a few more unused locks. This only applies to the use of multithreading for the core index processing (data input). The Recoll monitor mode always uses at least two threads of execution.

-Dpython-module=false will avoid building the Python extension.

-Dpython-chm=false will avoid building the Python libchm interface used to index CHM files.

-Dpython-aspell=false will avoid building the Python libaspell interface. This is used to supplement queries with spelling guesses.

-Dindexer=false will prevent building the indexer. Possibly useful if you just need the lib (e.g. for the Python extension).

-Dsimdutf=false will prevent the use of the simdutf code normally used to speed up character code conversions.

-Dcamelcase=true will enable splitting camelCase words. This is not enabled by default as it has the unfortunate side-effect of making some phrase searches quite confusing: ie, "MySQL manual" would be matched by "MySQL manual" and "my sql manual" but not "mysql manual" (only inside phrase searches).

-Dlibmagic=false: disable the use of libmagic (use a file-like command instead).

-Dfile-command=somecommand Specify the version of the 'file' command to use (e.g.: -Dfile-command=/usr/local/bin/file). Can be useful to enable the gnu version on systems where the native one is bad.

-Dx11mon=false Disable X11 connection monitoring inside recollindex. Together with -Dqtgui=false, this allows building recoll without Qt and X11.

-Duserdoc=false will avoid building the user manual. This avoids having to install the Docbook XML/XSL files and the TeX toolchain used for translating the manual to PDF.

-Drecollq=true Enable building the recollq command line query tool (recoll -t without need for Qt). This is done by default if -Dqtgui=false is used but this option enables forcing it.

-Dsystemd=false Disable the automatic installation of systemd unit files. Normally unit files are installed if the install path can be detected.

-Dsystem-unit-dir=DIR Provide an install path for the systemd system unit template file.

-Duser-unit-dir=DIR Provide an install path for the systemd user unit file.

Building

For versions 1.38 and later (else check the manual inside the older source):

For source extracted from a tar file:

cd recoll-xxx
meson setup [options] build
ninja -C build
            

For a git clone, the procedure is almost the same, but the top of the source is the src subdirectory. Showing an out of tree build (which you could of course also use for the above tar extracion).

cd /some/where/
meson setup [options] /path/to/recoll/src recollbuild
ninja -C recollbuild
            

B.3.3. Installing

Use sudo ninja install in your build tree. This will copy the commands to prefix/bin and the sample configuration files, scripts and other shared data to prefix/share/recoll.

B.3.4. Python API package

The Python interface can be found in the source tree, under the python/recoll directory.

The normal Recoll build procedure (see above) installs the API package for Python3.

For meson-based versions: the python/recoll/ directory still contains a setup.py. This is obsoleted by meson.build but might be useful in some cases.

recoll-1.43.12/doc/user/docbook-xsl.css0000644000175000017500000000743314753313314017140 0ustar dockesdockes/* * Copyright (c) 2001, 2003, 2010 The FreeBSD Documentation Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: doc/share/misc/docbook.css,v 1.15 2010/03/20 04:15:01 hrs Exp $ */ body address { line-height: 1.3; margin: .6em 0; } body blockquote { margin-top: .75em; line-height: 1.5; margin-bottom: .75em; } html body { margin: 1em 8% 1em 10%; line-height: 1.2; } .legalnotice { font-size: small; font-variant: small-caps; } body div { margin: 0; } dl { margin: .8em 0; line-height: 1.2; } body form { margin: .6em 0; } h1, h2, h3, h4, h5, h6, div.example p b, .question, div.table p b, div.procedure p b { color: #990000; } body h1, body h2, body h3, body h4, body h5, body h6 { line-height: 1.3; margin-left: 0; } body h1, body h2 { margin: .8em 0 0 -4%; } body h3, body h4 { margin: .8em 0 0 -3%; } body h5 { margin: .8em 0 0 -2%; } body h6 { margin: .8em 0 0 -1%; } body hr { margin: .6em; border-width: 0 0 1px 0; border-style: solid; border-color: #cecece; } body img.navheader { margin: 0 0 0 -4%; } ol { margin: 0 0 0 5%; line-height: 1.2; } body pre { margin: .75em 0; line-height: 1.0; font-family: monospace; } body td, body th { line-height: 1.2; } ul, body dir, body menu { margin: 0 0 0 5%; line-height: 1.2; } html { margin: 0; padding: 0; } body p b.application { color: #000000; } body p span.application { font-weight: bold; color: #000000; } .filename { color: #007a00; } .guimenu, .guimenuitem, .guisubmenu, .guilabel, .interface, .shortcut, .shortcut .keycap { font-weight: bold; } .guibutton { background-color: #cfcfcf; padding: 2px; } .accel { background-color: #f0f0f0; text-decoration: underline; } .screen { padding: 1ex; } .programlisting { padding: 1ex; background-color: #eee; border: 1px solid #ccc; } @media screen { /* hide from ie3 */ a[href]:hover { background: #ffa } } blockquote.note { color: #222; background: #eee; border: 1px solid #ccc; padding: 0.4em 0.4em; width: 85%; } blockquote.tip { color: #004f00; background: #d8ecd6; border: 1px solid green; padding: 0.2em 2em; width: 85%; } blockquote.important { font-style:italic; border: 1px solid #a00; border-left: 12px solid #c00; padding: 0.1em 1em; } blockquote.warning { color: #9f1313; background: #f8e8e8; border: 1px solid #e59595; padding: 0.2em 2em; width: 85%; } .example { background: #fefde6; border: 1px solid #f1bb16; margin: 1em 0; padding: 0.2em 2em; width: 90%; } .informaltable table.calstable tr td { padding-left: 1em; padding-right: 1em; } recoll-1.43.12/doc/user/usermanual.xml0000644000175000017500000140034115133363764017103 0ustar dockesdockes Recoll"> https://www.recoll.org/"> https://www.recoll.org/pages/features.html"> Xapian"> Windows"> Unix-like systems"> MacOS systems"> ]> Recoll user manual Jean-Francois Dockes
jfd@recoll.org
2005-2025 Jean-Francois Dockes Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found at the following location: GNU web site. This document introduces full text search notions and describes the installation and use of the &RCL; application. This version describes &RCL; &RCLVERSION;.
Introduction This document introduces full text search notions and describes the installation and use of the &RCL; application. It is updated for &RCL; &RCLVERSION;. &RCL; on &WIN; &RCL; was for a long time dedicated to Unix-like systems. It was only later ported to Microsoft &WIN;. Many references in this manual, especially file locations, are specific to Unix, and not valid on &WIN;, where some described features are also not available. The manual will be updated in time. Until this is completed: on &WIN;, most references to shared files can be translated by looking under the &WIN; &RCL; installation directory (Typically C:/Program Files/Recoll). Especially, anything referenced inside /usr/share in this document will be found in the Share subdirectory of the installation). The user configuration is stored by default under AppData/Local/Recoll inside the user directory, along with the index itself. Giving it a try If you do not like reading manuals (who does?) but wish to give &RCL; a try, just install the application and start the recoll graphical user interface (GUI), which will ask permission to index your home directory, allowing you to search immediately after indexing completes. Do not do this if your home directory contains a huge number of documents and you do not want to wait or are very short on disk space. In this case, you may first want to customise the configuration to restrict the indexed area. From the recoll GUI go to: Preferences Indexing configuration , then adjust the Start folders section (named Top directories in older &RCL; versions), which defines the directories from which the filesystem exploration starts. By default, the indexer process writes all errors to its stderr output, which may be lost if you started the GUI from the desktop. You may find it useful to assign a file name to the Indexer log file name entry on the above indexing preferences screen. With the default level of 3, this will list all processed documents, and all errors (lines beginning with :2:). On &LIN;, you may need to install the appropriate supporting applications for document types that need them (for example antiword for Microsoft Word files). The &WIN; package is self-contained and includes most useful auxiliary programs. After the indexing ran, the recoll GUI Tools Missing helpers menu entry will show a list of missing supporting applications for the documents found in the indexed area. Full text search &RCL; is a full text search application, which means that it finds your data by content rather than by external attributes (like the file name). You specify words (terms) which should or should not appear in the text you are looking for, and receive in return a list of matching documents, ordered so that the most relevant documents will appear first. You do not need to remember in what file or email message you stored a given piece of information. You just ask for related terms, and the tool will return a list of documents where these terms are prominent, in a similar way to Internet search engines. Full text search applications try to determine which documents are most relevant to the search terms you provide. Computer algorithms for determining relevance can be very complex, and in general are inferior to the power of the human mind to rapidly determine relevance. The quality of relevance guessing is probably the most important aspect when evaluating a search application. &RCL; relies on the &XAP; probabilistic information retrieval library to determine relevance. In many cases, you are looking for all the forms of a word, including plurals, different tenses for a verb, or terms derived from the same root or stem (example: floor, floors, floored, flooring...). Queries are usually automatically expanded to all such related terms (words that reduce to the same stem). This can be prevented for searching for a specific form. Stemming, by itself, does not accommodate for misspellings or phonetic searches. A full text search application may also support this form of approximation. For example, a search for aliterattion returning no result might propose alliteration, alteration, alterations, or altercation as possible replacement terms. &RCL; bases its suggestions on the actual index contents, so that suggestions may be made for words which would not appear in a standard dictionary. Recoll overview &RCL; uses the &XAP; information retrieval library as its storage and retrieval engine. &XAP; is a very mature package using a sophisticated probabilistic ranking model. The &XAP; library manages an index database which describes where terms appear in your document files. It efficiently processes the complex queries which are produced by the &RCL; query expansion mechanism, and is in charge of the all-important relevance computation task. &RCL; provides the mechanisms and interface to get data into and out of the index. This includes translating the many possible document formats into pure text, handling term variations (using &XAP; stemmers), and spelling approximations (using the aspell speller), interpreting user queries and presenting results. In a shorter way, &RCL; does the dirty footwork, &XAP; deals with the intelligent parts of the process. The &XAP; index can be big (roughly the size of the original document set), but it is not a document archive. &RCL; can only fully display documents that still exist at the place from which they were indexed. However, recent &RCL; version do store the plain text from all indexed documents. &RCL; stores all internal data in Unicode UTF-8 format, and it can index many types of files with different character sets, encodings, and languages into the same index. It can process documents embedded inside other documents (for example a PDF document stored inside a Zip archive sent as an email attachment...), down to an arbitrary depth. East asian texts are difficult to segment into words. By default, &RCL; processes them by generating terms as arbitrary sequences of consecutive characters (n-grams). However, it has provisions to integrate with language-aware text segmenters for Chinese and Korean which will produce a smaller index and improved search. Stemming is the process by which &RCL; reduces words to their radicals so that searching does not depend, for example, on a word being singular or plural (floor, floors), or on a verb tense (flooring, floored). Because the mechanisms used for stemming depend on the specific grammatical rules for each language, there is a separate &XAP; stemmer module for most common languages where stemming makes sense. &RCL; stores the unstemmed versions of terms in the main index and uses auxiliary databases for term expansion (one for each stemming language), which means that you can switch stemming languages between searches, or add a language without needing a full reindex. Storing documents written in different languages in the same index is possible, and commonly done. In this situation, you can specify several stemming languages for the index. &RCL; currently makes no attempt at automatic language recognition, which means that the stemmer will sometimes be applied to terms from other languages with potentially strange results. In practise, even if this introduces possibilities of confusion, this approach has been proven quite useful, and it is much less cumbersome than separating your documents according to what language they are written in. By default, &RCL; strips most accents and diacritics from terms, and converts them to lower case before either storing them in the index or searching for them. As a consequence, it is impossible to search for a particular capitalization of a term (US / us), or to discriminate two terms based on diacritics (sake / saké, mate / maté). &RCL; can optionally store the raw terms, without accent stripping or case conversion. In this configuration, default searches will behave as before, but it is possible to perform searches sensitive to case and diacritics. This is described in more detail in the section about index case and diacritics sensitivity. &RCL; uses many parameters to define exactly what to index, and how to classify and decode the source documents. These are kept in configuration files. A default configuration is copied into a standard location (usually something like /usr/share/recoll/examples) during installation. The default values set by the configuration files in this directory may be overridden by values set inside your personal configuration. With the default configuration, &RCL; will index your home directory with generic parameters. Most common parameters can be set by using configuration menus in the recoll GUI. Some less common parameters can only be set by editing the text files. The indexing process is started automatically (after asking permission), the first time you execute the recoll GUI. Index updating or rebuild can later be performed by executing the recollindex command, in a command window, or from the GUI File menu. &RCL; indexing is multithreaded by default (except on &WIN;) when appropriate hardware resources are available, and can perform multiple tasks in parallel for text extraction, segmentation and index updates. Searches are usually performed inside the recoll GUI, which has many options to help you find what you are looking for. However, there are other ways to query the index: A command line interface. The Recoll WebUI. A Gnome Shell Search Provider. A Python programming interface KDE KIO worker and krunner modules. Indexing Introduction Indexing is the process by which the set of documents is analyzed and the data entered into the database. &RCL; indexing is normally incremental: documents will only be processed if they have been modified since the last run. On the first execution, all documents will need processing. A full index build can be forced later by specifying an option to the indexing command (recollindex or ). recollindex skips files which caused an error during a previous pass. This is a performance optimization, and the command line option can be set to retry failed files, for example after updating an input handler. When a file has been deleted, recollindex removes the corresponding data from the index. The exact moment when this happens depends on the indexing mode. There are provisions to avoid deleting data for an umounted removable volume. The following sections give an overview of different aspects of the indexing processes and configuration, with links to detailed sections. Depending on your data, temporary files may be created during indexing, some of them possibly quite big. You can set the RECOLL_TMPDIR environment variable to determine where they are created. If RECOLL_TMPDIR is not set, &RCL; will fall back to other locations depending on the system. On &LIN; and &MAC; TMPDIR, TMP and TEMP will be tried before falling back to /tmp/. On &WIN;, &RCL; will call the GetTempPath() function. Using the system normal mechanism instead of RECOLL_TMPDIR has the nice property that the auxiliary commands executed by recollindex should then create their own temporary files in the same location. Indexing modes &RCL; indexing can be performed along two main modes: <link linkend="RCL.INDEXING.PERIODIC">Periodic (or batch) indexing</link> recollindex is executed at discrete times. On &LIN;, the typical usage is to have a nightly run programmed into your cron file. On &WIN;, the Task Scheduler can be used to run indexing. In both cases, the &RCL; GUI includes a simplified interface to configure the system scheduler. <link linkend="RCL.INDEXING.MONITOR">Real time indexing</link> recollindex runs permanently as a daemon and uses a file system alteration monitor (e.g. inotify on &LIN;) to detect file changes. New or updated files are indexed at once. Monitoring a big file system tree can consume significant system resources. Choosing an indexing mode The choice between the two methods is mostly a matter of preference, and they can be combined by setting up multiple indexes (e.g.: use periodic indexing on a big documentation directory, and real time indexing on a small home directory), or by configuring the index so that only a subset of the tree will be monitored. The choice of method and the parameters used can be configured from the recoll GUI: Preferences Indexing schedule dialog. The index configuration directory A Recoll index is defined by its configuration directory. A configuration directory contains several files which describe what should be indexed and how. When recoll or recollindex is first executed, it creates a default configuration directory, located in $HOME/.recoll/ on &LIN; and &MAC; and %LOCALAPPDATA%/Recoll on &WIN; (typically C:/Users/[me]/Appdata/Local/Recoll). All configuration parameters have defaults, defined in system-wide files. Without further customisation, the default configuration will process your complete home directory, with a reasonable set of defaults. It can be adjusted to process different areas of the file storage, select files in different ways, and many other things. The index configuration can be edited either by using the recoll GUI Preferences->Index configuration dialog, or by directly editing the configuration files. A single index can process data from any subset of the computer accessible storage, as defined by the configuration variables. The most important one is topdirs (Start directories in the GUI), which defines the directories to be recursively indexed. Its default value is ~, which translates to your home directory. In some cases, it may be useful to create additional configuration directories, for example, to separate personal and shared indexes, or to take advantage of the organization of your data to improve search precision. See the section about configuring multiple indexes for more detail. Document types &RCL; knows about quite a few different document types. The parameters for document types recognition and processing are set in configuration files. Most file types, like HTML or word processing files, only hold one document. Some file types, like email folders or zip archives, can hold many individually indexed documents, which may themselves be compound ones. Such hierarchies can go quite deep, and &RCL; can process, for example, a LibreOffice document stored as an attachment to an email message inside an email folder archived in a zip file... recollindex processes plain text, HTML, OpenDocument (Open/LibreOffice), email formats, and a few others internally. Other file types (e.g.: postscript, pdf, ms-word, rtf ...) need external applications for preprocessing. The list is in the installation section. After every indexing operation, &RCL; updates a list of commands that would be needed for indexing existing files types. This list can be displayed by selecting the menu option File Show Missing Helpers in the recoll GUI. It is stored in the missing text file inside the configuration directory. After installing a missing handler, you may need to tell recollindex to retry the failed files, by adding option -k to the command line, or by using the GUI File Special indexing menu. This is because recollindex, in its default operation mode, will not retry files which caused an error during an earlier pass. In special cases, it may be useful to reset the data for a category of files before indexing. See the recollindex manual page. If your index is not too big, it may be simpler to just reset it. By default, &RCL; will try to index any file type that it has a way to read. This is sometimes not desirable, and there are ways to either exclude some types, or on the contrary define a positive list of types to be indexed. In the latter case, any type not in the list will be ignored. A detailed description of the parameters involved can be found in the document selection section of this manual. For example, to define an exclusive list of MIME types to be indexed, you would set the indexedmimetypes configuration variable: indexedmimetypes = text/html application/pdf It is possible to redefine a parameter for subdirectories. Example: [/path/to/my/dir] indexedmimetypes = application/pdf When using sections like this, don't forget that they remain in effect until the end of the file or another section indicator. As another example, excluding files by name can be done by adding wildcard name patterns to the skippedNames list, Excluding by type can be done by setting the excludedmimetypes value. Most parameters can be set either by editing the configuration file (recoll.conf) for the index, or by using the GUI Index configuration menu. Note about MIME types When editing the indexedmimetypes or excludedmimetypes lists, you should use the MIME values listed in the mimemap file or in Recoll result lists rather than file -i output: there are a number of differences. The system command output should only be used for files without extensions, or for which the extension is not listed in mimemap. Indexing failures Indexing may fail for some documents, for a number of reasons: a helper program may be missing, the document may be corrupt, we may fail to uncompress a file because no file system space is available, etc. The &RCL; indexer does not retry failed files by default, because some indexing failures can be quite costly (for example failing to uncompress a big file because of insufficient disk space). Retrying will only occur if an explicit option () is set on the recollindex command line, or if a script executed when recollindex starts up says so. The script is defined by a configuration variable (checkneedretryindexscript), and makes a rather lame attempt at deciding if a helper command may have been installed, by checking if any of the common bin directories have changed. Recovery In the rare case where the index becomes corrupted (which can signal itself by weird search results or crashes), the index files need to be erased before restarting a clean indexing pass. Just delete the xapiandb directory (see next section), or, alternatively, start the next recollindex with the option, which will reset the database before indexing. The difference between the two methods is that the second will not change the current index format, which may be undesirable if a newer format is supported by the &XAP; version. Index storage The default index location is the xapiandb subdirectory of the &RCL; configuration directory, typically $HOME/.recoll/xapiandb/ on &LIN; or C:/Users/[me]/Appdata/Local/Recoll/xapiandb on &WIN;. This can be changed via two different methods (with different purposes): For a given configuration directory, you can specify a non-default storage location for the index by setting the dbdir parameter in the configuration file. Use this method to keep the configuration directory in its default location, and use another location for the index, typically because of disk occupation or performance reasons. You can specify a different configuration directory by setting the RECOLL_CONFDIR environment variable, or using the option to the &RCL; commands. In turn, the related index would be stored either under the configuration directory, or elsewhere if dbdir is locally set. This method would typically be used in special cases to index different areas of the file system to different indexes. See the section about configuring multiple indexes for more detail. There are quite a few more parameters which can be set in the configuration file itself for tailoring &RCL; data storage. They are described in a section of the configuration chapter. The size of the index is determined by the size of the set of documents, but the ratio can vary a lot. For a typical mixed set of documents, the index size will often be close to the data set size. In specific cases (a set of compressed mbox files for example), the index can become much bigger than the documents. It may also be much smaller if the documents contain a lot of images or other non-indexed data (an extreme example being a set of mp3 files where only the tags would be indexed). Of course, images, sound and video do not increase the index size, which means that in most cases, the space used by the index will be negligible compared to the total amount of data on the computer. The index data directory (xapiandb) only contains data that can be completely rebuilt by an index run (as long as the original documents exist), and it can always be destroyed safely. &XAP; index formats &XAP; versions usually support several formats for index storage. A given major &XAP; version will have a current format, used to create new indexes, and will also support the format from the previous major version. &XAP; will not convert automatically an existing index from the older format to the newer one. If you want to upgrade to the new format, or if a very old index needs to be converted because its format is not supported any more, you will have to explicitly delete the old index (typically ~/.recoll/xapiandb), then run a normal indexing command. Using recollindex option would not work in this situation. Security aspects The &RCL; index holds almost complete copies of the indexed documents. If confidential data is indexed, access to the database directory must be restricted. &RCL; will create the configuration directory with a mode of 0700 on &LIN; (access by owner only). As the index data directory is by default a sub-directory of the configuration directory, this should result in appropriate protection. If you use another setup, you should think of the kind of protection you need for your index, set the directory and files access modes appropriately, and also maybe adjust the umask used during index updates. Special considerations for big indexes This only needs concern you if your index is going to be bigger than around 10 GBytes. Most people have much smaller indexes. For reference, 10 GBytes would be around 4000 bibles, a lot of text. If you have a huge text dataset (remember: images don't count, the text content of PDFs is typically less than 5% of the file size), read on. &RCL; (thanks to &XAP;) can manage huge indexes: in 2025, we heard of a 550 GB, 11+ million documents index. Big indexes just need a bit of thinking ahead and organisation (and appropriate hardware). The amount of writing performed by &XAP; during index creation is not linear with the index size (it is somewhere between linear and quadratic). For big indexes this becomes a performance issue, and may even be an SSD disk wear issue. The problem can be mitigated by using the following approaches: Partition the data set and create several indexes of smaller size rather than a huge one. These indexes can then be queried in parallel (using the &RCL; external indexes facility), or merged using xapian-compact. Have a lot of RAM available and set the idxflushmb &RCL; configuration parameter as high as you can without swapping (experimentation will be needed). 200 would be a bare minimum in this context. Use Xapian 1.4.10 or newer, as this version brought a significant improvement in the amount of writes. &RCL; versions 1.38 and newer have an option to use multiple temporary indexes and a final merge internally. This was designed as a CPU performance optimization (increasing parallelism), but it may also provide a simple solution for the index size issue, though it may not give enough control over the temporary indexes physical placement for really huge datasets. Index configuration Variables stored inside the &RCL; configuration files control which areas of the file system are indexed, and how files are processed. The values can be set by editing the text files. Most of the more commonly used ones can also be adjusted by using the dialogs in the recoll GUI. The first time you start recoll, you will be asked whether or not you would like it to build the index. If you want to adjust the configuration before indexing, just click Cancel at this point, which will get you into the configuration interface. If you exit at this point, recoll will have created a default configuration directory with empty configuration files, which you can then edit. The configuration is documented inside the configuration chapter of this document, or in the recoll.conf5 manual page. Both documents are automatically generated from the comments inside the configuration file. The most immediately useful variable is topdirs, which lists the subtrees and files to be indexed. The variable name is a bit misleading for native English speakers, so the corresponding GUI label is Start folders. The applications needed to index file types other than text, HTML or email (e.g.: pdf, postscript, ms-word...) are described in the external packages section. There are two incompatible types of Recoll indexes, depending on the treatment of character case and diacritics. A further section describes the two types in more detail. The default type is appropriate in most cases. The index configuration GUI Most index configuration parameters can be set from the recoll GUI (set RECOLL_CONFDIR or use the option to affect a non-default index.) The interface is started from the Preferences Index Configuration menu entry. It is divided in four tabs, Global parameters, Local parameters, Web history (details) and Search parameters. The Global parameters tab allows setting global variables, like the lists of top/start directories, skipped paths, or stemming languages. The Local parameters tab allows setting variables that can be redefined for subdirectories. This second tab has an initially empty list of customisation directories, to which you can add. The variables are then set for the currently selected directory (or at the top level if the empty line is selected). The Search parameters section defines parameters which are used at query time, but are global to an index and affect all search tools, not only the GUI. The meaning for most entries in the interface is self-evident and documented by a ToolTip popup on the text label. For more detail, you may need to refer to the configuration section of this guide. The configuration tool normally respects the comments and most of the formatting inside the configuration file, so that it is quite possible to use it on hand-edited files, which you might nevertheless want to backup first... Multiple indexes Multiple &RCL; indexes can be created by using several configuration directories which would typically be set to index different areas of the file system. A plausible usage scenario for the multiple index feature would be for a system administrator to set up a central index for shared data, that you choose to search or not in addition to your personal data. Of course, there are other possibilities. for example, there are many cases where you know the subset of files that should be searched, and where narrowing the search can improve the results. You can achieve approximately the same effect by using a directory filter clause in a search, but multiple indexes may have better performance and may be worth the trouble with huge data sets. A more advanced use case would be to use multiple indexes to improve indexing performance, by updating several indexes in parallel (using multiple CPU cores and disks, or possibly several machines), and then either merging them, or querying them in parallel. A specific configuration can be selected by setting the RECOLL_CONFDIR environment variable or giving the option to recoll and recollindex. The recollindex program, used for creating or updating indexes, always works on a single index. The different configurations are entirely independent (no parameters are ever shared between configurations when indexing). All the search interfaces (recoll, recollq, the Python API, etc.) operate with a main configuration, from which both configuration and index data are used, and can also query data from multiple additional indexes. Only the index data from additional indexes is used, their configuration parameters are ignored. This implies that some parameters should be consistent among index configurations which are to be used together. When searching, the current main index (defined by RECOLL_CONFDIR or ) is always active. If this is undesirable, you can set up your base configuration to index an empty directory. Index configuration parameters can be set either by using a text editor on the files, or, for most parameters, by using the recoll index configuration GUI. In the latter case, the configuration directory for which parameters are modified is the one which was selected by RECOLL_CONFDIR or the parameter, and there is no way to switch configurations within the GUI. See the configuration section for a detailed description of the parameters Some configuration parameters must be consistent among a set of multiple indexes used together for searches. Most importantly, all indexes to be queried concurrently must have the same option concerning character case and diacritics stripping, but there are other constraints. Most of the relevant parameters affect the term generation. Using multiple configurations implies a small level of command line or file manager usage. The user must explicitly create additional configuration directories, the GUI will not do it. This is to avoid mistakenly creating additional directories when an argument is mistyped. Also, the GUI or the indexer must be launched with a specific option or environment to work on the right configuration. To start a new configuration, you need to create an empty directory in a location of your choice, and then instruct recoll or recollindex to use it by setting either a command line option (-c /some/directory), or an environment variable (RECOLL_CONFDIR=/some/directory). Any modification performed by the commands (e.g. configuration customisation or searches by recoll or index creation by recollindex) would then apply to the new directory and not to the default one. Creating and using an additional index: &LIN; example The following applies to &LIN; Initially creating the configuration and index: mkdir /path/to/my/new/config Configuring the new index can be done from the recoll GUI, launched from the command line to pass the -c option (you could create a desktop file to do it for you), and then using the GUI index configuration tool to set up the index. recoll -c /path/to/my/new/config Alternatively, you can just start a text editor on the main configuration file: someEditor /path/to/my/new/config/recoll.conf Creating and updating the index can be done from the command line: recollindex -c /path/to/my/new/config or from the File menu of a GUI launched with the same option (recoll, see above). The same GUI would also let you set up batch indexing for the new index. Real time indexing can only be set up from the GUI for the default index (the menu entry will be inactive if the GUI was started with a non-default -c option). The new index can be queried alone with: recoll -c /path/to/my/new/config Or, in parallel with the default index, by starting recoll without a -c option, and using the External Indexes tab in the preferences dialog, which can be reached either trough: Preferences GUI Configuration External Index Dialog or Query External index dialog . See the GUI external indexes section for more details. Creating an alternate index: &WIN; example When running &RCL; under &WIN;, the simplest approach for using separate indexes is to start the GUI from different desktop icons. The following approach can be used: Create an empty folder somewhere for holding the new configuration and index. Select the Recoll icon on the desktop and Copy/Paste it. If no desktop icon was created during installation, you can right-drag the recoll.exe program from C:\Program Files\Recoll to the desktop and select Create shortcuts here to create one. Right-click the new shortcut and go to the Properties->shortcut tab Modify the Target value from the original C:\Program Files\Recoll\recoll.exe to something like: "C:\Program Files\Recoll\recoll.exe" -c C:\Path\To\My\New\Directory Use double quotes around the directory path is it contains spaces. Then save the new Icon by clicking ok, and double click it to start a Recoll GUI for the new configuration. You should be presented with the initial configuration dialog. Any other method for running the GUI or recollindex program with a -c option or a RECOLL_CONFDIR value in the environment would work too. Index case and diacritics sensitivity You have a choice of building an index with terms stripped of character case and diacritics, or one with raw terms. For a source term of Résumé, the former will store resume, the latter Résumé. Each type of index allows performing searches insensitive to case and diacritics: with a raw index, the user entry will be expanded to match all case and diacritics variations present in the index. With a stripped index, the search term will be stripped before searching. A raw index allows using case and diacritics to discriminate between terms, e.g., returning different results when searching for US and us or resume and résumé. Read the section about search case and diacritics sensitivity for more details. The type of index to be created is controlled by the indexStripChars configuration variable which can only be changed by editing the configuration file. Any change implies an index reset (not automated by &RCL;), and all indexes in a search must be set in the same way (again, not checked by &RCL;). &RCL; creates a stripped index by default if indexStripChars is not set. As a cost for added capability, a raw index will be slightly bigger than a stripped one (around 10%). Also, searches will be more complex, so probably slightly slower, and the feature is relatively little used, so that a certain amount of weirdness cannot be excluded. One of the most adverse consequence of using a raw index is that some phrase and proximity searches may become impossible: because each term needs to be expanded, and all combinations searched for, the multiplicative expansion may become unmanageable. Indexing performance and resource usage Indexing threads configuration (&LIN;) Note: you don't probably don't need to read this. The default automatic configuration is fine is most cases. Only the part about disabling multithreading may be more commonly useful, so I'll prepend it here. In recoll.conf: thrQSizes = -1 -1 -1 The &RCL; indexing process recollindex can use multithreading to speed up indexing on multiprocessor systems. This is currently enabled on &MAC; and &LIN; systems, but not under &WIN;. The data processing used to index files is divided in several stages and some of the stages can be executed by multiple threads. The stages are: File system walking: this is always performed by the main thread. File conversion and data extraction. Text processing (splitting, stemming, etc.). &XAP; index update. You can also read a longer document about the transformation of &RCL; indexing to multithreading. The threads configuration is controlled by two configuration file parameters. thrQSizes This variable defines the job input queues configuration. There are three possible queues for stages 2, 3 and 4, and this parameter should give the queue depth for each stage (three integer values). If a value of -1 is used for a given stage, no queue is used, and the thread will go on performing the next stage. In practise, deep queues have not been shown to increase performance. A value of 0 for the first queue tells &RCL; to perform autoconfiguration (no need for anything else in this case, thrTCounts is not used) - this is the default configuration. thrTCounts This defines the number of threads used for each stage. If a value of -1 is used for one of the queue depths, the corresponding thread count is ignored. It makes no sense to use a value other than 1 for the last stage because updating the &XAP; index is necessarily single-threaded (and protected by a mutex). If the first value in thrQSizes is 0, thrTCounts is ignored. The following example would use three queues (of depth 2), and 4 threads for converting source documents, 2 for processing their text, and one to update the index. This was tested to be the best configuration on the test system (quadri-processor with multiple disks). thrQSizes = 2 2 2 thrTCounts = 4 2 1 The following example would use a single queue, and the complete processing for each document would be performed by a single thread (several documents will still be processed in parallel in most cases). The threads will use mutual exclusion when entering the index update stage. In practise the performance would be close to the precedent case in general, but worse in certain cases (e.g. a Zip archive would be performed purely sequentially), so the previous approach is preferred. YMMV... The 2 last values for thrTCounts are ignored. thrQSizes = 2 -1 -1 thrTCounts = 6 1 1 The following example would disable multithreading. Indexing will be performed by a single thread.thrQSizes = -1 -1 -1 Using multiple temporary indexes to improve indexing time (1.41.1) The underlying code is buggy between 1.38 and 1.41.0, fixed in 1.41.1. The bug affects the storing of document texts inside the index, so it only affects snippets generation inside result lists. If the result lists snippets are important to you, do not use the function with an affected release. In some cases, either when the input documents are simple and require little processing (e.g. HTML files), or possibly with a high number of available cores, the single-threaded Xapian index updates can become the performance bottleneck for indexing. In this case, it is possible to configure the indexer to use multiple temporary indexes which are merged at the end of the operation. This can provide a huge gain in performance, but, as opposed to multithreading for document preparation, it can also have a (slight) negative impact in some cases, so that it is not enabled by default. In most cases, this should also be turned off after the initial index creation is done, because it is extremely detrimental to the speed of small incremental updates. The parameter which controls the number of temporary indexes in recoll.conf is named thrTmpDbCnt. The default value is 0, meaning that no temporary indexes are used. If your document set is big, and you are using a processor with many cores for indexing, especially if the input documents are simple, it may be worth it to experiment with the value. For example, with a partial Wikipedia dump (many HTML small files), indexing times could be divided almost by three, by using four temporary indexes on a quad-core machine. More detail in this article on the Recoll Web site. All the tests were performed on SSDs, it is quite probable that this approach would not work well on spinning disks, at least not in its current form. Quieting down the indexing process The &RCL; indexing process, recollindex is usually configured to have very low priority and not disturb other activity on the machine. Still, on an idle system, even with multithreading disabled, it will use 100% of one core if needed and available. This may be enough to get a laptop fan to spin up in some cases. To prevent this, we want to limit the CPU utilisation for every short time quanta (e.g. not more than 20 mS for every 100 mS). This would be extremely difficult to do from inside the indexing process, because of the many places where intensive CPU usage takes place, some not under our control (&XAP; or external helpers). On Linux systems, you can use the cgroup facility to throttle the process CPU usage. This is further documented on the &RCL; Web site. Index update scheduling Periodic indexing Running the indexer The recollindex program performs index updates. You can start it either from the command line or from the File menu in the recoll GUI program. When started from the GUI, the indexing will run on the same configuration recoll was started on. When started from the command line, recollindex will use the RECOLL_CONFDIR variable or accept a confdir option to specify a non-default configuration directory. If the recoll program finds no index when it starts, it will automatically start indexing (except if canceled). The GUI File menu has entries to start or stop the current indexing operation. When indexing is not currently running, you have a choice between Update Index or Rebuild Index. The first choice only processes changed files, the second one erases the index before starting so that all files are processed. The GUI can also be used to manage the indexing operation. Stopping the indexer can be done from the recoll GUI File Stop Indexing menu entry. On &LIN;, the recollindex indexing process can be interrupted by sending an interrupt (Ctrl-C, SIGINT) or terminate (SIGTERM) signal. When stopped, some time may elapse before recollindex exits, because it needs to properly write data to disk (flush), and close the index. After an interruption, the index will be somewhat inconsistent because some operations which are normally performed at the end of the indexing pass will have been skipped (for example, the stemming and spelling databases will be inexistent or out of date). You just need to restart indexing at a later time to restore consistency. The indexing will restart at the interruption point (the full file tree will be traversed, but files that were indexed up to the interruption and for which the index is still up to date will not be reindexed). recollindex command line recollindex has many options which are listed in its manual page. Only a few will be described here. Option will reset the index when starting. This is almost the same as destroying the index files (the nuance is that the &XAP; format version will not be changed). Option will force the update of all documents without resetting the index first. This will not have the "clean start" aspect of , but the advantage is that the index will remain available for querying while it is rebuilt, which can be a significant advantage if it is very big (some installations need days for a full index rebuild). Option will force retrying files which previously failed to be indexed, for example because of a missing helper program. Of special interest also, maybe, are the and options. allows indexing an explicit list of files (given as command line parameters or read on stdin). tells recollindex to ignore file selection parameters from the configuration. Together, these options allow building a custom file selection process for some area of the file system, by adding the top directory to the skippedPaths list and using an appropriate file selection method to build the file list to be fed to recollindex . Trivial example: find . -name indexable.txt -print | recollindex -if recollindex will not descend into subdirectories specified as parameters, but just add them as index entries. It is up to the external file selection method to build the complete file list. &LIN;: using <command>cron</command> to automate indexing The most common way to set up indexing is to have a cron task execute it every night. For example the following crontab entry would do it every day at 3:30AM (supposing recollindex is in your PATH): 30 3 * * * recollindex > /some/tmp/dir/recolltrace 2>&1 Or, using anacron: 1 15 su mylogin -c "recollindex recollindex > /tmp/rcltraceme 2>&1" The &RCL; GUI has dialogs to manage crontab entries for recollindex. You can reach them from the Preferences Indexing Schedule menu. They only work with the good old cron, and do not give access to all features of cron scheduling. Entries created via the tool are marked with a RCLCRON_RCLINDEX= marker so that the tool knows which entries belong to it. As a side effect, this sets an environment variable for the process, but it's not actually used, this is just a marker. The usual command to edit your crontab is crontab (which will usually start the vi editor to edit the file). You may have more sophisticated tools available on your system. Please be aware that there may be differences between your usual interactive command line environment and the one seen by crontab commands. Especially the PATH variable may be of concern. Please check the crontab manual pages about possible issues. Real time indexing Real time monitoring/indexing is performed by starting the recollindex command. With this option, recollindex will permanently monitor file changes and update the index. On &WIN; systems, the monitoring process is started from the recoll GUI File menu. On &LIN;, there are other possibilities, see the following sections. When this is in use, the recoll GUI File menu makes two operations available: Stop and Trigger incremental pass. Trigger incremental pass has the same effect as restarting the indexer, and will cause a complete walk of the indexed area, processing the changed files, then switch to monitoring. This is only marginally useful, maybe in cases where the indexer is configured to delay updates, or to force an immediate rebuild of the stemming and phonetic data, which are only processed at intervals by the real time indexer. While it is convenient that data is indexed in real time, repeated indexing can generate a significant load on the system when files such as email folders change. Also, monitoring large file trees by itself significantly taxes system resources. You probably do not want to enable it if your system is short on resources. Periodic indexing is adequate in most cases. As of &RCL; 1.24, you can set the monitordirs configuration variable to specify that only a subset of your indexed files will be monitored for instant indexing. In this situation, an incremental pass on the full tree can be triggered by either restarting the indexer, or just running recollindex, which will notify the running process. The recoll GUI also has a menu entry for this. &LIN;: automatic daemon start with systemd The installation contains two example files (in share/recoll/examples) for starting the indexing daemon with systemd. recollindex.service would be used for starting recollindex as a user service. The indexer will start when the user logs in and run while there is a session open for them. recollindex@.service is a template service which would be used for starting the indexer at boot time, running as a specific user. It can be useful when running the text search as a shared service (e.g. when users access it through the Web UI). If configured to do so, the unit files should have been installed in your system's default systemd paths (usually /usr/lib/systemd/system/ and /usr/lib/systemd/user/). If not, you may need to copy the files there before starting the service. With the unit files installed in the proper location, the user unit can be started with the following commands: systemctl --user daemon-reload systemctl --user enable --now recollindex.service The system unit file can be enabled for a particular user by running, as root: systemctl daemon-reload systemctl enable --now recollindex@username.service (A valid user name should be substituted for username, of course.) &LIN;: automatic daemon start from the desktop session Under KDE, Gnome and some other desktop environments, the daemon can automatically started when you log in, by creating a desktop file inside the ~/.config/autostart directory. This can be done for you by the &RCL; GUI. Use the Preferences->Indexing Schedule menu. With older X11 setups, starting the daemon is normally performed as part of the user session script. The rclmon.sh script can be used to easily start and stop the daemon. It can be found in the examples directory (typically /usr/local/[share/]recoll/examples). For example, a good old xdm-based session could have a .xsession script with the following lines at the end: recollconf=$HOME/.recoll-home recolldata=/usr/local/share/recoll RECOLL_CONFDIR=$recollconf $recolldata/examples/rclmon.sh start fvwm The indexing daemon gets started, then the window manager, for which the session waits. By default the indexing daemon will monitor the state of the X11 session, and exit when it finishes, it is not necessary to kill it explicitly. (The X11 server monitoring can be disabled with option to recollindex). If you use the daemon completely out of an X11 session, you need to add option to disable X11 session monitoring (else the daemon will not start). Miscellaneous details Logging By default, the messages from the indexing daemon will be sent to the same file as those from the interactive commands (logfilename). You may want to change this by setting the daemlogfilename and daemloglevel configuration parameters. Also the log file will only be truncated when the daemon starts. If the daemon runs permanently, the log file may grow quite big, depending on the log level. &LIN;: increasing resources for inotify On Linux systems, monitoring a big tree may need increasing the resources available to inotify, which are normally defined in /etc/sysctl.conf. ### inotify # # cat /proc/sys/fs/inotify/max_queued_events - 16384 # cat /proc/sys/fs/inotify/max_user_instances - 128 # cat /proc/sys/fs/inotify/max_user_watches - 16384 # # -- Change to: # fs.inotify.max_queued_events=32768 fs.inotify.max_user_instances=256 fs.inotify.max_user_watches=32768 Especially, you will need to trim your tree or adjust the max_user_watches value if indexing exits with a message about errno ENOSPC (28) from inotify_add_watch. Slowing down the reindexing rate for fast changing files When using the real time monitor, it may happen that some files need to be indexed, but change so often that they impose an excessive load for the system. &RCL; provides a configuration option to specify the minimum time before which a file, specified by a wildcard pattern, cannot be reindexed. See the mondelaypatterns parameter in the configuration section. Fields and metadata Apart from the main text content, documents usually aggregate other data elements, such as an author names, dates, abstracts, etc. These are usually called metadata elements because they qualify or describe the data rather than being part of it. &RCL; has a slightly more general notion of field to mean any named piece of data associated with a document. Fields are extracted by the document handlers when processing a document and further used by &RCL; for searching or displaying results. Some fields, like e.g. a file modification time, have a strict and predefined usage. For most fields though, the processing is entirely configurable and defined in the fields configuration file Fields have two main processing options (at least one of which will be set if they are processed at all): Their content can be indexed. This makes them searchable. Their content can be stored in the index as document attribute data. This makes them displayable as part of a result list entry. These options are preset in the default fields file for common elements like a title or an author name. The terms from indexed fields are stored in the inverted index with a specific prefix, which makes them searchable by specifying the field name (e.g. author:Balzac). The terms can optionally also be used for the main index section to provide hits for non-prefixed searches. This is decided by an attribute in the fields file. In most cases, field data is provided by the document itself, for example, by HTML <meta> elements. They can also be obtained from other sources, this is described in the following section. Incorporating external metadata &LIN; and &MAC;: using extended attributes User extended attributes are named pieces of information that most modern file systems can attach to any file. &RCL; processes all extended attributes as document fields. Note that most fields are not indexed by default, you need to activate them by defining a prefix in the fields configuration file. A freedesktop standard defines a few special attributes, which are handled as such by &RCL;: mime_type If set, this overrides any other determination of the file MIME type. charset If set, this defines the file character set (mostly useful for plain text files). By default, other attributes are handled as &RCL; fields of the same name, after removing the "user" prefix on Linux. The name translation can be configured more precisely, inside the fields configuration file. Setting the document modification/creation date Some documents have an internal date attribute (e.g. emails), but most get their date from the file modification time. It is possible to set a document date different from the file's by setting a specific extended attribute. For obscure and uninteresting reasons, the name of the attribute is harcoded as modificationdate. Its contents should be the ASCII representation of a decimal integer representing the Unix time (seconds since the epoch). An example Linux command line for setting this particular field follow. The substituted date prints the example date parameter in Unix time format (seconds since the epoch). The date substitution will then be automatic, you do not need to customise the fields file. Using a command for importing external metadata During indexing, it is possible to import metadata for each file by executing commands. This allows, for example, extracting tag data from an external application and storing it in a field for indexing. See the section about the metadatacmds field in the main configuration chapter for a description of the configuration syntax. For example, if you would want &RCL; to use tags managed by tmsu in a field named tags, you would add the following to the configuration file: [/some/area/of/the/fs] metadatacmds = ; tags = tmsu tags %f Note the initial semi-colon after the equal sign. You may want to restrict this processing to a subset of the directory tree, because it may slow down indexing a bit ([some/area/of/the/fs]). In the example above, the output of tmsu is used to set a field named tags. The field name is arbitrary and could be tmsu or myfield just the same, but tags is an alias for the standard &RCL; keywords field, and the tmsu output will just augment its contents. This will avoid the need to extend the field configuration. Depending on the tmsu version, you may need/want to add options like --database=/some/db. After setting or updating the parameter, you will need to tell &RCL; to reindex the affected files. Just reset the index or see recollindex options -e or -r. You will then be able to search the field from the query language: tags:some/alternate/values or tags:all,these,values. Tags changes will not be detected by the indexer if the file itself did not change. One possible workaround would be to update the file ctime when you modify the tags, which would be consistent with how extended attributes function. A pair of chmod commands could accomplish this, or a touch -a. Alternatively, just couple the tag update with a recollindex -e -i /path/to/the/file. Miscellaneous indexing notes Indexing punctuation characters (1.39) By default, the &RCL; indexer only uses most non-alphanumeric characters as separators, treating them as white space, so that inputs like all words, and all,words produce the same terms. It may sometimes be useful to index some of these characters so that they can be used as discriminants for searches. This can be done by setting the indexedpunctuation configuration parameter. The value is an UTF-8 string, for example, setting: indexedpunctuation = %€ would allow searching separately 100% or 100€. The affected characters are indexed as terms with their own term positions, and they are their own separators, so that 100% and 100 % would be equivalent inputs. The PDF input handler The PDF format is very important for scientific and technical documentation, and document archival. It has extensive facilities for storing metadata along with the document, and these facilities are actually used in the real world. In consequence, the rclpdf.py PDF input handler has more complex capabilities than most others, and it is also more configurable, because some extra features need executing external commands, so that they are not enabled by default. Specifically, rclpdf.py has the following optional features: It can extract PDF outlines and bookmarks. It can be configured to extract specific metadata tags from an XMP packet. It can extract PDF attachments. It can automatically perform OCR if the document text is empty. This is done by executing an external program and is now described in a separate section, because the OCR framework can also be used with non-PDF image files. Extracting PDF outlines and bookmarks These data elements will be extracted if pdfoutline=1 is set in the configuration file and the pdftohtml command (from poppler-tools) is available. Executing the command takes extra time, which is why the feature is not enabled by default. XMP fields extraction The rclpdf.py script in &RCL; version 1.23.2 and later can extract XMP metadata fields by executing the pdfinfo command (usually found with poppler-utils). This is controlled by the pdfextrameta configuration variable, which specifies which tags to extract and, possibly, how to rename them. The pdfextrametafix variable can be used to designate a file with Python code to edit the metadata fields (available for &RCL; 1.23.3 and later. 1.23.2 has equivalent code inside the handler script). Example: import sys import re class MetaFixer(object): def __init__(self): pass def metafix(self, nm, txt): if nm == 'bibtex:pages': txt = re.sub(r'--', '-', txt) elif nm == 'someothername': # do something else pass elif nm == 'stillanother': # etc. pass return txt def wrapup(self, metaheaders): pass If the 'metafix()' method is defined, it is called for each metadata field. A new MetaFixer object is created for each PDF document (so the object can keep state for, for example, eliminating duplicate values). If the 'wrapup()' method is defined, it is called at the end of XMP fields processing with the whole metadata as parameter, as an array of '(nm, val)' pairs, allowing an alternate approach for editing or adding/deleting fields. See this page for a more detailed discussion about indexing PDF XMP properties. PDF attachment indexing Indexing PDF attachments used to be done with the pdftk toolkit and was disabled by default. As of &RCL; 1.43.1, it uses the Poppler pdfdetach command, and it is enabled in the default configuration. Set the pdfattach configure variable to 0 to disable the feature. The PDF attachments are indexed as sub-documents of the PDF file. Running OCR on image documents The &RCL; PDF handler (rclpdf.py), and the alternate image handler (rclimg.py) have the ability to call an external OCR program (only as of &RCL; 1.43.3 for the latter). The operation details are slightly different for PDF and other image documents. To enable the &RCL; OCR feature, you need to install one of the supported OCR applications (tesseract or ABBYY), enable OCR in the PDF or image handler by setting the appropriate configuration parameter, and tell &RCL; how to run the OCR by setting the specific OCR configuration variables. All parameters can be localized in subdirectories through the usual main configuration mechanism (path sections). Running OCR is relatively slow and expensive. Recoll caches OCR output, stored as separate files. The caching is ultimately based on a hash value of the original file contents, so that it is immune to file renames. A first path-based layer ensures fast operation for unchanged (unmoved files), and the data hash (which is still orders of magnitude faster than OCR) is only re-computed if the file was moved. OCR is only performed if the file was not previously processed or if it changed. The support for a specific OCR program is implemented in a simple Python module. It should be straightforward to add support for any OCR engine with a capability to run from the command line. Modules initially exist for tesseract (Linux and &WIN;), and ABBYY FineReader (Linux, tested with version 11). ABBYY FineReader is a commercial closed source program, but it sometimes perform better than tesseract. OCR for PDF documents If modifying the files (or a copy) is acceptable, then using OCRmyPDF to add a text layer to the PDF itself is a better solution than using the &RCL; OCR feature: e.g. allowing &RCL; to position the PDF viewer on the search target when opening the document, and permitting secondary search in the native tool. The &RCL; OCR is enabled by the pdfocr configuration variable, and will only be executed if the processed file has no text content. Example configuration fragment in recoll.conf: pdfocr = 1 ocrprogs = tesseract tesseractlang = eng The pdfocr variable can be set globally or for specific subtrees. Under Windows the recoll.conf configuration file is found by default in C:/Users/[you]/AppData/Local/Recoll/recoll.conf and you will probably need to indicate the actual path of the tesseract command by setting the tesseractcmd variable, for example: tesseractcmd = C:/Program Files/Tesseract-OCR/tesseract.exe OCR for image documents As of &RCL; 1.43.3, the alternate Python rclimg.py handler can execute OCR on image files. The default image handler is the Perl-based rclimg script and has not been OCR-enabled. So, for performing image OCR, you need to tell &RCL; to use the alternate handler and also to enable OCR by setting the imgocr variable. This is done by editing two text files in the index configuration directory (by default ~/.recoll under &LIN; or &MAC;, or C:/users/[you]/AppData/Local/Recoll under &WIN;. Example configuration: In mimeconf (e.g. ~/.recoll/mimeconf): [index] image/gif = execm rclimg.py image/jp2 = execm rclimg.py image/jpeg = execm rclimg.py image/png = execm rclimg.py image/tiff = execm rclimg.py image/x-nikon-nef = execm rclimg.py image/x-xcf = execm rclimg.py Of course you can also only use a subset of the image types. In recoll.conf, by example for Windows, the tesseractcmd setting is usually not needed otherwise: ocrprogs = tesseract tesseractcmd = C:/Program Files(x86)/Tesseract-OCR/tesseract.exe tesseractlang = eng [/path/to/my/images/directory] imgocr = 1 If you are running an older &RCL; release, you can grab an up to date copy of rclimg.py from the git repository. You will have to copy it to the &RCL; filters/ directory and make it executable. The script needs to run from the installation directory because of how it runs the OCR script. Running a speech to text program on audio files If the OpenAI Whisper program is available and the appropriate parameters set in the configuration files, the &RCL; audio file handler will run speech to text recognition on audio files and the resulting text will be indexed. See the the FAQ entry for more details. The results of the speech recognition will be cached in the same manner as the results of image OCR. Removable volumes &RCL; used to have no support for indexing removable volumes (portable disks, USB keys, etc.). Recent versions have improved the situation and support indexing removable volumes in two different ways: By indexing the volume in the main, fixed, index, and ensuring that the volume data is not purged if the indexing runs while the volume is mounted. (since &RCL; 1.25.2). By storing a volume index on the volume itself (since &RCL; 1.24). Indexing removable volumes in the main index As of version 1.25.2, &RCL; provides a simple way to ensure that the index data for an absent volume will not be purged. Two conditions must be met: The volume mount point must be a member of the topdirs list. The mount directory must be empty (when the volume is not mounted). If recollindex finds that one of the topdirs is empty when starting up, any existing data for the tree will be preserved by the indexing pass (no purge for this area). Self contained volumes As of &RCL; 1.24, it has become possible to build self-contained datasets including a &RCL; configuration directory and index together with the indexed documents, and to move such a dataset around (for example copying it to an USB drive), without having to adjust the configuration for querying the index. This is a query-time feature only. The index must only be updated in its original location. If an update is necessary in a different location, the index must be reset. The principle of operation is that the configuration stores the location of the original configuration directory, which must reside on the movable volume. If the volume is later mounted elsewhere, &RCL; adjusts the paths stored inside the index by the difference between the original and current locations of the configuration directory. To make a long story short, here follows a script to create a &RCL; configuration and index under a given directory (given as single parameter). The resulting data set (files + recoll directory) can later to be moved to a CDROM or thumb drive. Longer explanations come after the script. #!/bin/sh fatal() { echo $*;exit 1 } usage() { fatal "Usage: init-recoll-volume.sh <top-directory>" } test $# = 1 || usage topdir=$1 test -d "$topdir" || fatal $topdir should be a directory confdir="$topdir/recoll-config" test ! -d "$confdir" || fatal $confdir should not exist mkdir "$confdir" cd "$topdir" topdir=`pwd` cd "$confdir" confdir=`pwd` (echo topdirs = '"'$topdir'"'; \ echo orgidxconfdir = $topdir/recoll-config) > "$confdir/recoll.conf" recollindex -c "$confdir" The examples below will assume that you have a dataset under /home/me/mydata/, with the index configuration and data stored inside /home/me/mydata/recoll-confdir. In order to be able to run queries after the dataset has been moved, you must ensure the following: The main configuration file must define the orgidxconfdir variable to be the original location of the configuration directory (orgidxconfdir=/home/me/mydata/recoll-confdir must be set inside /home/me/mydata/recoll-confdir/recoll.conf in the example above). The configuration directory must exist with the documents, somewhere under the directory which will be moved. E.g. if you are moving /home/me/mydata around, the configuration directory must exist somewhere below this point, for example /home/me/mydata/recoll-confdir, or /home/me/mydata/sub/recoll-confdir. You should keep the default locations for the index elements which are relative to the configuration directory by default (principally dbdir). Only the paths referring to the documents themselves (e.g. topdirs values) should be absolute (in general, they are only used when indexing anyway). Only the first point needs an explicit user action, the &RCL; defaults are compatible with the third one, and the second is natural. If, after the move, the configuration directory needs to be copied out of the dataset (for example because the thumb drive is too slow), you can set the curidxconfdir, variable inside the copied configuration to define the location of the moved one. For example if /home/me/mydata is now mounted onto /media/me/somelabel, but the configuration directory and index has been copied to /tmp/tempconfig, you would set curidxconfdir to /media/me/somelabel/recoll-confdir inside /tmp/tempconfig/recoll.conf. orgidxconfdir would still be /home/me/mydata/recoll-confdir in the original and the copy. If you are regularly copying the configuration out of the dataset, it will be useful to write a script to automate the procedure. This can't really be done inside &RCL; because there are probably many possible variants. One example would be to copy the configuration to make it writable, but keep the index data on the medium because it is too big - in this case, the script would also need to set dbdir in the copied configuration. The same set of modifications (&RCL; 1.24) has also made it possible to run queries from a readonly configuration directory (with slightly reduced function of course, such as not recording the query history). &LIN;: indexing visited Web pages With the help of a Firefox extension, &RCL; can index the Internet pages that you visit. The extension has a long history: it was initially designed for the Beagle indexer, then adapted to &RCL; and the Firefox XUL API. The current version of the extension is located in the Mozilla add-ons repository uses the WebExtensions API, and works with current Firefox versions. The extension works by copying visited Web pages to an indexing queue directory, which &RCL; then processes, storing the data into a local cache, then indexing it, then removing the file from the queue. The local cache is not an archiveAs mentioned above, a copy of the indexed Web pages is retained by Recoll in a local cache (from which data is fetched for previews, or when resetting the index). The cache is not changed by an index reset, just read for indexing. The cache has a maximum size, which can be adjusted from the Index configuration / Web history panel (webcachemaxmbs parameter in recoll.conf). Once the maximum size is reached, old pages are erased to make room for new ones. The pages which you want to keep indefinitely need to be explicitly archived elsewhere. Using a very high value for the cache size can avoid data erasure, but see the above 'Howto' page for more details and gotchas. The visited Web pages indexing feature can be enabled on the &RCL; side from the GUI Index configuration panel, or by editing the configuration file (set processwebqueue to 1). The &RCL; GUI has a tool to list and edit the contents of the Web cache. (ToolsWebcache editor) The recollindex command has two options to help manage the Web cache: will recover the space from erased entries. It may need to use twice the disk space currently needed for the Web cache. will extract all current entries into pairs of metadata and data files created inside destdir You can find more details on Web indexing, its usage and configuration in a Recoll 'Howto' entry. Searching Introduction Getting answers to specific queries is of course the whole point of &RCL;. The multiple provided interfaces always understand simple queries made of one or several words, and return appropriate results in most cases. In order to make the most of &RCL; though, it may be worthwhile to understand how it processes your input. Five different modes exist: In All Terms mode, &RCL; looks for documents containing all your input terms. The Query Language mode behaves like All Terms in the absence of special input, but it can also do much more. This is the best mode for getting the most of &RCL;. It is usable from all possible interfaces (GUI, command line, Web UI, ...), and is described here. In Any Term mode, &RCL; looks for documents containing any your input terms, preferring those which contain more. In File Name mode, &RCL; will only match file names, not content. Using a small subset of the index allows things like left-hand wildcards without performance issues, and may sometimes be useful. The GUI Advanced Search mode is actually not more powerful than the query language, but it helps you build complex queries without having to remember the language, and avoids any interpretation ambiguity, as it bypasses the user input parser. These five input modes are supported by the different user interfaces which are described in the following sections. Searching with the Qt graphical user interface (GUI) The recoll program provides the main user interface for searching. It is based on the Qt library. recoll has two search interfaces: Simple search (the default, on the main screen) has a single entry field where you can enter multiple words or a query language query. Advanced search (a panel accessed through the Tools menu or the toolbox bar icon) has multiple entry fields, which you may use to build a logical condition, with additional filtering on file type, location in the file system, modification date, and size. The Advanced Search tool is easier to use, but not actually more powerful, than the Simple Search in query language mode. Its name is historical, but Assisted Search would probably have been a better designation. In most text areas, you can enter the terms as you think them, even if they contain embedded punctuation or other non-textual characters (e.g. &RCL; can handle things like email addresses). The main case where you should enter text differently from how it is printed is for east-asian languages (Chinese, Japanese, Korean). Words composed of single or multiple characters should be entered separated by white space in this case (they would typically be printed without white space). Some searches can be quite complex, and you may want to re-use them later, perhaps with some tweaking. &RCL; can save and restore searches. See Saving and restoring queries. Simple search Start the recoll program. Possibly choose a search mode: Any term, All terms, File name or Query language. Enter search term(s) in the text field at the top of the window. Click the Search button or hit the Enter key to start the search. The initial default search mode is Query language. Without special directives, this will look for documents containing all of the search terms (the ones with more terms will get better scores), just like the All Terms mode. Any term will search for documents where at least one of the terms appear. File name will exclusively look for file names, not contents All search modes allow terms to be expanded with wildcards characters (*, ?, []). See the section about wildcards for more details. In all modes except File name, you can search for exact phrases (adjacent words in a given order) by enclosing the input inside double quotes. Ex: "virtual reality". The Query Language features are described in a separate section. When using a stripped index (the default), character case has no influence on search, except that you can disable stem expansion for any term by capitalizing it. E.g.: a search for floor will also normally look for flooring, floored, etc., but a search for Floor will only look for floor, in any character case. Stemming can also be disabled globally in the preferences. When using a raw index, the rules are a bit more complicated. &RCL; remembers the last few searches that you performed. You can directly access the search history by clicking the clock button on the right of the search entry, while the latter is empty. Otherwise, the history is used for entry completion (see next). Only the search texts are remembered, not the mode (all/any/file name). While text is entered in the search area, recoll will display possible completions, filtered from the history and the index search terms. This can be disabled with a GUI Preferences option. Double-clicking on a word in the result list or a preview window will insert it into the simple search entry field. You can cut and paste any text into an All terms or Any term search field, punctuation, newlines and all - except for wildcard characters (single ? characters are ok). &RCL; will process it and produce a meaningful search. This is what most differentiates this mode from the Query Language mode, where you have to care about the syntax. The File name search mode will specifically look for file names. The point of having a separate file name search is that wildcard expansion can be performed more efficiently on a small subset of the index (allowing wildcards on the left of terms without excessive cost). Things to know: White space in the entry should match white space in the file name, and is not treated specially. The search is insensitive to character case and accents, independently of the type of index. An entry without any wildcard character and not capitalized will be prepended and appended with '*' (e.g.: etc -> *etc*, but Etc -> etc). If you have a big index (many files), excessively generic fragments may result in inefficient searches. The filters panel (1.32) By default, the GUI displays the filters panel on the left of the results area. You can adjust the width of the panel, and hide it by squeezing it completely. The width will be memorized for the next session. The panel is only active in Query Language search mode, and it allows filtering by date or filesystem location, by adding date: and dir: clauses to the effective query text. The dates filter can be activated by clicking the checkbox. It has two assisted date entry widgets, for the minimum and maximum dates of the search period. The directory filter displays a subset of the filesystem directories, reduced to the indexed area, as defined by the topdirs list and the name exclusion parameters. Some directories may not be shown at all, depending on their (lack of) indexable content and other indexing parameters. By default, the depth of the displayed tree is limited at 2 levels under the start directories. You can change this in the GUI Preferences, User interface panel. Please note that increasing the depth can strongly delay the GUI startup, you should experiment by single increments if you want to change the value. You can independantly select and deselect directories by clicking them. Note that selecting a directory will activate the whole subtree for searching, there is no need to select the subdirectories, and no way to exclude some of them (use Query language dir: clauses if this is needed). The result list After starting a search, a list of results will instantly be displayed in the main window. By default, the document list is presented in order of relevance (how well the application estimates that the document matches the query). You can sort the results by ascending or descending date by using the vertical arrows in the toolbar. Each result is displayed as a structured text paragraph. The standard format is typically adequate, but the content and presentation are entirely customisable. Most results will contain Preview and Open clickable links. Clicking the Preview link will open an internal preview window for the document. Further Preview clicks for the same search will open tabs in the existing preview window. You can use Shift+Click to force the creation of another preview window, which may be useful to view the documents side by side. (You can also browse successive results in a single preview window by typing Shift+ArrowUp/Down in the window). Clicking the Open link will start an external viewer for the document. By default, &RCL; lets the desktop choose the appropriate application for most document types. See further for customising the applications. The Preview and Open links may not be present for all entries. They are only available, respectively, for documents with MIME types that &RCL; can extract text from, and for documents that have a configured viewer. However, you can modify the configuration to adjust this behavior. In more detail: The Preview link will appear for documents with a MIME type present in the [index] section of the mimeconf file, and, only if the textunknownasplain configuration variable is set, for all types identified as a subtype of text (text/*). The Open link will appear for documents with a MIME type present in the [view] section of the mimeview configuration file. If textunknownasplain is set and no specific viewer is found for a subtype of text, the viewer for text/plain will be used. You can click on the Query details link at the top of the results page to see the actual Xapian query, after stem expansion and other processing. Double-clicking on any word inside the result list or a preview window will insert it into the simple search text. The result list is divided into pages. You can change the page size in the preferences. Use the arrow buttons in the toolbar or the links at the bottom of the page to browse the results. No results: the spelling suggestions When a search yields no result, and if the aspell dictionary is configured, &RCL; will try to check for misspellings among the query terms, and will propose lists of replacements. Clicking on one of the suggestions will replace the word and restart the search. You can hold any of the modifier keys (Ctrl, Shift, etc.) while clicking if you would rather stay on the suggestion screen because several terms need replacement. The result list right-click menu Apart from the preview and edit links, you can display a pop-up menu by right-clicking over a paragraph in the result list. This menu has the following entries: Preview Open Open With Run Script Copy File Name Copy Url Save to File Find similar Preview Parent document Open Parent document Open Snippets Window The Preview and Open entries do the same thing as the corresponding links. Open With (&LIN;) lets you open the document with one of the applications claiming to be able to handle its MIME type (the information comes from the .desktop files in /usr/share/applications). Run Script allows starting an arbitrary command on the result file. It will only appear for results which are top-level files. See further for a more detailed description. The Copy File Name and Copy Url copy the relevant data to the clipboard, for later pasting. Save to File allows saving the contents of a result document to a chosen file. This entry will only appear if the document does not correspond to an existing file, but is a subdocument inside such a file (e.g.: an email attachment). It is especially useful to extract attachments with no associated editor. The Open/Preview Parent document entries allow working with the higher level document (e.g. the email message an attachment comes from). &RCL; is sometimes not totally accurate as to what it can or can't do in this area. For example the Parent entry will also appear for an email which is part of an mbox folder file, but you can't actually visualize the mbox (there will be an error dialog if you try). If the document is a top-level file, Open Parent will start the default file manager on the enclosing filesystem directory. The Find similar entry will select a number of relevant term from the current document and enter them into the simple search field. You can then start a simple search, with a good chance of finding documents related to the current result. I can't remember a single instance where this function was actually useful to me... The Open Snippets Window entry will only appear for documents which support page breaks (typically PDF, Postscript, DVI). The snippets window lists extracts from the document, taken around search terms occurrences, along with the corresponding page number, as links which can be used to start the native viewer on the appropriate page. If the viewer supports it, its search function will also be primed with one of the search terms. The result table As an alternative to the result list, the results can also be displayed in spreadsheet-like fashion. You can switch to this presentation by clicking the table-like icon in the toolbar (this is a toggle, click again to restore the list). Clicking on the column headers will allow sorting by the values in the column. You can click again to invert the order, and use the header right-click menu to reset sorting to the default relevance order (you can also use the sort-by-date arrows to do this). Both the list and the table display the same underlying results. The sort order set from the table is still active if you switch back to the list mode. You can click twice on a date sort arrow to reset it from there. The header right-click menu allows adding or deleting columns. The columns can be resized, and their order can be changed (by dragging). All the changes are recorded when you quit recoll Hovering over a table row will update the detail area at the bottom of the window with the corresponding values. You can click the row to freeze the display. The bottom area is equivalent to a result list paragraph, with links for starting a preview or a native application, and an equivalent right-click menu. Typing Esc (the Escape key) will unfreeze the display. Using Shift-click on a row will display the document extracted text (somewhat like a preview) instead of the document details. The functions of Click and Shift-Click can be reversed in the GUI preferences. The preview window The preview window opens when you first click a Preview link inside the result list. Subsequent preview requests for a given search open new tabs in the existing window (except if you hold the Shift key while clicking which will open a new window for side by side viewing). Starting another search and requesting a preview will create a new preview window. The old one stays open until you close it. You can close a preview tab by typing Ctrl-W (Ctrl + W) in the window. Closing the last tab, or using the window manager button in the top of the frame will also close the window. You can display successive or previous documents from the result list inside a preview tab by typing Shift+Down or Shift+Up (Down and Up are the arrow keys). A right-click menu in the text area allows switching between displaying the main text or the contents of fields associated to the document (e.g.: author, abtract, etc.). This is especially useful in cases where the term match did not occur in the main text but in one of the fields. In the case of images, you can switch between three displays: the image itself, the image metadata as extracted by exiftool (used as main body text) and the fields. You can print the current preview window contents by typing Ctrl-P (Ctrl + P) in the window text. Searching inside the preview The preview window has an internal search capability, mostly controlled by the panel at the bottom of the window, which works in two modes: as a classical editor incremental search, where we look for the text entered in the entry zone, or as a way to walk the matches between the document and the &RCL; query that found it. Incremental text search The preview tabs have an internal incremental search function. You initiate the search either by typing a / (slash) or CTL-F inside the text area or by clicking into the Search for: text field and entering the search string. You can then use the Next and Previous buttons to find the next/previous occurrence. You can also type F3 inside the text area to get to the next occurrence. If you have a search string entered and you use Ctrl-Up/Ctrl-Down to browse the results, the search is initiated for each successive document. If the string is found, the cursor will be positioned at the first occurrence of the search string. Walking the match lists If the entry area is empty when you click the Next or Previous buttons, the editor will be scrolled to show the next match to any search term (the next highlighted zone). If you select a search group from the dropdown list and click Next or Previous, the match list for this group will be walked. This is not the same as a text search, because the occurrences will include non-exact matches (as caused by stemming or wildcards). The search will revert to the text mode as soon as you edit the entry area. Assisted Complex Search (A.K.A. "Advanced Search") The advanced search dialog helps you build more complex queries without having to memorize the search language constructs. The dialog can be opened through the Tools menu or through the main toolbar. There is also an option to have it open when the program starts. The results of the search are processed and displayed in the same way as the results from the "simple search". &RCL; keeps a history of searches. See Advanced search history. The dialog has two tabs: The first tab lets you specify terms to search for, and permits specifying multiple clauses which are combined to build the search. The second tab allows filtering the results according to file size, date of modification, MIME type, or location. Click on the Start Search button in the advanced search dialog, or type Enter in any text field to start the search. The button in the main window always performs a simple search. Click on the Show query details link at the top of the result page to see the query expansion. Advanced search: the "find" tab This part of the dialog lets you construct a query by combining multiple clauses of different types. Each entry field is configurable for the following modes: All terms. Any term. None of the terms. Phrase (exact terms in order within an adjustable window). Proximity (terms in any order within an adjustable window). Filename search. Additional entry fields can be created by clicking the Add clause button. When searching, the non-empty clauses will be combined either with an AND or an OR conjunction, depending on the choice made on the left (All clauses or Any clause). Entries of all types except "Phrase" and "Near" accept a mix of single words and phrases enclosed in double quotes. Stemming and wildcard expansion will be performed as for simple search. Phrase and Proximity searches These two clauses look for a group of terms in specified relative positions. They differ in the sense that the order of input terms is significant for phrase searches, but not for proximity searches. The latter do not impose an order on the words. In both cases, an adjustable number (slack) of non-matched words may be accepted between the searched ones. For phrase searches, the default count is zero (exact match). For proximity searches it is ten (meaning that two search terms, would be matched if found within a window of twelve words). Examples: a phrase search for quick fox with a slack of 0 will match quick fox but not quick brown fox. With a slack of 1 it will match the latter, but not fox quick. A proximity search for quick fox with the default slack will match the latter, and also a fox is a cunning and quick animal. The slack can be adjusted with the counter to the left of the input area Advanced search: the "filter" tab This part of the dialog has several sections which allow filtering the results of a search according to a number of criteria The first section allows filtering by dates of last modification. You can specify both a minimum and a maximum date. The initial values are set according to the oldest and newest documents found in the index. The next section allows filtering the results by file size. There are two entries for minimum and maximum size. Enter decimal numbers. You can use suffix multipliers: k/K, m/M, g/G, t/T for 10E3, 10E6, 10E9, 10E12 respectively. The next section allows filtering the results by their MIME types, or MIME categories (e.g.: media/text/message/etc.). You can transfer the types between two boxes, to define which will be included or excluded by the search. The state of the file type selection can be saved as the default (the file type filter will not be activated at program start-up, but the lists will be in the restored state). The bottom section allows restricting the search results to a sub-tree of the indexed area. You can use the Invert checkbox to search for files not in the sub-tree instead. If you use directory filtering often and on big subsets of the file system, you may think of setting up multiple indexes instead, as the performance may be better. You can use relative/partial paths for filtering. E.g., entering dirA/dirB would match either /dir1/dirA/dirB/myfile1 or /dir2/dirA/dirB/someother/myfile2. Advanced search history The advanced search tool memorizes the last 100 searches performed. You can walk the saved searches by using the up and down arrow keys while the keyboard focus belongs to the advanced search dialog. The complex search history can be erased, along with the one for simple search, by selecting the File Erase Search History menu entry. Document history Documents that you actually view (with the internal preview or an external tool) are entered into the document history, which is remembered. You can display the history list by using the Tools/Doc History menu entry. You can erase the document history by using the Erase document history entry in the File menu. Saving and restoring queries Both simple and advanced query dialogs save recent history, but the amount is limited: old queries will eventually be forgotten. Also, important queries may be difficult to find among others. This is why both types of queries can also be explicitly saved to files, from the GUI menus: File Save last query / Load last query The default location for saved queries is a subdirectory of the current configuration directory, but saved queries are ordinary files and can be written or moved anywhere. Some of the saved query parameters are part of the preferences (e.g. autophrase or the active external indexes), and may differ when the query is loaded from the time it was saved. In this case, &RCL; will warn of the differences, but will not change the user preferences. Sorting search results and collapsing duplicates The documents in a result list are normally sorted in order of relevance. It is possible to specify a different sort order, either by using the vertical arrows in the GUI toolbox to sort by date, or switching to the result table display and clicking on any header. The sort order chosen inside the result table remains active if you switch back to the result list, until you click one of the vertical arrows, until both are unchecked (you are back to sort by relevance). Sort parameters are remembered between program invocations, but result sorting is normally always inactive when the program starts. It is possible to keep the sorting activation state between program invocations by checking the Remember sort activation state option in the preferences. It is also possible to hide duplicate entries inside the result list (documents with the exact same contents as the displayed one). The test of identity is based on an MD5 hash of the document container, not only of the text contents (so that e.g., a text document with an image added will not be a duplicate of the text only). Duplicates hiding is controlled by an entry in the GUI configuration dialog, and is off by default. When a result document does have undisplayed duplicates, a Dups link will be shown with the result list entry. Clicking the link will display the paths (URLs + ipaths) for the duplicate entries. The term explorer tool &RCL; automatically manages the expansion of search terms to their derivatives (e.g.: plural/singular, verb inflections). But there are other cases where the exact search term is not known. For example, you may not remember the exact spelling, or only know the beginning of the name. The search will only propose replacement terms with spelling variations when no matching document were found. In some cases, both proper spellings and mispellings are present in the index, and it may be interesting to look for them explicitly. The term explorer tool (started from the toolbar icon or from the Term explorer entry of the Tools menu) can be used to search the full index terms list, or (later addition), display some statistics or other index information. It has several modes of operations: Wildcard In this mode of operation, you can enter a search string with shell-like wildcards (*, ?, []). e.g.: xapi* would display all index terms beginning with xapi. (More about wildcards here). Regular expression This mode will accept a regular expression as input. Example: word[0-9]+. The expression is implicitly anchored at the beginning. E.g.: press will match pression but not expression. You can use .*press to match the latter, but be aware that this will cause a full index term list scan, which can be quite long. Stem expansion This mode will perform the usual stem expansion normally done as part user input processing. As such it is probably mostly useful to demonstrate the process. Spelling/Phonetic In this mode, you enter the term as you think it is spelled, and &RCL; will do its best to find index terms that sound like your entry. This mode uses the Aspell spelling application, which must be installed on your system for things to work (if your documents contain non-ASCII characters, &RCL; needs an aspell version newer than 0.60 for UTF-8 support). The language which is used to build the dictionary out of the index terms (which is done at the end of an indexing pass) is the one defined by your NLS environment. Weird things will probably happen if languages are mixed up. Show index statistics This will print a long list of boring numbers about the index List files which could not be indexed This will show the files which caused errors, usually because recollindex could not translate their format into text. Note that in cases where &RCL; does not know the beginning of the string to search for (e.g. a wildcard expression like *coll), the expansion can take quite a long time because the full index term list will have to be processed. The expansion is currently limited at 10000 results for wildcards and regular expressions. It is possible to change the limit in the configuration file. Double-clicking on a term in the result list will insert it into the simple search entry field. You can also cut/paste between the result list and any entry field (the end of lines will be taken care of). The Query Fragments window The Query Fragments window can be used to control filtering query language elements modifying the current query, simply by clicking a button. This can be useful to save typing, or avoid memorizing, simple clauses of common usage (e.g. selecting only standalone documents or attachments, or filtering out Web results, selecting a file system subtree, a file type, etc.). Selecting the Tools Query Fragments menu entry will open the dialog. The contents of the window are entirely customisable, and defined by the contents of a XML text file, named fragment-buttons.xml and which will be looked for in the current index configuration directory. The sample file distributed with &RCL; contains a number of example filters. This will be automatically copied to the configuration directory if the file does not exist in there (e.g. ~/.recoll/fragment-buttons.xml under Linux and MacOS, $HOME/AppData/Local/Recoll/fragment-buttons.xml for &WIN;). Editing the copy will allow you to configure the tool for your needs . The fragment-buttons.xml file was named fragbuts.xml up to &RCL; version 1.31.0. This was deemed too close to offensive for native English speakers, so that the file was renamed. An existing fragbuts.xml will still be used if fragment-buttons.xml does not exist. No automatic renaming will be performed. Here follows an example window: And the corresponding configuration file: -rclbes:BGL rclbes:BGL issub:0 issub:1 date:2010-01-01/2010-12-31 ext:cpp OR ext:cxx dir:/my/great/directory ]]> There are two types of groupings radiobuttons and buttons, each defining a line of checkbuttons or radiobuttons inside the window. Any number of buttons can be selected, but the radiobuttons in a line are exclusive. Buttons are defined by a fragbutton section, which provides the label for a button, and the Query Language fragment which will be added (as an AND filter) before performing the query if the button is active. dir:/my/great/directory ]]> It is also possible to add message elements inside the groups, for documenting the behaviour. message elements have a label but no frag element. Example: ]]> The label contents are interpreted as HTML. Take care to replace opening < characters with the &lt; entity if you use tags. The only thing that you need to know about XML for editing this file is that any opening tag like <label> needs to be matched by a closing tag after the value: </label>. You will normally edit the file with a regular text editor, like, e.g. vi or notepad. Double-clicking the file in a file manager may not work, because this usually opens it in a Web browser, which will not let you modify the contents. Searching across multiple indexes See the section describing the use of multiple indexes for generalities. Only the aspects concerning the recoll GUI are described here. A recoll program instance is always associated with a main index, which is the one to be updated when requested from the File menu, but it can use any number of external &RCL; indexes for searching. The external indexes can be selected through the External Indexes tab in the preferences dialog, which can be reached either trough: Preferences GUI Configuration External Index Dialog or Query External index dialog . Index selection is performed in two phases. A set of all usable indexes must first be defined, and then the subset of indexes to be used for searching. These parameters are retained across program executions (there are kept separately for each &RCL; configuration). The set of all indexes is usually quite stable, while the active ones might typically be adjusted quite frequently. The main index (defined by RECOLL_CONFDIR) is always active. If this is undesirable, you can set up your base configuration to index an empty directory. When adding a new index to the set, you can select either a &RCL; configuration directory, or directly a &XAP; index directory. In the first case, the &XAP; index directory will be obtained from the selected configuration. If the external index is actually located on a volume mounted from another machine, and references remote files, there may be a need to adjust the result paths so that they match the locally mounted ones (for opening documents). This can be done by using the path translation facility. As building the set of all indexes can be a little tedious when done through the user interface, you can use the RECOLL_EXTRA_DBS environment variable to provide an initial set. This might typically be set up by a system administrator so that every user does not have to do it. The variable should define a colon-separated list of index directories, e.g.: export RECOLL_EXTRA_DBS=/some/place/xapiandb:/some/other/db On &WIN;, use semi-colons (;) as separators instead of colons. Another environment variable, RECOLL_ACTIVE_EXTRA_DBS allows adding to the active list of indexes. This variable was suggested and implemented by a &RCL; user. It is mostly useful if you use scripts to mount external volumes with &RCL; indexes. By using RECOLL_EXTRA_DBS and RECOLL_ACTIVE_EXTRA_DBS, you can add and activate the index for the mounted volume when starting recoll. Unreachable indexes will automatically be deactivated when starting up. &LIN;: displaying thumbnails The default format for the result list entries and the detail area of the result table display an icon for each result document. The icon is either a generic one determined from the MIME type, or a thumbnail of the document appearance. Thumbnails are only displayed if found in the standard freedesktop location, where they would typically have been created by a file manager. Recoll has no capability to create thumbnails. A relatively simple trick is to use the Open parent document/folder entry in the result list popup menu. This should open a file manager window on the containing directory, which should in turn create the thumbnails (depending on your settings). Restarting the search should then display the thumbnails. There are also some pointers about thumbnail generation in the &RCL; FAQ. &LIN;: running arbitrary commands on result files Apart from the Open and Open With operations, which allow starting an application on a result document (or a temporary copy), based on its MIME type, it is also possible to run arbitrary commands on results which are top-level files, using the Run Script entry in the results pop-up menu. The commands which will appear in the Run Script submenu must be defined by .desktop files inside the scripts subdirectory of the current configuration directory. Here follows an example of a .desktop file, which could be named for example, ~/.recoll/scripts/myscript.desktop (the exact file name inside the directory is irrelevant): [Desktop Entry] Type=Application Name=MyFirstScript Exec=/home/me/bin/tryscript %F MimeType=*/* The Name attribute defines the label which will appear inside the Run Script menu. The Exec attribute defines the program to be run, which does not need to actually be a script, of course. The MimeType attribute is not used, but needs to exist. The commands defined this way can also be used from links inside the result paragraph. As an example, it might make sense to write a script which would move the document to the trash and purge it from the &RCL; index. Keyboard shortcuts A number of common actions within the graphical interface can be triggered through keyboard shortcuts. As of &RCL; 1.29, many of the shortcut values can be customised from a screen in the GUI preferences. Most shortcuts are specific to a given context (e.g. within a preview window, within the result table). Most shortcuts can be changed to a preferred value by using the GUI shortcut editor: Preferences GUI configuration Shortcuts . In order to change a shortcut, just click the corresponding cell in the Shortcut column, and type the desired sequence. Keyboard shortcuts DescriptionDefault value Context: almost everywhere Program exit Ctrl+Q Context: advanced search Load the next entry from the search history Up Load the previous entry from the search history Down Context: main window Clear search. This will move the keyboard cursor to the simple search entry and erase the current text Ctrl+S Move the keyboard cursor to the search entry area without erasing the current text Ctrl+L Move the keyboard cursor to the search entry area without erasing the current text Ctrl+Shift+S Toggle displaying the current results as a table or as a list Ctrl+T Context: main window, when showing the results as a table Move the keyboard cursor to currently the selected row in the table, or to the first one if none is selected Ctrl+R Jump to row 0-9 or a-z in the table Ctrl+[0-9] or Ctrl+Shift+[a-z] Cancel the current selectionEsc Context: preview window Close the preview window Esc Close the current tab Ctrl+W Open a print dialog for the current tab contents Ctrl+P Load the next result from the list to the current tab Shift+Down Load the previous result from the list to the current tab Shift+Up Context: result table Copy the text contained in the selected document to the clipboard Ctrl+G Copy the text contained in the selected document to the clipboard, then exit recoll Ctrl+Alt+Shift+G Open the current document Ctrl+O Open the current document and exit Recoll Ctrl+Alst+Shift+O Show a full preview for the current document Ctrl+D Toggle showing the column names Ctrl+H Show a snippets (keyword in context) list for the current document Ctrl+E Toggle showing the row letters/numbers Ctrl+V Context: snippets window Close the snippets window Esc Find in the snippets list (method #1) Ctrl+F Find in the snippets list (method #2) / Find the next instance of the search term F3 Find the previous instance of the search term Shift+F3
Search tips Terms and search expansion Term completion While typing into the simple search entry, a popup menu will appear and show completions for the current string. Values preceded by a clock icon come from the history, those preceded by a magnifier icon come from the index terms. This can be disabled in the preferences. Picking up new terms from result or preview text Double-clicking on a word in the result list or in a preview window will copy it to the simple search entry field. Wildcards Wildcards can be used inside search terms in all forms of searches. More about wildcards. Automatic suffixes Words like odt or ods can be automatically turned into query language ext:xxx clauses. This can be enabled in the Search preferences panel in the GUI. Disabling stem expansion Entering a capitalized word in any search field will prevent stem expansion (no search for gardening if you enter Garden instead of garden). This is the only case where character case should make a difference for a &RCL; search. You can also disable stem expansion or change the stemming language in the preferences. Finding related documents Selecting the Find similar documents entry in the result list paragraph right-click menu will select a set of "interesting" terms from the current result, and insert them into the simple search entry field. You can then possibly edit the list and start a search to find documents which may be apparented to the current result. File names File names are added as terms during indexing, and you can specify them as ordinary terms in normal search fields (&RCL; used to index all directories in the file path as terms. This has been abandoned as it did not seem really useful). Alternatively, you can use the specific file name search which will only look for file names, and may be faster than the generic search especially when using wildcards. Working with phrases and proximity Phrases searches A phrase can be looked for by enclosing a number of terms in double quotes. Example: "user manual" will look only for occurrences of user immediately followed by manual. You can use the "Phrase" field of the advanced search dialog to the same effect. Phrases can be entered along simple terms in all simple or advanced search entry fields, except "Phrase". Proximity searches A proximity search differs from a phrase search in that it does not impose an order on the terms. Proximity searches can be entered by specifying the "Proximity" type in the advanced search, or by postfixing a phrase search with a 'p'. Example: "user manual"p would also match "manual user". Also see the modifier section from the query language documentation. AutoPhrases This option can be set in the preferences dialog. If it is set, a phrase will be automatically built and added to simple searches in All terms and Query language modes. This will not change radically the results, but will give a relevance boost to the results where the search terms appear as a phrase. E.g.: searching for virtual reality will still find all documents where either virtual and reality appear, but those which contain virtual reality should appear sooner in the list. Phrase searches can slow down a query if most of the terms in the phrase are common. If the autophrase option is on, very common terms will be removed from the automatically constructed phrase. The removal threshold can be adjusted from the search preferences. This has become much less of a concern with recent &XAP; versions and the autophrase option is set by default. Phrases and abbreviations Dotted abbreviations like I.B.M. are also automatically indexed as a word without the dots: IBM. Searching for the word inside a phrase (e.g.: "the IBM company") will only match the dotted abbreviation if you increase the phrase slack (using the advanced search panel control, or the o query language modifier). Literal occurrences of the word will be matched normally. Others Using fields You can use the query language and field specifications to only search certain parts of documents. This can be especially helpful with email, for example only searching emails from a specific originator: search tips from:helpfulgui Result table tips When displaying results in table mode, you can use a right click on the table headers to activate a pop-up menu which will let you adjust what columns are displayed. You can drag the column headers to adjust their order. You can click them to sort by the field displayed in the column. You can also save the result list in CSV format. Changing the GUI geometry It is possible to configure the GUI in wide form factor by dragging the toolbars to one of the sides (their location is remembered between sessions), and moving the category filters to a menu (can be set in the Preferences GUI configuration User interface panel). Query explanation You can get an exact description of what the query looked for, including stem expansion, and Boolean operators used, by clicking on the result list header. Advanced search history You can display any of the last 100 complex searches performed by using the up and down arrow keys while the advanced search panel is active. Forced opening of a preview window You can use Shift+Click on a result list Preview link to force the creation of a preview window instead of a new tab in the existing one. Customising the search interface You can customise some aspects of the search interface by using the GUI configuration entry in the Preferences menu. There are several tabs in the dialog, dealing with the interface itself, the parameters used for searching and returning results, and what indexes are searched. Most GUI settings are global and do not depend on the index in use. As of &RCL; 1.42, it is possible to specify that some settings will depend on the index. At the moment, only the result table configuration can be saved in such a way. Choosing the viewer applications By default &RCL; lets the desktop choose what application should be used to open a given document, with exceptions. The details of this behaviour can be customised with the Preferences GUI configuration User interface Choose editor applications dialog or by editing the mimeview configuration file. When Use desktop preferences, at the top of the dialog, is checked, the desktop default is generally used, but there is a small default list of exceptions, for MIME types where the &RCL; choice should override the desktop one. These are applications which are well integrated with &RCL;, for example, on Linux, evince for viewing PDF and Postscript files because of its support for opening the document at a specific page and passing a search string as an argument. You can add or remove document types to the exceptions by using the dialog. If you prefer to completely customise the choice of applications, you can uncheck Use desktop preferences, in which case the &RCL; predefined applications will be used, and can be changed for each document type. This is probably not the most convenient approach in most cases. The applications choice dialog accepts multiple selections of MIME types in the top section, and lets you define how they are processed in the bottom one. Some substitutions will be performed on the template command line before execution: %f : document file name. %i : ipath. %l : hit line number. %M : MIME type. %p : hit page number. %S : a possibly multiword matched phrase. Only for simple phrase searches, else as %s. %s : a heuristically selected matched term. %U : URL of file path. %u : URL. %(xx) : xx metadata field value. You may also change the choice of applications by editing the mimeview configuration file if you find this more convenient. Under &LIN;, each result list entry also has a right-click menu with an Open With entry. This lets you choose an application from the list of those which registered with the desktop for the document MIME type, on a case by case basis. The GUI preferences dialog Many aspects of the &RCL; GUI can be customised from dialogs reached through the Preferences GUI configuration menu choice. Not all choices from the different panels will be described below. Many are self-evident or have sufficient tooltip text to provide explanations. User interface Choose editor application: this opens the dialog which allows you to select the application to be used to open each MIME type, which was described in detail in the previous section. Single application: when checked, starting the &RCL; GUI will activate an existing instance instead of creating a new one. Start with simple search mode: this lets you choose the value of the simple search type on program startup. Either a fixed value (e.g. Query Language), or the value in use when the program last exited. Maximum size of search history: limit how many searches are stored in the history. Set to -1 for no limit. The history can be cleared in the File menu. Start with advanced search dialog open : If you use this dialog frequently, checking the entries will get it to open when the GUI starts. Remember sort activation state if set, the GUI will remember the sort tool state between invocations. It normally starts with sorting disabled. Depth of side filter directory tree: decide how many levels should be shown in the directory filter panel. Side filter dates format: allows changing how dates are displayed in the side filter. See the tooltip for details. Document filter choice style: this will let you choose if the document categories are displayed as a list or a set of buttons, or a menu. Show system tray icon: a gui instance will appear as an icon in the system tray. You can then also check Close to tray instead of exiting and Generate desktop notifications, to have e.g. a popup signal the completion of indexing. Disable Qt autocompletion in search entry: this will disable the completion popup. Il will only appear, and display the full history, either if you enter only white space in the search area, or if you click the clock button on the right of the area. Highlight CSS style for query terms: Terms from the user query are highlighted in the result list and the preview window. The highligthing style can be chosen here, for example color: blue or color: red;background: yellow. Mostly any CSS style should work. Display scale: This actually adjust the font sizes everywhere inside the GUI and can be used on High resolution displays if the default characters are too small. Color scheme: choose how the GUI is displayed: mostly dark on white (Light) or white on dark (Dark). On &WIN; you can also select System to conform to the system setting. On &MAC; the option is not available, we always use the system mode. Style sheet: The name of a Qt style sheet text file which is applied to the whole GUI on startup. The default value is empty, but there is a skeleton style sheet (recoll.qss) inside the /usr/share/recoll/examples directory. Using a style sheet, you can change most recoll graphical parameters: colors, fonts, etc. See the sample file for a few simple examples. You should be aware that parameters (e.g.: the background color) set inside the &RCL; GUI style sheet will override global system preferences, with possible strange side effects: for example if you set the foreground to a light color and the background to a dark one in the desktop preferences, but only the background is set inside the &RCL; style sheet, and it is light too, then text will appear light-on-light inside the &RCL; GUI. Interface language: the recoll GUI messages are normally shown in the language determined by the system locale (if the translation is available). This choice allows forcing the interface language, e.g. to English if the default translation is incomplete or of bad quality. Result list: Result list font: There is quite a lot of information shown in the result list, and you may want to customise the font and/or font size. The rest of the fonts used by &RCL; are determined by your generic Qt configuration (try the qtconfig command). Edit result list paragraph format string: allows you to change the presentation of each result list entry. See the result list customisation section. Edit result page HTML header insert: allows you to define text inserted at the end of the result page HTML header. More detail in the result list customisation section. Date format: allows specifying the format used for displaying dates inside the result list. This should be specified as an strftime() string (man strftime). Abstract snippet separator: for synthetic abstracts built from index data, which are usually made of several snippets from different parts of the document, this defines the snippet separator, an ellipsis by default. Preview Maximum text size highlighted for preview: Disable search term highlighting for texts bigger than the given size to speed up loading. Creating highlights on search terms involves quite a lot of processing, and can be slow. Prefer HTML to plain text for preview: if set, Recoll will display HTML as such inside the preview window. If this causes display problems, you can uncheck it to display the plain text version instead. A common issue is insufficient contrast on a dark mode display, caused by the document style sheet. Activate links in preview: if set, Recoll will turn HTTP links found inside plain text into proper HTML anchors, and clicking a link inside a preview window will start the default browser on the link target. Fields display: max field length before using summary: this is used to limit the size of metadata text displayed on the fields view (reached through the right-click popup). Fields over this size will be truncated, with a clickable option to expand. Plain text to HTML line style: when displaying plain text inside the preview window, &RCL; tries to preserve some of the original text line breaks and indentation. It can either use PRE HTML tags, which will well preserve the indentation but will force horizontal scrolling for long lines, or use BR tags to break at the original line breaks, which will let the editor introduce other line breaks according to the window width, but will lose some of the original indentation. The third option is the default and probably the best one in most cases: use PRE tags with line wrapping. Search term line offset: how many lines to display over a search hit. Allows having some context for the found search term. Search parameters: Hide duplicate results: decides if result list entries are shown for identical documents found in different places. Stemming language: stemming obviously depends on the document's language. This listbox will let you chose among the stemming databases which were built during indexing (this is set in the main configuration file), or later added with recollindex -s (See the recollindex manual). Stemming languages which are dynamically added will be deleted at the next indexing pass unless they are also added in the configuration file. Automatically add phrase to simple searches: a phrase will be automatically built and added to simple searches when looking for Any terms. This will give a relevance boost to the results where the search terms appear as a phrase (consecutive and in order). Autophrase term frequency threshold percentage: very frequent terms should not be included in automatic phrase searches for performance reasons. The parameter defines the cutoff percentage (percentage of the documents where the term appears). Replace abstracts from documents: this decides if we should synthesize and display an abstract in place of an explicit abstract found within the document itself. Dynamically build abstracts: this decides if &RCL; tries to build document abstracts (lists of snippets) when displaying the result list. Abstracts are constructed by taking context from the document information, around the search terms. Synthetic abstract size: adjust to taste. Synthetic abstract context words: how many words should be displayed around each term occurrence. Query language magic file name suffixes: a list of words which automatically get turned into ext:xxx file name suffix clauses when starting a query language query (e.g.: doc xls xlsx...). This will save some typing for people who use file types a lot when querying. External indexes: This panel will let you browse for additional indexes that you may want to search. External indexes are designated by their database directory (e.g.: /home/someothergui/.recoll/xapiandb, /usr/local/recollglobal/xapiandb). Once entered, the indexes will appear in the External indexes list, and you can chose which ones you want to use at any moment by checking or unchecking their entries. Your main database (the one the current configuration indexes to), is always implicitly active. If this is not desirable, you can set up your configuration so that it indexes, for example, an empty directory. An alternative indexer may also need to implement a way of purging the index from stale data. The result list format Recoll normally uses a full function HTML processor to display the result list and the snippets window. Depending on the version, this may be based on either Qt WebKit or Qt WebEngine. It is then possible to completely customise the result list with full support for CSS and Javascript. It is also possible to build &RCL; to use a simpler Qt QTextBrowser widget to display the HTML, which may be necessary if the ones above are not ported on the system, or to reduce the application size and dependencies. There are limits to what you can do in this case, but it is still possible to decide what data each result will contain, and how it will be displayed. The result list presentation can be customised by adjusting two elements: The paragraph format HTML code inside the header section. This is also used for the snippets window. The paragraph format and the header fragment can be edited from the Result list tab of the GUI configuration. The header fragment is used both for the result list and the snippets window. The snippets list is a table and has a snippets class attribute. Each paragraph in the result list is a table, with class respar, but this can be changed by editing the paragraph format. There are a few examples on the page about customising the result list on the &RCL; Web site. The paragraph format This is an arbitrary HTML string which will be transformed by printf-like % substitutions to show the results. Any literal % character in the input must be quoted as %%. E.g. <table style="width: 100%;"> should be entered as <table style="width: 100%%;">. The following substitutions will be performed: %AAbstract. If %s is not present, this will be either the document abstract attribute if one is present, or the synthetic snippets abstract. If %s is present, this will be the document abstract or empty. %DDate. %IIcon image name. This is normally determined from the MIME type. The associations are defined inside the mimeconf configuration file. If a thumbnail for the file is found at the standard Freedesktop location, this will be displayed instead. %KKeywords. %LPrecooked Preview, Edit, and possibly Snippets links. %MMIME type. %Nresult Number inside the result page. %PParent folder Url. In the case of an embedded document, this is the parent folder for the top level container file. %RRelevance percentage. %SSize information. %sSynthetic "snippets" abstract (selected text around search terms found in the document. %TTitle if this is set, else Filename. %tTitle or empty. %(filename)File name. %UUrl In addition to the predefined values above, all strings like %(fieldname) will be replaced by the value of the field named fieldname for this document. Only stored fields can be accessed in this way, the value of indexed but not stored fields is not known at this point in the search process (see field configuration). There are currently very few fields stored by default, apart from the values above (only author and filename), so this feature will need some custom local configuration to be useful. An example candidate would be the recipient field which is generated by the message input handlers. The format of the Preview, Edit, and Snippets links is <a href="P%N">, <a href="E%N"> and <a href="A%N"> where docnum (%N) expands to the document number inside the result page). A link target defined as "F%N" will open the document corresponding to the %P parent folder expansion, usually creating a file manager window on the folder where the container file resides. E.g.: <a href="F%N">%P</a> A link target defined as R%N|scriptname will run the corresponding script on the result file (if the document is embedded, the script will be started on the top-level parent). See the section about defining scripts. Note that scriptname value should be the value of the Name field of the desktop file, and not the desktop file name. The default value for the paragraph format string is: \n" "\n" "\n" "%L  %S   %T
\n" "%M %D    %U %i
\n" "%s %A %K\n" "\n" ]]>
You may, for example, try the following for a more web-like experience: %T
%A%U - %S - %L ]]>
Note that the P%N link in the above paragraph makes the title a preview link. Or the clean looking: %L %R   %T&
%S  %U
%A
%K ]]>
These samples, and some others are on the web site, with pictures to show how they look. It is also possible to define the value of the snippet separator inside the abstract section.
The <command>recoll</command> GUI command line options The recoll command has a number of useful command line options. specifies a non-default configuration directory. can be used to use a different language for the GUI labels than the one which would be chosen according to the system locale. Some translations are quite incomplete and you may prefer to see the English messages, even if your machine is generally setup for, e.g. Spanish. Example: recoll -L en specifies a query to be run when the program starts. It takes a single argument, which must be quoted if it contains white space. specify the type of query. The default is to interpret the argument as a query language string. You can use these options to interpret the argument as an Any Term, File Name or All Terms query instead. The option will tell the program to behave exactly like the recollq command, printing the results to the standard output (terminal) instead of starting a graphical window. This option must be given separately, e.g. recoll -tq some query will *not* work, use recoll -t -q some query instead. The option starts the program minimized. only creates a system tray icon (the system tray support must be enabled in the GUI preferences User interface tab).
Searching with the KDE KIO slave The &RCL; KIO slave allows performing a &RCL; search by entering an appropriate URL in a KDE open dialog, or a Dolphin URL. The results are displayed as directory entries. The instructions for building this module are located in the source tree. See: kde/kio/recoll/00README.txt. Some Linux distributions do package the kio-recoll module, so check before diving into the build process, maybe it's already out there ready for one-click installation. Searching on the command line There are several ways to obtain search results as a text stream, without a graphical interface: By passing option to the recoll program, or by calling it as recollq (through a link). By using the actual recollq program. By writing a custom Python program, using the Recoll Python API. The first two methods work in the same way and accept/need the same arguments (except for the additional to recoll). The query to be executed is specified as command line arguments. Depending on the platform, recollq is not always built or installed by default (as recoll works the same). This is a very simple program, and if you can program a little c++, you may find it useful to taylor its output format to your needs. Apart from being easily customised, recollq is only really useful on systems where the Qt libraries are not available. recollq has a man page. The Usage string follows: : specify configuration directory, overriding $RECOLL_CONFDIR. -C : collapse duplicates. -d also dump file contents. -n [first-] define the result slice. The default value for [first] is 0. Without the option, the default max count is 2000. Use n=0 for no limit. -b : basic. Just output urls, no mime types or titles. -Q : no result lines, just the processed query and result count. -m : dump the whole document meta[] array for each result. -A : output the document abstracts. -p : show snippets, with page numbers instead of the concatenated abstract. -g : show snippets, with line numbers instead of the concatenated abstract. -S fld : sort by field . -D : sort descending. -s stemlang : set stemming language to use (must exist in index...). Use -s "" to turn off stem expansion. -T : use the parameter (Thesaurus) for word expansion. -i : additional index, several can be given. -e use url encoding (%xx) for urls. -E use exact result count instead of lower bound estimate. -F : output exactly these fields for each result. The field values are encoded in base64, output in one line and separated by one space character. This is the recommended format for use by other programs. Use a normal query with option -m to see the field names. Use -F '' to output all fields, but you probably also want option -N in this case. -N : with -F, print the (plain text) field names before the field values. --extract_to : extract the first result to filepath, which must not exist. Use a -n option with an offset to select the appropriate result. --paths-only: only print results which would have a file:// scheme, and exclude the scheme. Other non-query usages: -P: Show the date span for all the documents present in the index.]]> Sample execution: recollq 'ilur -nautique mime:text/html' Recoll query: ((((ilur:(wqf=11) OR ilurs) AND_NOT (nautique:(wqf=11) OR nautiques OR nautiqu OR nautiquement)) FILTER Ttext/html)) 4 results text/html [file:///Users/dockes/projets/bateaux/ilur/comptes.html] [comptes.html] 18593 bytes text/html [file:///Users/dockes/projets/nautique/webnautique/articles/ilur1/index.html] [Constructio... text/html [file:///Users/dockes/projets/pagepers/index.html] [psxtcl/writemime/recoll]... text/html [file:///Users/dockes/projets/bateaux/ilur/factEtCie/recu-chasse-maree.... The query language The &RCL; query language was based on the now defunct Xesam user search language specification. It allows defining general boolean searches within the main body text or specific fields, and has many additional features, broadly equivalent to those provided by complex search interface in the GUI. The query language processor is activated in the GUI simple search entry when the search mode selector is set to Query Language. It can also be used from the command line search, the KIO slave, or the Web UI. If the results of a query language search puzzle you and you doubt what has been actually searched for, you can use the GUI Show Query link at the top of the result list to check the exact query which was finally executed by Xapian. General syntax Here follows a sample request that we are going to explain: author:"john doe" Beatles OR Lennon Live OR Unplugged -potatoes This would search for all documents with John Doe appearing as a phrase in the author field (exactly what this is would depend on the document type, e.g.: the From: header, for an email message), and containing either beatles or lennon and either live or unplugged but not potatoes (in any part of the document). An element is composed of an optional field specification, and a value, separated by a colon (the field separator is the last colon in the element). Examples: Eugenie author:balzac dc:title:grandet dc:title:"eugenie grandet" The colon, if present, means "contains". Xesam defines other relations, which are mostly unsupported for now (except in special cases, described further down). All elements in the search entry are normally combined with an implicit AND. It is possible to specify that elements be OR'ed instead, as in Beatles OR Lennon. The OR must be entered literally (capitals), and it has priority over the AND associations: word1 word2 OR word3 means word1 AND (word2 OR word3) not (word1 AND word2) OR word3. You can use parentheses to group elements, which will sometimes make things clearer, and may allow expressing combinations which would have been difficult otherwise. An element preceded by a - specifies a term that should not appear. By default, words inside double-quotes define a phrase search (the order of words is significant), so that title:"prejudice pride" is not the same as title:prejudice title:pride, and is unlikely to find a result. This can be changed by using modifiers. Words inside phrases and capitalized words are not stem-expanded. Wildcards may be used anywhere inside a term. Specifying a wildcard on the left of a term can produce a very slow search (or even an incorrect one if the expansion is truncated because of excessive size). Also see More about wildcards. To save you some typing, a field value given as a comma-separated list of terms will be interpreted as an AND list and a slash-separated list as an OR list. No white space is allowed. So: author:john,lennon will search for documents with john AND lennon inside the author field (in any order), and author:john/ringo would search for john OR ringo. This behaviour is only triggered by a field prefix: without it, comma- or slash- separated input will produce a phrase search. However, you can use a text field name to search the main text this way, as an alternate to using an explicit OR, e.g. text:napoleon/bonaparte would generate a search for napoleon OR bonaparte in the main text body. Modifiers can be set on a double-quote value, for example to specify a proximity search (unordered). See the modifier section. No space must separate the final double-quote and the modifiers value, e.g. "two one"po10 &RCL; currently manages the following default fields: title, subject or caption are synonyms which specify data to be searched for in the document title or subject. author or from for searching the documents originators. recipient or to for searching the documents recipients. keyword for searching the document-specified keywords (few documents actually have any). filename for the document's file name. You can use the shorter fn alias. This value is not set for all documents: internal documents contained inside a compound one (for example an EPUB section) do not inherit the container file name any more, this was replaced by an explicit field (see next). Sub-documents can still have a filename, if it is implied by the document format, for example the attachment file name for an email attachment. containerfilename, aliased as cfn. This is set for all documents, both top-level and contained sub-documents, and is always the name of the filesystem file which contains the data. The terms from this field can only be matched by an explicit field specification (as opposed to terms from filename which are also indexed as general document content). This avoids getting matches for all the sub-documents when searching for the container file name. ext specifies the file name extension (Ex: ext:html). rclmd5 the MD5 checksum for the document. This is used for displaying the duplicates of a search result (when querying with the option to collapse duplicate results). Incidentally, this could be used to find the duplicates of any given file by computing its MD5 checksum and executing a query with just the rclmd5 value. You can define aliases for field names, in order to use your preferred denomination or to save typing (e.g. the predefined fn and cfn aliases defined for filename and containerfilename). See the section about the fields file. The document input handlers have the possibility to create other fields with arbitrary names, and aliases may be defined in the configuration, so that the exact field search possibilities may be different for you if someone took care of the customisation. Special field-like specifiers The field syntax also supports a few field-like, but special, criteria, for which the values are interpreted differently. Regular processing does not apply (for example the slash- or comma- separated lists don't work). A list follows. dir for filtering the results on file location. For example, dir:/home/me/somedir will restrict the search to results found anywhere under the /home/me/somedir directory (including subdirectories). Tilde expansion will be performed as usual. Wildcards will be expanded, but please have a look at an important limitation of wildcards in path filters. You can also use relative paths. For example, dir:share/doc would match either /usr/share/doc or /usr/local/share/doc. -dir will find results not in the specified location. Several dir clauses can be specified, both positive and negative. For example the following makes sense: dir:recoll dir:src -dir:utils -dir:common This would select results which have both recoll and src in the path (in any order), and which have not either utils or common. You can also use OR conjunctions with dir: clauses. On &LIN;, a special aspect of dir clauses is that the values in the index are not transcoded to UTF-8, and never lower-cased or unaccented, but stored as binary. This means that you need to enter the values in the exact lower or upper case, and that searches for names with diacritics may sometimes be impossible because of character set conversion issues. Non-ASCII UNIX file paths are an unending source of trouble and are best avoided. You need to use double-quotes around the path value if it contains space characters. The shortcut syntax to define OR or AND lists within fields with commas or slash characters is not available. size for filtering the results on file size. Example: size<10000. You can use <, > or = as operators. You can specify a range like the following: size>100 size<1000. The usual k/K, m/M, g/G, t/T can be used as (decimal) multipliers. Ex: size>1k to search for files bigger than 1000 bytes. date for searching or filtering on dates. The syntax for the argument is based on the ISO8601 standard for dates and time intervals. Only dates are supported, no times. The general syntax is 2 elements separated by a / character. Each element can be a date or a period of time. Periods are specified as PnYnMnD. The n numbers are the respective numbers of years, months or days, any of which may be missing. Dates are specified as YYYY-MM-DD. The days and months parts may be missing. If the / is present but an element is missing, the missing element is interpreted as the lowest or highest date in the index. Examples: 2001-03-01/2002-05-01 the basic syntax for an interval of dates. 2001-03-01/P1Y2M the same specified with a period. 2001/ from the beginning of 2001 to the latest date in the index. 2001 the whole year of 2001 P2D/ means 2 days ago up to now if there are no documents with dates in the future. /2003 all documents from 2003 or older. Periods can also be specified with small letters (e.g.: p2y). mime or format for specifying the MIME type. These clauses are processed apart from the normal Boolean logic of the search: multiple values will be OR'ed (instead of the normal AND). You can specify types to be excluded, with the usual -, and use wildcards. Example: mime:text/* -mime:text/plain. Specifying an explicit boolean operator before a mime specification is not supported and will produce strange results. type or rclcat for specifying the category (as in text/media/presentation/etc.). The classification of MIME types in categories is defined in the &RCL; configuration (mimeconf), and can be modified or extended. The default category names are those which permit filtering results in the main GUI screen. Categories are OR'ed like MIME types above, and can be negated with -. issub for specifying that only standalone (issub:0) or only embedded (issub:1) documents should be returned as results. mime, rclcat, size, issub and date criteria always affect the whole query (they are applied as a final filter), even if set with other terms inside a parenthesis. mime (or the equivalent rclcat) is the only field with an OR default. You do need to use OR with ext terms for example. Range clauses &RCL; 1.24 and later support range clauses on fields which have been configured to support it. No default field uses them currently, so this paragraph is only interesting if you modified the fields configuration and possibly use a custom input handler. A range clause looks like one of the following: myfield:small..big myfield:small.. myfield:..big The nature of the clause is indicated by the two dots .., and the effect is to filter the results for which the myfield value is in the possibly open-ended interval. See the section about the fields configuration file for the details of configuring a field for range searches (list them in the [values] section). Modifiers Some characters are recognized as search modifiers when found immediately after the closing double quote of a phrase, as in "some term"modifierchars. The actual "phrase" can be a single term of course. Supported modifiers: l can be used to turn off stemming (mostly makes sense with p because stemming is off by default for phrases, but see also x further down). o can be used to specify a "slack" for both phrase and proximity searches: the number of additional terms that may be found between the specified ones. If o is followed by an integer number, this is the slack, else the default is 10. The default slack (with no o) is 0 for phrase searches and 10 for proximity searches. p can be used to turn an ordered phrase search into an unordered proximity one. Example: "order any in"p. You can find a little more detail about phrase and proximity searches here. s can be used to turn off synonym expansion, if a synonyms file is in place. x (1.33.2) will enable the expansion of terms inside a phrase search (the default is for phrases to be searched verbatim). Also see the stemexpandphrases in the configuration section, for changing the default behaviour. A weight can be specified for a query element by specifying a decimal value at the start of the modifiers. Example: "Important"2.5. The following only make sense on indexes which are capable of case and diacritics sensitivity (not the default): C will turn on case sensitivity. D will turn on diacritics sensitivity (if the index supports it). e (explicit) will turn on diacritics sensitivity and case sensitivity, and prevent stem expansion. Wildcards and anchored searches Some special characters are interpreted by &RCL; in search strings to expand or specialize the search. Wildcards expand a root term in controlled ways. Anchor characters can restrict a search to succeed only if the match is found at or near the beginning of the document or one of its fields. Wildcards All words entered in &RCL; search fields will be processed for wildcard expansion before the request is finally executed. The wildcard characters are: * which matches 0 or more characters. ? which matches a single character. [] which allow defining sets of characters to be matched (ex: [abc] matches a single character which may be 'a' or 'b' or 'c', [0-9] matches any number. You should be aware of a few things when using wildcards. Using a wildcard character at the beginning of a word can make for a slow search because &RCL; will have to scan the whole index term list to find the matches. However, this is much less a problem for field searches, and queries like author:*@domain.com can sometimes be very useful. Using a * at the end of a word can produce more matches than you would think, and strange search results. You can use the term explorer tool to check what completions exist for a given term. You can also see exactly what search was performed by clicking on the link at the top of the result list. In general, for natural language terms, stem expansion will produce better results than an ending * (stem expansion is turned off when any wildcard character appears in the term). Wildcards and path filtering Due to the way that &RCL; processes wildcards inside dir path filtering clauses, they will have a multiplicative effect on the query size. A clause containing wildcards in several paths elements, like, for example, dir:/home/me/*/*/docdir, will almost certainly fail if your indexed tree is of any realistic size. Depending on the case, you may be able to work around the issue by specifying the paths elements more narrowly, with a constant prefix, or by using 2 separate dir: clauses instead of multiple wildcards, as in dir:/home/me dir:docdir. The latter query is not equivalent to the initial one because it does not specify a number of directory levels, but that's the best we can do (and it may be actually more useful in some cases). Anchored searches Two characters are used to specify that a search hit should occur at the beginning or at the end of the text. ^ at the beginning of a term or phrase constrains the search to happen at the start, $ at the end force it to happen at the end. As this function is implemented as a phrase search it is possible to specify a maximum distance at which the hit should occur, either through the controls of the advanced search panel, or using the query language, for example, as in: "^someterm"o10 which would force someterm to be found within 10 terms of the start of the text. This can be combined with a field search as in somefield:"^someterm"o10 or somefield:someterm$. This feature can also be used with an actual phrase search, but in this case, the distance applies to the whole phrase and anchor, so that, for example, bla bla my unexpected term at the beginning of the text would be a match for "^my term"o5. Anchored searches can be very useful for searches inside somewhat structured documents like scientific articles, in case explicit metadata has not been supplied, for example for looking for matches inside the abstract or the list of authors (which occur at the top of the document). Using Synonyms Term synonyms and text search: in general, there are two main ways to use term synonyms for searching text: At index creation time, they can be used to alter the indexed terms, either increasing or decreasing their number, by expanding the original terms to all synonyms, or by reducing all synonym terms to a canonical one. At query time, they can be used to match texts containing terms which are synonyms of the ones specified by the user, either by expanding the query for all synonyms, or by reducing the user entry to canonical terms (the latter only works if the corresponding processing has been performed while creating the index). With one exception, &RCL; only uses synonyms at query time. A user query term which part of a synonym group will be optionally expanded into an OR query for all terms in the group. The one exception is that if the idxsynonyms parameter is set during indexing, and if the file contains multi-word synonyms, a multi-word single term will be emitted for every occurrence found in the text. If the same file is in use at query time, this will allow phrase and proximity searches to work for the multi-word synonyms. Synonym groups are defined inside ordinary text files. Each line in the file defines a group. Example: hi hello "good morning" # not sure about "au revoir" though. Is this english ? bye goodbye "see you" \ "au revoir" As usual, lines beginning with a # are comments, empty lines are ignored, and lines can be continued by ending them with a backslash. Multi-word synonyms are supported, but be aware that these will generate phrase queries, which may degrade performance and will disable stemming expansion for the phrase terms. The contents of the synonyms file must be casefolded (not only lowercased), because this is what expected at the point in the query processing where it is used. There are a few cases where this makes a difference, for example, German sharp s should be expressed as ss, Greek final sigma as sigma. For reference, Python3 has an easy way to casefold words (str.casefold()). The synonyms file can be specified in the Search parameters tab of the GUI configuration Preferences menu entry, or as an option for command-line searches. Once the file is defined, the use of synonyms can be enabled or disabled directly from the Preferences menu. The synonyms are searched for matches with user terms after the latter are stem-expanded, but the contents of the synonyms file itself is not subjected to stem expansion. This means that a match will not be found if the form present in the synonyms file is not present anywhere in the document set (same with accents when using a raw index). The synonyms function is probably not going to help you find your letters to Mr. Smith. It is best used for domain-specific searches. For example, it was initially suggested by a user performing searches among historical documents: the synonyms file would contains nicknames and aliases for each of the persons of interest. Path translations In some cases, the document paths stored inside the index do not match the actual ones, so that document previews and accesses will fail. This can occur in a number of circumstances: When using multiple indexes it is a relatively common occurrence that some will actually reside on a remote volume, for example mounted via NFS. In this case, the paths used to access the documents on the local machine are not necessarily the same than the ones used while indexing on the remote machine. For example, /home/me may have been used as a topdirs elements while indexing, but the directory might be mounted as /net/server/home/me on the local machine. The case may also occur with removable disks. It is perfectly possible to configure an index to live with the documents on the removable disk, but it may happen that the disk is not mounted at the same place so that the documents paths from the index are invalid. In some case, the path adjustments can be automated. As a last example, one could imagine that a big directory has been moved, but that it is currently inconvenient to run the indexer. &RCL; has a facility for rewriting access paths when extracting the data from the index. The translations can be defined for the main index and for any additional query index. In the above NFS example, &RCL; could be instructed to rewrite any file:///home/me URL from the index to file:///net/server/home/me, allowing accesses from the client. The translations are defined in the ptrans configuration file, which can be edited with a plain text editor or by using the GUI external indexes configuration dialog: PreferencesExternal index dialog, then click the Paths translations button on the right below the index list: translations will be set for the main index if no external index is currently selected in the list, or else for the currently selected index. Example entry from a <filename>ptrans</filename> file: [/path/to/external/xapiandb] /some/index/path = /some/local/path This would decide that, for the index stored in /path/to/external/xapiandb, any occurence of /some/index/path should be replaced with /some/local/path when presenting a result. &WIN; noteAt the moment, the path comparisons done for path translation under MS &WIN; are case sensitive (this will be fixed at some point). Use the natural character case as displayed in the file explorer. Example: [Z:/some/mounted/xapiandb] C: = Z: Search case and diacritics sensitivity When working with a raw index (not the default), searches can be made sensitive to character case and diacritics. How this happens is controlled by configuration variables and what search data is entered. The general default is that searches entered without upper-case or accented characters are insensitive to case and diacritics. An entry of resume will match any of Resume, RESUME, résumé, Résumé etc. Two configuration variables can automate switching on sensitivity: autodiacsensIf this is set, search sensitivity to diacritics will be turned on as soon as an accented character exists in a search term. When the variable is set to true, resume will start a diacritics-unsensitive search, but résumé will be matched exactly. The default value is false. autocasesensIf this is set, search sensitivity to character case will be turned on as soon as an upper-case character exists in a search term except for the first one. When the variable is set to true, us or Us will start a diacritics-unsensitive search, but US will be matched exactly. The default value is true (contrary to autodiacsens). As usual, capitalizing the first letter of a word will turn off its stem expansion and have no effect on case-sensitivity. You can also explicitly activate case and diacritics sensitivity by using modifiers with the query language. C will make the term case-sensitive, and D will make it diacritics-sensitive. Examples: "us"C will search for the term us exactly (Us will not be a match). "resume"D will search for the term resume exactly (résumé will not be a match). When either case or diacritics sensitivity is activated, stem expansion is turned off. Having both does not make much sense. Desktop integration Being independent of the desktop type has its drawbacks: &RCL; desktop integration is minimal. However there are a few tools available: Users of recent Ubuntu-derived distributions, or any other Gnome desktop systems (e.g. Fedora) can install the Recoll GSSP (Gnome Shell Search Provider). For KDE users, there is a KIO worker module, which was described in a previous section, and a Krunner plugin. Both are usually installed with the main &RCL; package. Hotkeying recoll: it is surprisingly convenient to be able to show or hide the &RCL; GUI with a single keystroke. Recoll comes with a small Python script, based on the libwnck window manager interface library, which will allow you to do just this. The detailed instructions are on this wiki page.
Programming interface &RCL; has an Application Programming Interface, usable both for indexing and searching, currently accessible from the Python language. Another less radical way to extend the application is to write input handlers for new types of documents. The processing of metadata attributes for documents (fields) is highly configurable. Writing a document input handler TerminologyThe small programs or pieces of code which handle the processing of the different document types for &RCL; used to be called filters, which is still reflected in the name of the directory which holds them and many configuration variables. They were named this way because one of their primary functions is to filter out the formatting directives and keep the text content. However these modules may have other behaviours, and the term input handler is now progressively substituted in the documentation. filter is still used in many places though. &RCL; input handlers cooperate to translate from the multitude of input document formats, simple ones as opendocument, acrobat, or compound ones such as Zip or Email, into the final &RCL; indexing input format, which is plain text (in many cases the processing pipeline has an intermediary HTML step, which may be used for better previewing presentation). Most input handlers are executable programs or scripts. A few handlers are coded in C++ and live inside recollindex. This latter kind will not be described here. There are two kinds of external executable input handlers: Simple exec handlers run once and exit. They can be bare programs like antiword, or scripts using other programs. They are very simple to write, because they just need to print the converted document to the standard output. Their output can be plain text or HTML. HTML is usually preferred because it can store metadata fields and it allows preserving some of the formatting for the GUI preview. However, these handlers have limitations: They can only process one document per file. The output MIME type must be known and fixed. For handlers producing text/plain, the character encoding must be known and fixed (or possibly just depending on location). Multiple execm handlers can process multiple files (sparing the process startup time which can be very significant), or multiple documents per file (e.g.: for archives or multi-chapter publications). They communicate with the indexer through a simple protocol, but are nevertheless a bit more complicated than the older kind. Most of the new handlers are written in Python (exception: rclimg which is written in Perl because exiftool has no real Python equivalent). The Python handlers use common modules to factor out the boilerplate, which can make them very simple in favorable cases. The subdocuments output by these handlers can be directly indexable (text or HTML), or they can be other simple or compound documents that will need to be processed by another handler. In both cases, handlers deal with regular file system files, and can process either a single document, or a linear list of documents in each file. &RCL; is responsible for performing up to date checks, deal with more complex embedding, temporary files, and other upper level issues. A simple handler returning a document in text/plain format, can transfer no metadata to the indexer. Generic metadata, like document size or modification date, will be gathered and stored by the indexer. Handlers that produce text/html format can return an arbitrary amount of metadata inside HTML meta tags. These will be processed according to the directives found in the fields configuration file. The handlers that can handle multiple documents per file return a single piece of data to identify each document inside the file. This piece of data, called an ipath will be sent back by &RCL; to extract the document at query time, for previewing, or for creating a temporary file to be opened by a viewer. These handlers can also return metadata either as HTML meta tags, or as named data through the communication protocol. The following section describes the simple handlers, and the next one gives a few explanations about the execm ones. You could conceivably write a simple handler with only the elements in the manual. This will not be the case for the other ones, for which you will have to look at the code. Simple input handlers &RCL; simple handlers are usually shell-scripts, but this is in no way necessary. Extracting the text from the native format is the difficult part. Outputting the format expected by &RCL; is trivial. Happily enough, most document formats have translators or text extractors which can be called from the handler. In some cases the output of the translating program is completely appropriate, and no intermediate shell-script is needed. Input handlers are called with a single argument which is the source file name. They should output the result to stdout. When writing a handler, you should decide if it will output plain text or HTML. Plain text is simpler, but you will not be able to add metadata or vary the output character encoding (this will be defined in a configuration file). Additionally, some formatting may be easier to preserve when previewing HTML. Actually the deciding factor is metadata: &RCL; has a way to extract metadata from the HTML header and use it for field searches.. The RECOLL_FILTER_FORPREVIEW environment variable (values yes, no) tells the handler if the operation is for indexing or previewing. Some handlers use this to output a slightly different format, for example stripping uninteresting repeated keywords (e.g.: Subject: for email) when indexing. This is not essential. You should look at one of the simple handlers, for example rclps for a starting point. Don't forget to make your handler executable before testing ! "Multiple" handlers If you can program and want to write an execm handler, it should not be too difficult to make sense of one of the existing handlers. The best documentation of the communication "protocol" is found in the comments at the top of the internfile/mh_execm.h header file. The existing handlers differ in the amount of helper code which they are using: rclimg is written in Perl and handles the execm protocol all by itself (showing how trivial it is). All the Python handlers share at least the rclexecm.py module, which handles the communication. Have a look at, for example, rclzip.py for a handler which uses rclexecm.py directly. Most Python handlers which process single-document files by executing another command are further abstracted by using the rclexec1.py module. See for example rclrtf.py for a simple one, or rcldoc.py for a slightly more complicated one (possibly executing several commands). Handlers which extract text from an XML document by using an XSLT style sheet are now executed inside recollindex, with only the style sheet stored in the filters/ directory. These can use a single style sheet (e.g. abiword.xsl), or two sheets for the data and metadata (e.g. opendoc-body.xsl and opendoc-meta.xsl). The mimeconf configuration file defines how the sheets are used, have a look. Before the C++ import, the xsl-based handlers used a common module rclgenxslt.py, it is still around but unused at the moment. The handler for OpenXML presentations is still the Python version because the format did not fit with what the C++ code does. It would be a good base for another similar issue. There is a sample trivial handler based on rclexecm.py, with many comments, not actually used by &RCL;. It would index a text file as one document per line. Look for rcltxtlines.py in the src/filters directory in the online &RCL; Git repository (the sample not in the distributed release at the moment). You can also have a look at the slightly more complex rclzip.py which uses Zip file paths as identifiers (ipath). execm handlers sometimes need to make a choice for the nature of the ipath elements that they use in communication with the indexer. Here are a few guidelines: Use ASCII or UTF-8 (if the identifier is an integer print it, for example, like printf %d would do). If at all possible, the data should make some kind of sense when printed to a log file to help with debugging. &RCL; uses a colon (:) as a separator to store a complex path internally (for deeper embedding). Colons inside the ipath elements output by a handler will be escaped, but would be a bad choice as a handler-specific separator (mostly, again, for debugging issues). In any case, the main goal is that it should be easy for the handler to extract the target document, given the file name and the ipath element. execm handlers will also produce a document with a null ipath element. Depending on the type of document, this may have some associated data (e.g. the body of an email message), or none (typical for an archive file). If it is empty, this document will be useful anyway for some operations, as the parent of the actual data documents. Telling &RCL; about the handler There are two elements that link a file to the handler which should process it: the association of file to MIME type and the association of a MIME type with a handler. The association of files to MIME types is mostly based on name suffixes. The types are defined inside the mimemap file. Example: .doc = application/msword If no suffix association is found for the file name, recent &RCL; will use libmagic. Older versions or specially built ones may try to execute a system command (typically file -i or xdg-mime). The second element is the association of MIME types to handlers in the mimeconf file. A sample will probably be better than a long explanation: [index] application/msword = exec antiword -t -i 1 -m UTF-8;\ mimetype = text/plain ; charset=utf-8 application/ogg = exec rclogg text/rtf = exec unrtf --nopict --html; charset=iso-8859-1; mimetype=text/html application/x-chm = execm rclchm.py The fragment specifies that: application/msword files are processed by executing the antiword program, which outputs text/plain encoded in utf-8. application/ogg files are processed by the rclogg script, with default output type (text/html, with encoding specified in the header, or utf-8 by default). text/rtf is processed by unrtf, which outputs text/html. The iso-8859-1 encoding is specified because it is not the utf-8 default, and not output by unrtf in the HTML header section. application/x-chm is processed by a persistent handler. This is determined by the execm keyword. Input handler output Both the simple and persistent input handlers can return any MIME type to Recoll, which will further process the data according to the MIME configuration. Most input filters filters produce either text/plain or text/html data. There are exceptions, for example, filters which process archive file (zip, tar, etc.) will usually return the documents as they are found, without processing them further. There is nothing to say about text/plain output, except that its character encoding should be consistent with what is specified in the mimeconf file. For filters producing HTML, the output could be very minimal like the following example: Some text content ]]> You should take care to escape some characters inside the text by transforming them into appropriate entities. At the very minimum, "&" should be transformed into "&amp;", "<" should be transformed into "&lt;". This is not always properly done by external helper programs which output HTML, and of course never by those which output plain text. When encapsulating plain text in an HTML body, the display of a preview may be improved by enclosing the text inside <pre> tags. The character set needs to be specified in the header. It does not need to be UTF-8 (&RCL; will take care of translating it), but it must be accurate for good results. &RCL; will process meta tags inside the header as possible document fields candidates. Documents fields can be processed by the indexer in different ways, for searching or displaying inside query results. This is described in a following section. By default, the indexer will process the standard header fields if they are present: title, meta/description, and meta/keywords are both indexed and stored for query-time display. A predefined non-standard meta tag will also be processed by &RCL; without further configuration: if a date tag is present and has the right format, it will be used as the document date (for display and sorting), in preference to the file modification date. The date format should be as follows: <meta name="date" content="YYYY-mm-dd HH:MM:SS"> or <meta name="date" content="YYYY-mm-ddTHH:MM:SS"> Example: <meta name="date" content="2013-02-24 17:50:00"> Input handlers also have the possibility to "invent" field names. This should also be output as meta tags: <meta name="somefield" content="Some textual data" /> You can embed HTML markup inside the content of custom fields, for improving the display inside result lists. In this case, add a (wildly non-standard) markup attribute to tell &RCL; that the value is HTML and should not be escaped for display. <meta name="somefield" markup="html" content="Some <i>textual</i> data" /> As written above, the processing of fields is described in a further section. Persistent filters can use another, probably simpler, method to produce metadata, by calling the setfield() helper method. This avoids the necessity to produce HTML, and any issue with HTML quoting. See, for example, rclaudio.py in &RCL; 1.23 and later for an example of handler which outputs text/plain and uses setfield() to produce metadata. Page numbers The indexer will interpret ^L characters in the handler output as indicating page breaks, and will record them. At query time, this allows starting a viewer on the right page for a hit or a snippet. Currently, only the PDF, Postscript and DVI handlers generate page breaks. Field data processing Fields are named pieces of information in or about documents, like title, author, abstract. The field values for documents can appear in several ways during indexing: either output by input handlers as meta fields in the HTML header section, or extracted from file extended attributes, or added as attributes of the Doc object when using the API, or again synthetized internally by &RCL;. The &RCL; query language allows searching for text in a specific field. &RCL; defines a number of default fields. Additional ones can be output by handlers, and described in the fields configuration file. Fields can be: indexed, meaning that their terms are separately stored in inverted lists (with a specific prefix), and that a field-specific search is possible. stored, meaning that their value is recorded in the index data record for the document, and can be returned and displayed with search results. A field can be either or both indexed and stored. This and other aspects of fields handling is defined inside the fields configuration file. Some fields may also designated as supporting range queries, meaning that the results may be selected for an interval of its values. See the configuration section for more details. The sequence of events for field processing is as follows: During indexing, recollindex scans all meta fields in HTML documents (most document types are transformed into HTML at some point). It compares the name for each element to the configuration defining what should be done with fields (the fields file) If the name for the meta element matches one for a field that should be indexed, the contents are processed and the terms are entered into the index with the prefix defined in the fields file. If the name for the meta element matches one for a field that should be stored, the content of the element is stored with the document data record, from which it can be extracted and displayed at query time. At query time, if a field search is performed, the index prefix is computed and the match is only performed against appropriately prefixed terms in the index. At query time, the field can be displayed inside the result list by using the appropriate directive in the definition of the result list paragraph format. All fields are displayed on the fields screen of the preview window (which you can reach through the right-click menu). This is independent of the fact that the search which produced the results used the field or not. You can find more information in the section about the fields file, or in comments inside the file. You can also have a look at the example in the FAQs area, detailing how one could add a page count field to pdf documents for displaying inside result lists. Python API Introduction The &RCL; Python programming interface can be used both for searching and for creating/updating an index with a program run by the Python3 interpreter. It is available on all platforms (&LIN;, MS &WIN;, MacOS). The search interface is used in a number of active projects: the &RCL; Gnome Shell Search Provider, the &RCL; Web UI, and the upmpdcli UPnP Media Server, in addition to many small scripts. The index updating part of the API can be used to create and update &RCL; indexes. Up to &RCL; 1.37 these needed to use separate configurations (but could be queried in conjunction with the regular index). As of &RCL; 1.37, an external indexer based on the Python extension can update the main index. For example the &RCL; indexer for the Joplin notes application is using this method. The search API is modeled along the Python database API version 2.0 specification (early versions used the version 1.0 spec). The recoll package contains two modules: The recoll module contains functions and classes used to query or update the index. The rclextract module contains functions and classes used at query time to access document data. This can be used, for example, for extracting embedded documents into standalone files. There is a good chance that your system repository has packages for the Recoll Python API, sometimes in a package separate from the main one (maybe named something like python3-recoll). Else refer to the Building from source chapter. As an introduction sample, the following small program will run a query and list the title and url for each of the results. The python/samples source directory contains several examples of Python programming with &RCL;, exercising the extension more completely, and especially its data extraction features. You can also take a look at the source for (in order of complexity) the Recoll Gnome Shell Search Provider or WebUI, and the upmpdcli local media server. Interface elements A few elements in the interface are specific and and need an explanation. ipath An ipath identifies an embedded document inside a standalone one (designated by an URL). The value, if needed, is stored along with the URL, but not indexed. It is accessible or set as a field in the Doc object. ipaths are opaque values for the lower index layers (Doc objects producers or consumers), and their use is up to the specific indexer. For example, the &RCL; file system indexer uses the ipath to store the part of the document access path internal to (possibly imbricated) container documents. ipath in this case is a vector of access elements (e.g, the first part could be a path inside a zip file to an archive member which happens to be an mbox file, the second element would be the message sequential number inside the mbox etc.). The index itself has no knowledge of this hierarchical structure. At the moment, only the filesystem indexer uses hierarchical ipaths (neither the Web nor the Joplin one do), and there are some assumptions in the upper software layers about their structure. For example, the &RCL; GUI knows about using an FS indexer ipath for such functions as opening the immediate parent of a given document. url and ipath are returned in every search result and define the access to the original document. ipath is empty for top-level document/files (e.g. a PDF document which is a filesystem file). udi An udi (unique document identifier) identifies a document. Because of limitations inside the index engine, it is restricted in length (to 200 bytes). The structure and contents of the udi is defined by the application and opaque to the index engine. For example, the internal file system indexer uses the complete document path (file path + internal path), truncated to a maximum length, the suppressed part being replaced by a hash value to retain practical unicity. To rephrase, and hopefully clarify: the filesystem indexer can't use the URL+ipath as a unique document-identifying term because this may be too big: it derives a shorter udi from URL+ipath. Another indexer could use a completely different method. For example, the Joplin indexer uses the note ID. parent_udi If this attribute is set on a document when entering it in the index, it designates its physical container document. In a multilevel hierarchy, this may not be the immediate parent. If the indexer uses the purge() method, then the use of parent_udi is mandatory for subdocuments. Else it is optional, but its use by an indexer may simplify index maintenance, as &RCL; will automatically delete all children defined by parent_udi == udi when the document designated by udi is destroyed. e.g. if a Zip archive contains entries which are themselves containers, like mbox files, all the subdocuments inside the Zip file (mbox, messages, message attachments, etc.) would have the same parent_udi, matching the udi for the Zip file, and all would be destroyed when the Zip file (identified by its udi) is removed from the index. Stored and indexed fields The fields file inside the &RCL; configuration defines which document fields are either indexed (searchable), stored (retrievable with search results), or both. Apart from a few standard/internal fields, only the stored fields are retrievable through the Python search interface. Log messages for Python scripts Two specific configuration variables: pyloglevel and pylogfilename allow overriding the generic values for Python programs. Set pyloglevel to 2 to suppress default startup messages (printed at level 3). Python search interface The recoll module connect(confdir=None, extra_dbs=None, writable = False) The connect() function connects to one or several &RCL; index(es) and returns a Db object. This call initializes the recoll module, and it should always be performed before any other call or object creation. confdir designates the main index configuration directory. The usual system-dependant defaults apply if the value is empty. extra_dbs is a list of additional external indexes (Xapian directories). These will be queried, but supply no configuration values. writable decides if we can index new data through this connection. Example: The Db class A Db object is created by a connect() call and holds a connection to a &RCL; index. Db.query(), Db.cursor()These (synonym) methods return a blank Query object for this index. Db.getdoc(udi, idxidx=0) Retrieve a document given its unique document identifier, and its index if external indexes are in use. The main index is always index 0. The udi value could have been obtained from an earlier query as doc.rcludi, or would be known because the application is the indexer and generates the values. Db.termMatch(match_type, expr, field='', maxlen=-1, casesens=False, diacsens=False, lang='english') Expand an expression against the index term list. Performs the basic function from the GUI term explorer tool. match_type can be one of wildcard, regexp or stem. field, if set, restricts the matches to the contents of the specified metadata field. Returns a list of terms expanded from the input expression. Db.setAbstractParams(maxchars, contextwords)Set the parameters used to build snippets (sets of keywords in context text fragments). maxchars defines the maximum total size of the abstract. contextwords defines how many terms are shown around the keyword. Db.close()Closes the connection. You can't do anything with the Db object after this. If the index was opened as writable, this commits any pending change. Db.setSynonymsFile(path)Set the synonyms file used when querying. The Query class A Query object (equivalent to a cursor in the Python DB API) is created by a Db.query() call. It is used to execute index searches. Query.sortby(fieldname, ascending=True) Set the sorting order for future searches to using fieldname, in ascending or descending order. Must be called before executing the search. Query.execute(query_string, stemming=1, stemlang="english", fetchtext=False, collapseduplicates=False) Start a search for query_string, a &RCL; search language string. If the index stores the documents texts and fetchtext is True, the Doc objects in the query result will store the document extracted text in doc.text. Else, the doc.text fields will be empty. If collapseduplicates is true, only one of multiple identical documents (defined by having the same MD5 hash) will appear in the result list. Query.executesd(SearchData, fetchtext=False, collapseduplicates=False) Starts a search for the query defined by the SearchData object. See above for a description of the other parameters. Query.fetchmany(size=query.arraysize) Fetch the next Doc objects from the current search result list, and return them as an array of the required size, which is by default the value of the arraysize data member. Query.fetchone() Fetch the next Doc object from the current search result list. Generates a StopIteration exception if there are no results left. Query.__iter__() and Query.next() So that things like for doc in query: will work. Example: from recoll import recoll db = recoll.connect() q = db.query() nres = q.execute("some query") for doc in q: print("%s" % doc.title) Query.close() Close the query. The object is unusable after the call. Query.scroll(value, mode='relative') Adjust the position in the current result set. mode can be relative or absolute. Query.getgroups() Retrieve the expanded query terms as a list of pairs. Meaningful only after executexx In each pair, the first entry is a list of user terms (of size one for simple terms, or more for group and phrase clauses), the second a list of query terms derived from the user terms and used in the Xapian Query. Query.getxquery() Return the Xapian query description as a Unicode string. Meaningful only after executexx. Query.highlight(text, ishtml = 0, methods = object) Will insert <span "class=rclmatch">, and </span> tags around the match areas in the input text and return the modified text. ishtml can be set to indicate that the input text is HTML and that HTML special characters should not be escaped. methods, if set, should be an object having methods startMatch(i) and endMatch() which will be called for each match and should return a begin and end tag. Example: " def endMatch(self): return "" ]]> Query.makedocabstract(doc, methods = object)) Create a snippets abstract for doc (a Doc object) by selecting text around the match terms. If methods is set, will also perform highlighting. See the highlight() method. Query.getsnippets(doc, maxoccs = -1, ctxwords = -1, sortbypage=False, methods=object) Return a list of extracts from the result document by selecting text around the match terms. Each entry in the result list is a triple: page number, term, text. By default, the most relevants snippets appear first in the list. Set sortbypage to sort by page number instead. If methods is set, the fragments will be highlighted (see the highlight() method). If maxoccs is set, it defines the maximum result list length. ctxwords allows adjusting the individual snippet context size. Query.arraysize (r/w). Default number of records processed by fetchmany(). Query.rowcountNumber of records returned by the last execute. Query.rownumber Next index to be fetched from results. Normally increments after each fetchone() call, but can be set/reset before the call to effect seeking (equivalent to using scroll()). Starts at 0. The Doc class A Doc object contains index data for a given document. The data is extracted from the index when searching, or set by the indexer program when updating. Please note that a Doc should never be instanciated by its constructor but instead by calling db.doc() or some other API method returning a doc object. Otherwise, the object will lack some necessary references. The Doc object has many attributes to be read or set by its user. It mostly matches the Rcl::Doc C++ object. Some of the attributes are predefined, but, especially when indexing, others can be set, the name of which will be processed as field names by the indexing configuration. Inputs can be specified as Unicode or strings. Outputs are Unicode objects. All dates are specified as Unix timestamps, printed as strings. Please refer to the rcldb/rcldoc.cpp C++ file for a full description of the predefined attributes. Here follows a short list. url the document URL but see also getbinurl() ipath the document ipath for embedded documents. fbytes, dbytes the document file and text sizes. fmtime, dmtime the document file and document times. xdocid the document Xapian document ID. This is useful if you want to access the document through a direct Xapian operation. mtype the document MIME type. text holds the document processed text, if the index itself is configured to store it (true by default) and if the fetchtext query execute() option was true. See also the rclextract module for accessing document contents. Other fields stored by default: author, filename, keywords, recipient At query time, only the fields that are defined as stored either by default or in the fields configuration file will be meaningful in the Doc object. get(key), [] operator Retrieve the named document attribute. You can also use getattr(doc, key) or doc.key. doc.key = value Set the the named document attribute. You can also use setattr(doc, key, value). getbinurl() Retrieve the URL in byte array format (no transcoding), for use as parameter to a system call. This is useful for the filesystem indexer file:// URLs which are stored unencoded, as binary data. setbinurl(url) Set the URL in byte array format (no transcoding). items() Return a dictionary of doc object keys/values keys() list of doc object keys (attribute names). The SearchData class A SearchData object allows building a query by combining clauses, for execution by Query.executesd(). It can be used in replacement of the query language approach. The interface is going to change a little, so no detailed doc for now... addclause(type='and'|'or'|'excl'|'phrase'|'near'|'sub', qstring=string, slack=0, field='', stemming=1, subSearch=SearchData) The rclextract module Prior to &RCL; 1.25, index queries could not provide document content because it was never stored. &RCL; 1.25 and later usually store the document text, which can be optionally retrieved when running a query (see query.execute() above - the result is always plain text). Independantly, the rclextract module can give access to the original document and to the document text content, possibly as an HTML version. Accessing the original document is particularly useful if it is embedded (e.g. an email attachment). You need to import the recoll module before the rclextract module. The Extractor class Extractor(doc) An Extractor object is built from a Doc object, output from a query. Extractor.textextract(ipath) Extract document defined by ipath and return a Doc object. The doc.text field has the document text converted to either text/plain or text/html according to doc.mimetype. The typical use would be as follows: from recoll import recoll, rclextract qdoc = query.fetchone() extractor = rclextract.Extractor(qdoc) doc = extractor.textextract(qdoc.ipath) # use doc.text, e.g. for previewing Passing qdoc.ipath to textextract() is redundant, but reflects the fact that the Extractor object actually has the capability to access the other entries in a compound document. Extractor.idoctofile(ipath, targetmtype, outfile='') Extracts document into an output file, which can be given explicitly or will be created as a temporary file to be deleted by the caller. Typical use: from recoll import recoll, rclextract qdoc = query.fetchone() extractor = rclextract.Extractor(qdoc) filename = extractor.idoctofile(qdoc.ipath, qdoc.mimetype) In all cases the output is a copy, even if the requested document is a regular system file, which may be wasteful in some cases. If you want to avoid this, you can test for a simple file document as follows: not doc.ipath and (not "rclbes" in doc.keys() or doc["rclbes"] == "FS") Search API usage example The following sample would query the index with a user language string. See the python/samples directory inside the &RCL; source for other examples. The recollgui subdirectory has a very embryonic GUI which demonstrates the highlighting and data extraction functions. 5: nres = 5 for i in range(nres): doc = query.fetchone() print("Result #%d" % (query.rownumber)) for k in ("title", "size"): print("%s : %s" % (k, getattr(doc, k))) print("%s\n" % db.makeDocAbstract(doc, query)) ]]> The fsudi module The fsudi module contains a single method, which duplicates the code used by the main filesystem indexer to derive an UDI from a filesystem path. In turn, this allows external code to call the getDoc() method to retrieve the Doc object. This can be useful, for example, for updating the metadata without fully reindexing the document. fsudi.fs_udi(path, ipath='') Obtain the UDI value for the given path and ipath. The returned value can be used with the db.getDoc() method. Python indexing interface Recoll external indexers The &RCL; indexer is capable of processing many different document formats. However, some forms of data storage do not lend themselves easily to standard processing because of their great variability. A canonical example would be data in an SQL database. While it might be possible to create a configurable handler to process data from a database, the many variations in storage organisation and SQL dialects make this difficult. &RCL; can instead support external indexers where all the responsibility to handle the data format is delegated to an external script. The script language has to be Python 3 at the moment, because this is the only language for which an API binding exists. Up to &RCL; 1.35, such an indexer had to work on a separate &RCL; index, which would be added as an external index for querying from the main one, and for which a separate indexing schedule had to be managed. The reason was that the main document indexer purge pass (removal of deleted documents) would also remove all the documents belonging to the external indexer, as they were not seen during the filesystem walk (and conversely, the external indexer purge pass would delete all the regular document entries). As of &RCL; 1.36, an improvement and new API call allows external indexers to be fully integrated, and work on the main index, with updates triggered from the normal recollindex program. An external indexer has to do the same work as the &RCL; file system indexer: look for modified documents, extract their text, call the API for indexing them, and the one for purging the data for deleted documents. A description of the API method follows, but you can also jump ahead for a look at some sample pseudo-code and a pair of actual implementations, one of which does something useful. The Python indexing API There are two parts in the indexing interface: Methods inside the recoll module allow the foreign indexer to update the index. An interface based on scripts execution is defined for executing the indexer (from recollindex) and to allow either the GUI or the rclextract module to access original document data for previewing or editing. Two sample scripts are included with the &RCL; source and described in more detail a bit further. Python indexing interface methods The update methods are part of the recoll module. The connect() method is used with a writable=true parameter to obtain a writable Db object. The following Db object methods are then available. Note that the changes are only guaranteed to be flushed to the index when db.close() is called. This normally occurs when the program exits, but it is much safer to use an explicit call after making the changes. addOrUpdate(udi, doc, parent_udi=None, metaonly=False) Add or update index data for a given document. The udi string must define a unique id for the document. It is an opaque interface element and not interpreted inside the lower level &RCL; code. doc is a Doc object, containing the data to be indexed. If parent_udi is set, this is a unique identifier for the top-level container, the document for which needUpdate() would be called (e.g. for the filesystem indexer, this would be the one which is an actual file). If metaonly is set, the main document text (in the doc.text attribute) will be ignored and only the other metadata fields present in the doc object will be processed. This can be useful for updating the metadata apart from the main text. Document attributes: doc.text should have the main text. It is ignored if metaonly is set. For actual indexing (metaonly not set), the url and possibly ipath fields should also be set to allow access to the actual document after a query. Other fields may also need to be set by an external indexer see the description further down: rclbes, sig, mimetype. Of course, any standard or custom &RCL; field can also be added. delete(udi) Purge the index from all data for udi, and all documents (if any) which have udi as parent_udi. needUpdate(udi, sig) Test if the index needs to be updated for the document identified by udi. If this call is to be used, the doc.sig field should contain a signature value when calling addOrUpdate(). The needUpdate() call then compares its parameter value with the stored sig for udi. sig is an opaque value, compared as a string. The filesystem indexer uses a concatenation of the decimal string values for file size and update time, but a hash of the contents could also be used. As a side effect, if the return value is false (the index is up to date), the call will set the existence flag for the document (and any subdocument defined by its parent_udi), so that a later purge() call will preserve them. The use of needUpdate() and purge() is optional, and the indexer may use another method for checking the need to reindex or to delete stale entries. preparePurge(backend_name) Mark all documents which do *not* belong to backend_name as existing. backend_name is the value chosen for the rclbes field for the indexer documents (e.g. "MBOX", "JOPLIN"... for the samples). This is a mandatory call before starting an update if the index is shared with other backends and you are going to call purge() after the update, else all documents for other backends will be deleted from the index by the purge. purge() Delete all documents that were not touched during the just finished indexing pass (since preparePurge()). These are the documents for which the needUpdate() call was not performed, indicating that they no longer exist in the storage system. createStemDbs(lang|sequence of langs) Create stemming dictionaries for query stemming expansion. Note that this is not needed at all if the indexing is done from the recollindex program, as it will perform this action after calling all the external indexers. Should be called when done updating the index. Available only after &RCL; 1.34.3. As an alternative, you can close the index and execute: recollindex -c <confdir> -s <lang(s)> The Python module currently has no interface to the Aspell speller functions, so the same approach can be used for creating the spelling dictionary (with option -S) (again, not needed if recollindex is driving the indexing). Query data access for external indexers &RCL; has internal methods to access document data for its internal (filesystem) indexer. An external indexer needs to provide data access methods if it needs integration with the GUI (e.g. preview function), or support for the rclextract module. An external indexer needs to provide two commands, for fetching data (typically for previewing) and for computing the document signature (for up-to-date checks when opening or previewing). The sample MBOX and JOPLIN implementations use the same script with different parameters to perform both operations, but this is just a choice. A third command must be provided for performing the indexing proper. The "fetch" and "makesig" scripts are called with three additional arguments: udi, url, ipath. These were set by the indexer and stored with the document by the addOrUpdate() call described above. Not all arguments are needed in all cases, the script will use what it needs to perform the requested operation. The caller expects the result data on stdout. recollindex will set the RECOLL_CONFDIR environment variable when executing the scripts, so that the configuration can be created as rclconf = rclconfig.RclConfig() if needed, and the configuration directory obtained as confdir = rclconf.getConfDir() External indexers configuration The index data and the access method are linked by the rclbes (recoll backend storage) Doc field. You should set this to a short string value identifying your indexer (e.g. the filesystem indexer uses either FS or an empty value, the Web history indexer uses BGL, the Joplin notes indexer uses JOPLIN). The link is actually performed inside a backends configuration file (stored in the configuration directory). This defines commands to execute to access data from the specified indexer. Example, for the mbox indexing sample found in the &RCL; source (which sets rclbes="MBOX"): [MBOX] fetch = /path/to/recoll/src/python/samples/rclmbox.py fetch makesig = /path/to/recoll/src/python/samples/rclmbox.py makesig index = /path/to/recoll/src/python/samples/rclmbox.py index When updating the index, the recollindex will execute the value of the the index parameter, if present (it may not be present if this concerns an external index). If an external indexer needs to store additional configuration parameters, e.g. path to a specific instance of the indexed application, etc., I suggest storing them inside recoll.conf, with a backend-specific prefix (e.g. joplin_db, mbox_directory) and using methods from the rclconfig module to access them. External indexer samples First a quick look at an indexer main part, using pseudo-Python3 code: # Connect to the recoll index. This will use the RECOLL_CONFDIR variable, set # by the parent recollindex process, to use the right index. rcldb = recoll.connect(writable=1) # Important: tell the Recoll db that we are going to update documents for the # MYBACK backend. All other documents will be marked as present so as # not to be affect by the subsequent purge. rcldb.preparePurge("MYBACK") # Walk your dataset (of course your code will not look like this) for mydoc in mydoclist: # Compute the doc unique identifier and the signature corresponding to its update state # (e.g. mtime and size for a file). udi = mydoc.udi() sig = mydoc.sig() # Check with recoll if the document needs updating. This has the side-effect or marking # it present. if not rcldb.needUpdate(udi, sig): continue # The document data does not exist in the index or needs updating. Create and add a Recoll # Doc object doc = recoll.Doc() doc.mimetype = "some/type" # Say that the document belongs to this indexer doc.rclbes = "MYBACK" # The url will be passed back to you along with the udi if the fetch # method is called later (for previewing), or may be used for opening the document with # its native app from Recoll. The udi has a maximum size because it is used as a Xapian # term. The url has no such limitation. doc.url = "someurl" doc.sig = sig # Of course add other fields like "text" (duh), "author" etc. See the samples. doc.text = mydoc.text() # [...] # Then add or update the data in the index. self.db.addOrUpdate(udi, doc) # Finally call purge to delete the data for documents which were not seen at all. db.purge() The Recoll source tree has two samples of external indexers. rclmbox.py indexes a directory containing mbox folder files. Of course it is not really useful because &RCL; can do this by itself, but it exercises most features in the update interface, and it has both top-level and embedded documents so it demonstrates the uses of the ipath values. rcljoplin.py indexes a Joplin application main notes SQL table. Joplin sets an an update date attribute for each record in the table, so each note record can be processed as a standalone document (no ipath necessary). The sample has full preview and open support (the latter using a Joplin callback URL which allows displaying the result note inside the native app), so it could actually be useful to perform a unified search of the Joplin data and the regular &RCL; data. As of &RCL; 1.37.0, the Joplin indexer is part of the default installation (see the features section of the Web site for more information). See the comments inside the scripts for more information. Using an external indexer index in conjunction with a regular one When adding an external indexer to a regular one for unified querying, some elements of the foreign index configuration should be copied or merged into the main index configuration. At the very least, the backends file needs to be copied or merged, and also possibly data from the mimeconf and mimeview files. See the rcljoplin.py sample for an example. Configuration Settings, configuration overview &RCL; has two kinds of configuration parameters: GUI settings are global and always set through the GUI configuration Preferences menu entry. Index configuration parameters are set per index, and stored in each index configuration directory. Many can be set either through the GUI or by editing a text configuration file, but some less common values can only be set by editing. GUI settings For reference, the GUI settings are stored in $HOME/.config/Recoll.org/recoll.conf on &LIN; and C:/Users/[you]/AppData/Roaming/Recoll/recoll.ini on &WIN;. Index configuration parameters The parameters for each &RCL; index are set inside text configuration files located in a configuration directory. There can be several such directories, each of which defines the parameters for one index. There is a default index configuration directory, used when not specified otherwise. On &LIN; it is located in $HOME/.recoll. Under &WIN;, it is located in C:\Users\[you]\AppData\Local\Recoll. The configuration files can be edited with a plain text editor or through the Index configuration dialog (Preferences menu). The GUI tool will try to preserve your formatting and comments as much as possible, so it is quite possible to use both approaches on the same configuration. For each index, there are actually at least two sets of configuration files. The parameters set in the locations listed above override or complement system-wide configuration files which come with the installation and are kept in a directory named like /usr/share/recoll/examples on &LIN; (or an equivalent on other systems), and define default values, shared by all indexes (the values in these files are often commented out, and just present to indicate the default coded in the program). The local configuration directory only stores additional or overriding parameters. The defaults are stored in the central location. You should never edit the central files as they will be overwritten by a software update. The location for the index configuration directory can be changed, or others can be added for separate indexes with the RECOLL_CONFDIR environment variable or the option parameter to recoll and recollindex. Special use: in addition, for each index, it is possible to specify two additional configuration directories which will be stacked before and after the user configuration directory. These are defined by the RECOLL_CONFTOP and RECOLL_CONFMID environment variables. Values from configuration files inside the top directory will override user ones, values from configuration files inside the middle directory will override system ones and be overridden by user ones. These two variables may be of use to applications which augment &RCL; functionality, and need to add configuration data without disturbing the user's files. Please note that the two, currently single, values will probably be interpreted as colon-separated lists in the future: do not use colon characters inside the directory paths. If the default configuration directory does not exist when either recoll or recollindex is started, it will be created with a set of empty configuration files. recoll will give you a chance to edit the configuration file before starting indexing. recollindex will proceed immediately. To avoid mistakes, the automatic directory creation will only occur for the default location, not if or RECOLL_CONFDIR were used, in which case, you will have to create the directory. All configuration files share the same format. For example, a short extract of the main configuration file might look as follows: # Space-separated list of files and directories to index. topdirs = ~/docs /usr/share/doc [~/somedirectory-with-utf8-txt-files] defaultcharset = utf-8 There are three kinds of lines: Comments: start with a hash mark #. Parameter assignments: name = value. Section definitions: [somedirname]. Lines which are empty or only containing white space are ignored. Long lines can be broken by ending each incomplete part with a backslash (\). Depending on the type of configuration file, section definitions either separate groups of parameters or allow redefining some parameters for a directory sub-tree. They stay in effect until another section definition, or the end of file, is encountered. Some of the parameters used for indexing are looked up hierarchically from the current directory location upwards. Not all parameters can be meaningfully redefined, this is specified for each in the next section. Global parameters must not be defined in a directory subsection, else they will not be found at all by the &RCL; code, which looks for them at the top level (e.g. skippedPaths). When found at the beginning of a file path, the tilde character (~) is expanded to the name of the user's home directory, as a shell would do. The same convention is used on &WIN;. Some parameters are lists of strings. White space is used for separation. List elements with embedded spaces can be quoted using double-quotes. Double quotes inside these elements can be escaped with a backslash. No value inside a configuration file can contain a newline character. Long lines can be continued by escaping the physical newline with backslash, even inside quoted strings. astringlist = "some string \ with spaces" thesame = "some string with spaces" Parameters which are not part of string lists can't be quoted, and leading and trailing space characters are stripped before the value is used. Quotes processing is ONLY applied to parameter values which are lists. Double quoting a single value like, e.g. dbdir will result in an incorrect value, with quotes included. This is quite confusing, and was a design mistake but it is much too late to fix. Encoding issues Most of the configuration parameters are plain ASCII. Two particular sets of values may cause encoding issues: File path parameters may contain non-ASCII characters and should use the exact same byte values as found in the file system directory. Usually, this means that the configuration file should use the system default locale encoding. The unac_except_trans parameter (meaning unaccenting exception translations) should be encoded in UTF-8. If your system locale is not UTF-8 (which is now very rare), and you need to also specify non-ASCII file paths, this poses a difficulty because common text editors cannot handle multiple encodings in a single file. In this relatively unlikely case, you can edit the configuration file as two separate text files with appropriate encodings, and concatenate them to create the complete configuration. Environment variables RECOLL_CONFDIR Defines the main configuration directory. RECOLL_TMPDIR, TMPDIR Locations for temporary files, in this order of priority. The default if none of these is set is to use /tmp. Big temporary files may be created during indexing, mostly for decompressing, and also for processing, e.g. email attachments. RECOLL_CONFTOP, RECOLL_CONFMID Allow adding configuration directories with priorities below and above the user directory (see above the Configuration overview section for details). RECOLL_EXTRA_DBS, RECOLL_ACTIVE_EXTRA_DBS Help for setting up external indexes. See this paragraph for explanations. RECOLL_DATADIR Defines replacement for the default location of Recoll data files, normally found in, e.g., /usr/share/recoll). RECOLL_FILTERSDIR Defines replacement for the default location of Recoll filters, normally found in, e.g., /usr/share/recoll/filters). ASPELL_PROG aspell program to use for creating the spelling dictionary. The result has to be compatible with the libaspell which &RCL; is using. &RCLCONF; The fields file This file contains information about dynamic fields handling in &RCL;. Some very basic fields have hard-wired behaviour, and, mostly, you should not change the original data inside the fields file. But you can create custom fields fitting your data and handle them just like they were native ones. The fields file has several sections, which each define an aspect of fields processing. Quite often, you'll have to modify several sections to obtain the desired behaviour. We will only give a short description here, you should refer to the comments inside the default file for more detailed information. Field names should be lowercase alphabetic ASCII. [prefixes] A field becomes indexed (searchable) by having a prefix defined in this section. There is a more complete explanation of what prefixes are in used by a standard recoll installation. In a nutshell: extension prefixes should be all caps, begin with XY, and short. E.g. XYMFLD. [values] Fields listed in this section will be stored as &XAP; values inside the index. This makes them available for range queries, allowing to filter results according to the field value. This feature currently supports string and integer data. See the comments in the file for more detail [stored] A field becomes stored (displayable inside results) by having its name listed in this section (typically with an empty value). [aliases] This section defines lists of synonyms for the canonical names used inside the [prefixes] and [stored] sections [queryaliases] This section also defines aliases for the canonic field names, with the difference that the substitution will only be used at query time, avoiding any possibility that the value would pick-up random metadata from documents. handler-specific sections Some input handlers may need specific configuration for handling fields. Only the email message handler currently has such a section (named [mail]). It allows indexing arbitrary email headers in addition to the ones indexed by default. Other such sections may appear in the future. Here follows a small example of a personal fields file. This would extract a specific email header and use it as a searchable field, with data displayable inside result lists. (Side note: as the email handler does no decoding on the values, only plain ASCII headers can be indexed, and only the first occurrence will be used for headers that occur several times). [prefixes] # Index mailmytag contents (with the given prefix) mailmytag = XMTAG [stored] # Store mailmytag inside the document data record (so that it can be # displayed - as %(mailmytag) - in result lists). mailmytag = [queryaliases] filename = fn containerfilename = cfn [mail] # Extract the X-My-Tag mail header, and use it internally with the # mailmytag field name x-my-tag = mailmytag Extended attributes in the fields file &RCL; processes user extended file attributes as documents fields by default. Attributes are processed as fields of the same name, after removing the user prefix on Linux. The [xattrtofields] section of the fields file allows specifying translations from extended attributes names to &RCL; field names. Name translations are set as xattrname = fieldname. They are case-sensitive. E.g. the following would map a quite an extended attribute named "tags" into the "keywords" field: tags = keywords. Entering an empty translation will disable any use of the attribute. The values from the extended attributes will not replace the data found from equivalent fields inside the document, instead they are concatenated. Special case: an extended attribute named modificationdate will set the dmtime field (document date) only if it is not set by an internal document field (e.g. email Date:). The mimemap file mimemap specifies the file name extension to MIME type mappings. For file names without an extension, or with an unknown one, recent &RCL; versions will use libmagic. Older versions would execute a system command (file , or xdg-mime) will be executed to determine the MIME type (this can be switched off, or the command changed inside the main configuration file). All extension values in mimemap must be entered in lower case. File names extensions are lower-cased for comparison during indexing, meaning that an upper case mimemap entry will never be matched. The mappings can be specified on a per-subtree basis, which may be useful in some cases. Example: okular notes have a .xml extension but should be handled specially, which is possible because they are usually all located in one place. Example: [~/.kde/share/apps/okular/docdata] .xml = application/x-okular-notes The recoll_noindex mimemap variable has been moved to recoll.conf and renamed to noContentSuffixes, while keeping the same function, as of &RCL; version 1.21. For older &RCL; versions, see the documentation for noContentSuffixes but use recoll_noindex in mimemap. The mimeconf file The main purpose of the mimeconf file is to specify how the different MIME types are handled for indexing. This is done in the [index] section, which should not be modified casually. See the comments in the file. The file also contains other definitions which affect the query language and the GUI, and which, in retrospect, should have been stored elsewhere. The [icons] section allows you to change the icons which are displayed by the recoll GUI in the result lists (the values are the basenames of the png images inside the iconsdir directory (which is itself defined in recoll.conf). The [categories] section defines the groupings of MIME types into categories as used when adding an rclcat clause to a query language query. rclcat clauses are also used by the default guifilters buttons in the GUI (see next). The filter controls appear at the top of the recoll GUI, either as checkboxes just above the result list, or as a dropbox in the tool area. By default, they are labeled: media, message, other, presentation, spreadsheet and text, and each maps to a document category. This is determined in the [guifilters] section, where each control is defined by a variable naming a query language fragment. A simple example will hopefully make things clearer. [guifilters] Big Books = dir:"~/My Books" size>10K My Docs = dir:"~/My Documents" Small Books = dir:"~/My Books" size<10K System Docs = dir:/usr/share/doc The above definition would create four filter checkboxes, labelled Big Books, My Docs, etc. The text after the equal sign must be a valid query language fragment, and, when the button is checked, it will be combined with the rest of the query with an AND conjunction. Any name text before a colon character will be erased in the display, but used for sorting. You can use this to display the checkboxes in any order you like. For example, the following would do exactly the same as above, but ordering the checkboxes in the reverse order. [guifilters] d:Big Books = dir:"~/My Books" size>10K c:My Docs = dir:"~/My Documents" b:Small Books = dir:"~/My Books" size<10K a:System Docs = dir:/usr/share/doc As you may have guessed, The default [guifilters] section looks like: [guifilters] text = rclcat:text spreadsheet = rclcat:spreadsheet presentation = rclcat:presentation media = rclcat:media message = rclcat:message other = rclcat:other The mimeview file mimeview specifies which programs are started when you click on an Open link in a result list. E.g.: HTML is normally displayed using firefox, but you may prefer Konqueror, your openoffice.org program might be named oofice instead of openoffice etc. Changes to this file can be done by direct editing, or through the recoll GUI preferences dialog. If Use desktop preferences to choose document editor is checked in the &RCL; GUI preferences, all mimeview entries will be ignored except the one labelled application/x-all (which is set to use xdg-open by default). In this case, the xallexcepts top level variable defines a list of MIME type exceptions which will be processed according to the local entries instead of being passed to the desktop. This is so that specific &RCL; options such as a page number or a search string can be passed to applications that support them, such as the evince viewer. As for the other configuration files, the normal usage is to have a mimeview inside your own configuration directory, with just the non-default entries, which will override those from the central configuration file. All viewer definition entries must be placed under a [view] section. The keys in the file are normally MIME types. You can add an application tag to specialize the choice for an area of the filesystem (using a localfields specification in mimeconf). The syntax for the key is mimetype|tag The nouncompforviewmts entry, (placed at the top level, outside of the [view] section), holds a list of MIME types that should not be uncompressed before starting the viewer (if they are found compressed, e.g.: mydoc.doc.gz). The right side of each assignment holds a command to be executed for opening the file. The following substitutions are performed: %D Document date %f File name. This may be the name of a temporary file if it was necessary to create one (e.g.: to extract a subdocument from a container). %i Internal path, for subdocuments of containers. The format depends on the container type. If this appears in the command line, &RCL; will not create a temporary file to extract the subdocument, expecting the called application (possibly a script) to be able to handle it. %MMIME type %pPage index. Only significant for a subset of document types, currently only PDF, Postscript and DVI files. If it is set, a significant term will be chosen in the query, and %p will be substituted with the first page where the term appears. Can be used to start the editor at the right page for a match or snippet. %lLine number. Only significant for document types with relevant line breaks, mostly text/plain and analogs. If it is set, a significant term will be chosen in the query, and %p will be substituted with the first line where the term appears. %sSearch term. The value will only be set for documents with indexed page or line numbers and if %p or %l is also used. The value will be one of the matched search terms. It would allow pre-setting the value in the "Find" entry inside Evince for example, for easy highlighting of the term. %uUrl. In addition to the predefined values above, all strings like %(fieldname) will be replaced by the value of the field named fieldname for the document. This could be used in combination with field customisation to help with opening the document. The <filename>ptrans</filename> file ptrans specifies query-time path translations. These can be useful in multiple cases. The file has a section for any index which needs translations, either the main one or additional query indexes. The sections are named with the &XAP; index directory names. No slash character should exist at the end of the paths (all comparisons are textual). An example should make things sufficiently clear [/home/me/.recoll/xapiandb] /this/directory/moved = /to/this/place [/path/to/additional/xapiandb] /server/volume1/docdir = /net/server/volume1/docdir /server/volume2/docdir = /net/server/volume2/docdir Examples of configuration adjustments Adding an external viewer for an non-indexed type Imagine that you have some kind of file which does not have indexable content, but for which you would like to have a functional Open link in the result list (when found by file name). The file names end in .blob and can be displayed by application blobviewer. You need two entries in the configuration files for this to work: In $RECOLL_CONFDIR/mimemap (typically ~/.recoll/mimemap), add the following line: .blob = application/x-blobapp Note that the MIME type is made up here, and you could call it diesel/oil just the same. In $RECOLL_CONFDIR/mimeview under the [view] section, add: application/x-blobapp = blobviewer %f We are supposing that blobviewer wants a file name parameter here, you would use %u if it liked URLs better. If you just wanted to change the application used by &RCL; to display a MIME type which it already knows, you would just need to edit mimeview. The entries you add in your personal file override those in the central configuration, which you do not need to alter. mimeview can also be modified from the Gui. Adding indexing support for a new file type Let us now imagine that the above .blob files actually contain indexable text and that you know how to extract it with a command line program. Getting &RCL; to index the files is easy. You need to perform the above alteration, and also to add data to the mimeconf file (typically in ~/.recoll/mimeconf): Under the [index] section, add the following line (more about the rclblob indexing script later): application/x-blobapp = exec rclblob Or if the files are mostly text and you don't need to process them for indexing: application/x-blobapp = internal text/plain Under the [icons] section, you should choose an icon to be displayed for the files inside the result lists. Icons are normally 64x64 pixels PNG files which live in /usr/share/recoll/images. Under the [categories] section, you should add the MIME type where it makes sense (you can also create a category). Categories may be used for filtering in advanced search. The rclblob handler should be an executable program or script which exists inside /usr/share/recoll/filters. It will be given a file name as argument and should output the text or html contents on the standard output. The filter programming section describes in more detail how to write an input handler. Appendices Processing of wild card and other special characters Recoll is primarily designed to search for natural language words, and the general rule is that non-alphanumeric characters are treated as white space (word separators). However, a number of ASCII characters receive special treatment. The details are described in the following. Words and spans Some important searchable text elements contain non-alphanumeric characters, for example, email addresses (jfd@recoll.org), proper names (O'Brien) or internet addresses (192.168.4.1). If we treat the special characters as white space in this situation, the only way to search for these terms with a reasonable degree of precision would to use phrase searches ("jf dockes org"). However, phrase searches need a lot of computation and are generally slower. This was especially true with older &XAP; versions. &RCL; has special processing for these elements, designated as spans. The corresponding linkage characters will be designated as span glue in the following. When indexing a span like jfd@recoll.org, &RCL; generates both regular individual terms (jfd, recoll, org) and multiword terms linked by span glue: jfd@recoll.org, jfd@recoll, recoll.org. When searching, only the larger term (complete span: jfd@recoll.org) is used, so that &XAP; executes a regular single-term search instead of a phrase one. Special ASCII characters during indexing Characters with hard-coded processing - and + have special treatment in numbers or terms like C++, else they are processed as span glue. . and ' are always processed as span glue. # is processed as a letter at the beginning (hashtag) or end (c#) of a word, else as white space. The underscore (_) is processed as span glue except if the underscoreasletter index configuration parameter is set, in which case it is treated as a regular letter. Characters generally treated as white space !"$%&(),/:;<=>^\`{|}~ and wild card expression characters *[]? are generally treated as white space while indexing, except if they are included in the indexedpunctuation index configuration variable. Elements of indexedpunctuation are treated as single terms which allows to match, e.g., 93% with precisely 93% (or just 93 if preferrable). Backslash \ is treated as a letter if backslashasletter is set, else treated as other punctuation according to indexedpunctuation. backslashasletter was broken until &RCL; version 1.42.2 Special ASCII characters at search time Slightly different rules apply when querying, for example because of the special characters used by the Query language, or because of wild card expansion. Query language special characters "():=<> and .. have special meaning for the query language. There is no way to escape them. This is generally not a problem because they are all treated as white space during indexing, except if included in indexedpunctuation. In the latter case, it is still possible to search for them through the All terms or Any term search modes or by using the Advanced search GUI dialog. Wild card characters When querying, wild card characters generally cause an expansion of the term they are found in. Until &RCL; version 1.42.2, there was no way to escape them. As of &RCL; 1.42.2 it is possible to escape wild card characters with a backslash when in File name search mode and it becomes possible to exactly search for file names containing these characters. Previously, you would have had to use a less precise search by replacing them with a ? wild card or using another mode. Building and Installation Installing a binary copy &RCL; binary copies are always distributed as regular packages for your system. They can be obtained either through the system's normal software distribution framework (e.g. Debian/Ubuntu apt, FreeBSD ports, etc.), or from some type of "backports" repository providing versions newer than the standard ones, or found on the &RCL; Web site in some cases. The most up-to-date information about Recoll packages can usually be found on the Recoll Web site downloads page The &WIN; version of Recoll comes in a self-contained setup file, there is nothing else to install. On &LIN;, the package management tools will automatically install hard dependencies for packages obtained from a proper package repository. You will have to deal with them by hand for downloaded packages (for example, when dpkg complains about missing dependencies). In all cases, you will have to check or install supporting applications for the file types that you want to index beyond those that are natively processed by &RCL; (text, HTML, email files, and a few others). You should also maybe have a look at the configuration section (but this may not be necessary for a quick test with default parameters). Most parameters can be more conveniently set from the GUI interface. Supporting packages The &WIN; installation of &RCL; is self-contained. &WIN; users can skip this section. &RCL; uses external applications to index some file types. You need to install them for the file types that you wish to have indexed (these are run-time optional dependencies. None is needed for building or running &RCL; except for indexing their specific file type). After an indexing pass, the commands that were found missing can be displayed from the recoll File menu. The list is stored in the missing text file inside the configuration directory. The past has proven that I was unable to maintain an up to date application list in this manual. Please check &RCLAPPS; for a complete list along with links to the home pages or best source/patches pages, and misc tips. What follows is only a very short extract of the stable essentials. PDF files need pdftotext which is part of Poppler (usually comes with the poppler-utils package). Avoid the original one from Xpdf. MS Word documents need antiword. It is also useful to have wvWare installed as it may be be used as a fallback for some files which antiword does not handle. RTF files need unrtf. Check &RCLAPPS; for details. Pictures: &RCL; uses the Exiftool Perl package to extract tag information. Most image file formats are supported. Up to &RCL; 1.24, many XML-based formats need the xsltproc command, which usually comes with libxslt. These are: abiword, fb2 ebooks, kword, openoffice, opendocument svg. &RCL; 1.25 and later process them internally (using libxslt). Please check &RCLAPPS; for a much more complete and up to date list. Building from source Prerequisites The following prerequisites are described in broad terms and Debian package names. The dependencies should be available as packages on most common &LIN;, and it should be quite uncommon that you would have to build one of them. Finding the right package name for non-Debian systems is left to the sagacity of the reader. Up to version 1.37, the &RCL; build process used the GNU autotools. Versions 1.38 and later use meson/ninja instead. If you do not need the GUI, you can avoid all GUI dependencies by disabling its build: see the configure section further down: -Dqtgui=false. Check the &RCL; download page for up to date &RCL; version information and links to source release files in tar format. The shopping list follows. I try to keep it up to date, but an easy way to see the current list of build dependencies is to have a look at the debian package control file in the recoll source tree (packaging/debian/debian/control). If you start from git repository source code, you will need the git, obviously (package: git). On &LIN; systems, you will need the meson and ninja commands. (package: meson, this will bring ninja as a dependency). Not needed on &MAC; at the moment. The pkg-config command is needed for configuring the build (package: pkg-config). The make command is needed for building the GUI, unneeded if you disable this. (package: make). A C++ compiler with at least C++17 compatibility (g++ or clang). &RCL; Versions 1.33.4 and older only required c++11. The bison command is not generally needed, but might be if you modify the query language yacc source or if some file modification times are not right (package: bison). For building the documentation: the xsltproc command, and the Docbook XML and style sheet files. You can avoid this dependency by disabling documentation building with the -Duserdoc=false setup option. Development files for Xapian core (libxapian-dev). Development files for libxml2 and libxslt (packages: libxslt1-dev, which will pull libxml2-dev). Development files for zlib (zlib1g-dev). Development files for libmagic (libmagic-dev). Development files for libaspell (package: libaspell-dev). Can be avoided with the -Daspell=false setup option. If you want to process CHM files, you will need libchm (libchm-dev), else you can set the -Dpython-chm=false option to the setup command. If you want the daemon indexer process to monitor the session for quitting, you need the X11 development library (package: libx11-dev). Else use the -Dx11mon=false setup option. If you want to build the GUI: qmake and development files for Qt 5. Else give the -Dqtgui=false setup option. Packages: qtbase5-dev, qttools5-dev-tools, libqt5webkit5-dev. Replace libqt5webkit5-dev with libqt5webengine5 if you use -Dwebengine=true. Development files for Python3 (packages: python3-all-dev, python3-setuptools). You can use the -Dpython-module=false setup option for disabling the build of the Python extension. You may also need libiconv. On Linux systems, the iconv interface is part of libc and you should not need to do anything special. Building &RCL; has been built on Linux, FreeBSD, MacOS, and Solaris, most versions after 2005 should be ok, maybe some older ones too (Solaris 8 used to be ok). Current &RCL; versions (1.34 and later) need a c++17 compiler and Qt5, so they will not build on old systems, but if really needed, you can probably find an older version which will work for you. If you build on another system, and need to modify things, I would very much welcome patches. meson setup options Of course the usual meson setup options, like apply. will disable the code for phonetic matching of search terms. or will enable the code for real time indexing. Inotify support is enabled by default on Linux systems. &MAC; and &WIN; platforms now have real time indexing enabled by default and need no setup options. will enable sending Zeitgeist events about the visited search results, and needs the qzeitgeist package. will disable the Qt graphical interface, which allows building the indexer and the command line search program in absence of a Qt environment. will implement the result list with a Qt QTextBrowser instead of a WebKit widget if you do not or can't depend on the latter. will enable the use of Qt Webengine (only meaningful if the Qt GUI is enabled), in place or Qt Webkit. : do not implement the GUI preview windows with webkit or webengine instead of qtextbrowser. Using webxx will usually produce a better display, but will sometimes fail to display anything because of javascript issues. will build the recoll GUI program with debug symbols. This makes it very big (~50MB), which is why it is stripped by default. will suppress multithreading inside the indexing process. You can also use the run-time configuration to restrict recollindex to using a single thread, but the compile-time option may disable a few more unused locks. This only applies to the use of multithreading for the core index processing (data input). The &RCL; monitor mode always uses at least two threads of execution. will avoid building the Python extension. will avoid building the Python libchm interface used to index CHM files. will avoid building the Python libaspell interface. This is used to supplement queries with spelling guesses. will prevent building the indexer. Possibly useful if you just need the lib (e.g. for the Python extension). will prevent the use of the simdutf code normally used to speed up character code conversions. will enable splitting camelCase words. This is not enabled by default as it has the unfortunate side-effect of making some phrase searches quite confusing: ie, "MySQL manual" would be matched by "MySQL manual" and "my sql manual" but not "mysql manual" (only inside phrase searches). : disable the use of libmagic (use a file-like command instead). Specify the version of the 'file' command to use (e.g.: -Dfile-command=/usr/local/bin/file). Can be useful to enable the gnu version on systems where the native one is bad. Disable X11 connection monitoring inside recollindex. Together with -Dqtgui=false, this allows building recoll without Qt and X11. will avoid building the user manual. This avoids having to install the Docbook XML/XSL files and the TeX toolchain used for translating the manual to PDF. Enable building the recollq command line query tool (recoll -t without need for Qt). This is done by default if -Dqtgui=false is used but this option enables forcing it. Disable the automatic installation of systemd unit files. Normally unit files are installed if the install path can be detected. Provide an install path for the systemd system unit template file. Provide an install path for the systemd user unit file. Building For versions 1.38 and later (else check the manual inside the older source): For source extracted from a tar file: cd recoll-xxx meson setup [options] build ninja -C build For a git clone, the procedure is almost the same, but the top of the source is the src subdirectory. Showing an out of tree build (which you could of course also use for the above tar extracion). cd /some/where/ meson setup [options] /path/to/recoll/src recollbuild ninja -C recollbuild Installing Use sudo ninja install in your build tree. This will copy the commands to prefix/bin and the sample configuration files, scripts and other shared data to prefix/share/recoll. Python API package The Python interface can be found in the source tree, under the python/recoll directory. The normal &RCL; build procedure (see above) installs the API package for Python3. For meson-based versions: the python/recoll/ directory still contains a setup.py. This is obsoleted by meson.build but might be useful in some cases.
recoll-1.43.12/doc/user/custom.xsl0000644000175000017500000000067314753313623016246 0ustar dockesdockes recoll-1.43.12/doc/user/Makefile0000644000175000017500000000616215121730572015637 0ustar dockesdockes # Wherever docbook.xsl and chunk.xsl live. # NOTE: THIS IS HARDCODED inside custom.xsl (for changing the output # charset), which needs to change if the stylesheet location changes. # Necessity of custom.xsl: # http://www.sagehill.net/docbookxsl/OutputEncoding.html # Fbsd #XSLDIR="/usr/local/share/xsl/docbook/" # Mac #XSLDIR="/opt/local/share/xsl/docbook-xsl/" #Linux XSLDIR="/usr/share/xml/docbook/stylesheet/docbook-xsl/" # Note: this is where I find the confxml utility at home. The source is in src/utils, you can build # it with: # c++ -std=c++17 -I. confxml.cpp -o confxml -lrecoll UTILBUILDS=/home/dockes/tmp/builds/medocutils/ HTMLDUMPER = lynx -dump # Options common to the single-file and chunked versions commonoptions=--stringparam section.autolabel 1 \ --stringparam section.autolabel.max.depth 2 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 4 \ --stringparam toc.section.depth 3 \ --stringparam autotoc.label.in.hyperlink 0 \ --stringparam abstract.notitle.enabled 1 \ --stringparam html.stylesheet docbook-xsl.css \ --stringparam generate.toc "book toc,title,figure,table,example,equation" # index.html chunk format target replaced by nicer webhelp (needs separate make) in webhelp/ subdir all: usermanual.html webh usermanual.pdf webh: make -C webhelp usermanual.html: usermanual.xml recoll.conf.xml xsltproc --xinclude ${commonoptions} -o tmpfile.html custom.xsl $< -tidy -indent tmpfile.html > usermanual.html rm -f tmpfile.html -$(HTMLDUMPER) usermanual.html > ../../README index.html: usermanual.xml recoll.conf.xml xsltproc ${commonoptions} \ --stringparam use.id.as.filename 1 \ --stringparam root.filename index \ "${XSLDIR}/html/chunk.xsl" $< usermanual.pdf: usermanual.xml recoll.conf.xml dblatex --xslt-opts="--xinclude" -tpdf $< recoll.conf.xml: ../../sampleconf/recoll.conf test -x $(UTILBUILDS)/confxml && $(UTILBUILDS)/confxml --docbook --sectlevel=1 \ --idprefix=RCL.CONFIG.RECOLLCONF \ ../../sampleconf/recoll.conf > recoll.conf.xml || touch recoll.conf.xml # Generating a restructured text version, for uploading to readthedocs. # Does not really work, the internal links are botched. pandoc # generates something like: # `configuration <#RCL.INDEXING.CONFIG>`__ # when it should be: # :ref:`RCL.INDEXING.CONFIG` # Also with the second form, the link text is the section heading (can't be # chosen), which is not nice. Else, the change could probably be done by a # script. # Also could not get readthedocs to generate the left pane TOC? could # probably be fixed... #usermanual-rst: recoll.conf.xml # tail -n +2 recoll.conf.xml > rcl-conf-tail.xml # sed -e '/xi:include/r rcl-conf-tail.xml' \ # < usermanual.xml > full-man.xml # sed -i -e '/xi:include/d' -e '//d' full-man.xml # pandoc -s -f docbook -t rst full-man.xml > \ # ../../../docs/index.rst # rm -f rcl-conf-tail.xml full-man.xml # not needed with pandoc 2.x -@echo fix termmatch and execute clean: rm -f RCL.*.html usermanual.pdf usermanual.html index.html \ tmpfile.html rcl-conf-tail.xml full-man.xml recoll-1.43.12/doc/user/usermanual-russian.html0000644000175000017500000324435715121730572020740 0ustar dockesdockes Recoll user manual

Руководство пользователя Recoll

Jean-Francois Dockes

Разрешается копировать, распространять и / или изменять этот документ в соответствии с условиями лицензии GNU Free Documentation License, версии 1.3 или любой более поздней версии, опубликованной Фондом свободного программного обеспечения без каких-либо инвариантных разделов, без добавления текста в начале или в конце. Копию этой лицензии можно найти на веб-сайте GNU.

Настоящий документ содержит описание полнотекстового поиска, описывает установку и использование приложения Recoll. Данная версия содержит описание Recoll 1.37.


Оглавление

1. Введение
1.1. Пробное использование
1.2. Полнотекстовый поиск
1.3. Обзор Recoll
2. Индексирование
2.1. Введение
2.1.1. Режимы индексирования
2.1.2. Конфигурации, несколько индексов
2.1.3. Типы документов
2.1.4. Ошибки индексирования
2.1.5. Восстановление
2.2. Хранение индекса
2.2.1. Форматы индекса Xapian
2.2.2. Аспекты безопасности
2.2.3. Некоторые особенности работы с большими индексами
2.3. Конфигурация индекса
2.3.1. Графический интерфейс настройки конфигурации индекса
2.3.2. Несколько индексов
2.3.3. Чувствительность к регистру и диакритическим знакам
2.3.4. Конфигурирование потоков индексирования (Unix-подобные системы)
2.4. Расписание обновления индекса
2.4.1. Периодичность индексирования
2.4.2. Индексирование в режиме реального времени
2.5. Прочие заметки об индексировании
2.5.1. Обработчик входных файлов PDF
2.5.2. Запуск распознавания символов (OCR) на файлах изображений
2.5.3. Работа программ распознавания речи с аудиофайлами
2.5.4. Съёмные носители
2.5.5. Unix-подобные системы: индексирование истории веб-поиска
2.5.6. Unix-подобные системы и Mac OS-подобные системы: использование расширенных атрибутов
2.5.7. Unix-подобные системы: импорт внешних тегов
3. Поиск
3.1. Введение
3.2. Поиск с помощью графического интерфейса пользователя на основе библиотеки Qt
3.2.1. Простой поиск
3.2.2. Список результатов
3.2.3. Таблица результатов поиска
3.2.4. Панель фильтров
3.2.5. Выполнение произвольных команд для обработки файлов из результатов поиска
3.2.6. Unix-подобные системы: отображение миниатюр
3.2.7. Окно просмотра
3.2.8. Окно «Фрагменты запроса»
3.2.9. Автоматизированный сложный поиск (также называется «Сложным поиском»)
3.2.10. Инструмент обзора терминов
3.2.11. Несколько индексов
3.2.12. История документов
3.2.13. Сортировка результатов поиска и устранение дубликатов
3.2.14. Клавиши быстрого доступа
3.2.15. Советы по поиску
3.2.16. Сохранение и восстановление запросов
3.2.17. Настройка интерфейса поиска
3.3. Поиск с помощью KIO slave в KDE
3.4. Поиск в командной строке
3.5. Язык запросов
3.5.1. Базовый синтаксис
3.5.2. Особые спецификаторы, похожие на поля
3.5.3. Интервальные выражения
3.5.4. Модификаторы
3.6. Символы подстановки и позиционный поиск
3.6.1. Символы подстановки
3.6.2. Позиционный поиск
3.7. Использование синонимов (1.22)
3.8. Корректировка путей
3.9. Чувствительность к регистру и диакритическим знакам при поиске
3.10. Интеграция с рабочим столом
3.10.1. Сочетания клавиш для recoll
3.10.2. Апплет Recoll — KDE Kicker
4. Интерфейс программирования
4.1. Написание обработчика ввода документа
4.1.1. Простые обработчики ввода
4.1.2. «Модульные» обработчики
4.1.3. Установка обработчика в Recoll
4.1.4. Вывод обработчика ввода
4.1.5. Номера страниц
4.2. Обработка данных поля
4.3. API для Python
4.3.1. Введение
4.3.2. Элементы интерфейса
4.3.3. Сообщения журнала для сценариев Python
4.3.4. Интерфейс поиска Python
4.3.5. Интерфейс индексирования на Python
5. Установка и настройка конфигурации
5.1. Установка бинарной версии
5.2. Поддерживающие пакеты
5.3. Сборка из исходного кода
5.3.1. Необходимые условия
5.3.2. Сборка
5.3.3. Установка
5.3.4. Пакет API для Python
5.4. Обзор настройки конфигурации
5.4.1. Переменные окружения
5.4.2. Главный конфигурационный файл Recoll — recoll.conf
5.4.3. Файл fields
5.4.4. Файл mimemap
5.4.5. Файл mimeconf
5.4.6. Файл mimeview
5.4.7. Файл ptrans
5.4.8. Примеры настройки конфигурации

Список таблиц

3.1. Клавиши быстрого доступа

Глава 1. Введение

Данный документ содержит сведения о полнотекстовом поиске, а также описание установки и использования приложения Recoll. Описание включает необходимые обновления для версии Recoll 1.37.

Recoll долгое время использовался исключительно в Unix-подобных системах и совсем недавно (в 2015 г.) был переписан для MS-Windows. Многие ссылки в этом руководстве, особенно относящиеся к расположению файлов, имеют непосредственно отношение только к Unix и неприменимы к ОС Windows, где ряд описываемых функций также недоступен. Руководство постоянно обновляется. Однако до полного обновления документации в большинство ссылок на общие файлы для ОС Windows необходимо подставлять каталог установки Recoll (обычно C:/Program Files (x86)/Recoll). Особенно это касается ссылки на каталог /usr/share в данном документе, которому соответствует подкаталог Share установочного каталога. Конфигурация пользователя по умолчанию хранится в AppData/Local/Recoll в каталоге пользователя. Там же хранится и сам индекс.

1.1. Пробное использование

Не получая особенного удовольствия от чтения документации (как и большинство из нас), желающие попробовать Recoll для своих нужд не обнаружат ничего сложного в установке этого приложения. После запуска графического интерфейса recoll предложит разрешить индексирование домашнего каталога, тотчас же по завершении которого будет возможно выполнение поиска.

Однако не стоит это делать, если ваш домашний каталог содержит огромное количество документов, а вы не готовы ждать или объём дискового пространства на вашей системе невелик. В этом случае сначала может возникнуть необходимость настройки конфигурации для ограничения области индексации. Для этого в меню приложения recoll нужно перейти в: «Настройки»«Настройка индекса», затем настроить раздел «Каталоги верхнего уровня», который определяет каталоги с которых начинается поиск по файловой системе.

На Unix-подобных системах, также может быть полезно установить ряд вспомогательных приложений для соответствующих типов документов (например, antiword для файлов Microsoft Word). Пакет Windows полностью автономен и включает наиболее полезные вспомогательные программы.

1.2. Полнотекстовый поиск

Recoll является программой полнотекстового поиска, которая ищет данные по содержимому, а не по внешним атрибутам (таким как имя файла). Поиск выполняется по заданным словам (элементам поиска), которые должны или не должны содержаться в искомом тексте. По итогам поиска выводится список совпавших документов, отсортированный так, чтобы наиболее точно совпадающие документы отображались первыми.

Нет необходимости запоминать в каком именно файле или сообщении электронной почты хранится заданный элемент информации. Достаточно сделать соответствующий запрос и программа выдаст список документов, где заданные ключевые слова встречаются наиболее часто, как это делают поисковые системы в Интернете.

Приложения полнотекстового поиска пытаются определить, какие документы больше всего подходят к задаваемым элементам поиска. Компьютерные алгоритмы для определения такого соответствия могут быть очень сложными, но в целом уступают возможности человеческого мозга быстро определять соответствие. Качество определения соответствия является наиболее важным аспектом при оценке поискового приложения. Для определения соответствия Recoll использует библиотеку вероятностного информационного поиска Xapian.

Во многих случаях поиск целесообразно выполнять по всем формам слова, включая формы множественного числа, различные времена глагола или однокоренные слова, происходящие от одной основы (например: floor, floors, floored, flooring...). Запросы обычно автоматически расширяются для поиска по всем таким формам (однокоренным словам). Эту функцию можно отключить для поиска по конкретной форме.

Сам по себе морфологический поиск недостаточно хорошо приспособлен к наличию орфографических ошибок или фонетических вариантов. Поэтому, приложение полнотекстового поиска может содержать и эту форму приближения. Например, поиск по слову aliterattion при возврате нулевого результата может предложить слова alliteration, alteration, alterations, или altercation в качестве возможных вариантов замены. Recoll основывает свои предложения на текущем содержании индекса, в связи с чем могут быть предложены слова, отсутствующие в стандартном словаре.

1.3. Обзор Recoll

В качестве системы хранения и поиска информации Recoll использует библиотеку информационного поиска Xapian. Xapian является чрезвычайно развитым пакетом с использованием сложной вероятностной модели ранжирования.

Библиотека Xapian оперирует индексной базой данных, которая определяет местонахождение элементов поиска в файлах документов. Она эффективно обрабатывает сложные запросы, создаваемые сложным механизмом расширения запросов Recoll, и отвечает за сложнейшую задачу вычисления соответствия.

Recoll предоставляет лишь интерфейс и механизмы для обмена данными с индексом. Это включает извлечение текста из многих существующих форматов документов, работа с вариантами элементов поиска (с помощью систем морфологического поиска Xapian), а также возможных орфографических вариантов (с помощью программы проверки орфографии aspell), интерпретацию запросов пользователя и вывод результатов.

Если говорить кратко, Recoll делает всю грязную работу, а Xapian занимается интеллектуальной составляющей процесса.

Индекс Xapian может достигать больших размеров (примерно в объёме самих этих документов), но не является их архивом. Recoll может лишь отображать документы целиком, если они находятся там же, где были индексированы. Однако, последняя версия Recoll уже сохраняет данные из всех индексированных документов в виде обычного текста.

Recoll сохраняет все внутренние данные в формате UTF-8 и может индексировать множество различных типов файлов с разными наборами символов, кодировками и языками в один и тот же индекс. Он может обрабатывать документы, вложенные в другие документы (например, документ PDF, хранящийся в zip-архиве, отправленный в виде вложения в сообщении электронной почты…) с произвольной вложенностью.

По умолчанию Recoll обрабатывает тексты на восточно-азиатских языках путём формирования элементов поиска в виде произвольных последовательностей следующих друг за другом символов (n-грам). Однако способен интегрировать средства сегментации языка для китайского и корейского, что приводит к уменьшению размеров индекса и улучшению результатов поиска.

Стемминг — это процесс, посредством которого Recoll выделяет основу слова, чтобы поиск не зависел, например, от конкретного числа существительного (floor, floors) или времени глагола (flooring, floored). Поскольку механизмы стемминга зависят от конкретных грамматических правил каждого языка, в составе Xapian имеется специальный модуль стеммера для большинства языков, поддерживающих выделение основы.

Recoll хранит необработанную стеммером версию элементов поиска в главном индексе и использует вспомогательные базы данных для расширения элементов поиска (одну для каждого языка с выделением основы), благодаря чему можно переключать языки для стемминга между поисками или добавлять язык без необходимости полной переиндексации.

Документы на разных языках могут сохраняться в один индекс, что часто и происходит. В такой ситуации для индекса может быть указано несколько языков с выделяемой основой.

На данный момент Recoll не предпринимает попыток разработки автоматического распознавания языка, благодаря чему стеммер будет иногда применяться к элементам поиска из других языков с трудно предсказуемыми результатами. На практике такой подход при всех возможных недоразумениях оказался весьма полезным и значительно менее громоздким, чем сегрегация документов по языкам.

По умолчанию Recoll удаляет большую часть диакритических знаков из элементов поиска, и переводит текст в нижний регистр как перед сохранением в индексе, так и перед использованием в поиске. В итоге сводятся на нет какие-либо отличия в поиске с применением прописных букв (US / us), либо диакритических знаков (sake / saké, mate / maté).

В то же время Recoll может хранить элементы поиска в исходном варианте без удаления диакритических знаков или преобразования регистра. В такой конфигурации поиск по умолчанию будет происходить как и прежде, но сохраняется возможность выполнения регистрозависимого поиска с учётом диакритических знаков. Более подробно это описывается в разделе о чувствительности к регистру и диакритическим знакам.

Recoll использует множество параметров для точного определения предмета индексирования, а также способа классификации и декодирования исходных документов. Эти параметры хранятся в конфигурационных файлах. В процессе установки конфигурация по умолчанию копируется в стандартное местоположение (обычно что-то вроде /usr/share/recoll/examples). Значения по умолчанию, заданные в файлах конфигурации в этом каталоге, могут переопределяться значениями, заданными в личной конфигурации пользователя. Конфигурация Recoll по умолчанию предписывает индексировать домашний каталог пользователя с использованием общесистемных параметров. Наиболее часто используемые параметры можно настроить с помощью меню настройки параметров в графическом интерфейсе recoll. Менее распространённые параметры могут быть заданы только с помощью текстовых файлов.

Процедура индексации начинается автоматически (после получения разрешения) при первом запуске графического интерфейса программы recoll. Индексирование также может выполняться при запуске команды recollindex. По умолчанию при наличии соответствующих аппаратных ресурсов индексирование в Recoll осуществляется в многопоточном режиме и может выполнять несколько задач параллельно для извлечения текста, сегментации и обновления индекса.

Поиск обычно происходит внутри графического интерфейса recoll, который обладает большим количеством параметров, помогающих найти искомое. При этом существуют и другие способы выполнения запросов к индексу:

Глава 2. Индексирование

2.1. Введение

Индексирование — это процесс, при котором анализируется набор документов и данные записываются в базу данных. Recoll обычно использует инкрементальное индексирование, при котором документы анализируются только если они изменялись после последнего индексирования. При первом запуске анализу подвергаются все документы. Принудительное выполнение полного индексирования может быть осуществлено позднее при указании соответствующего параметра команды (recollindex -z или -Z).

При этом recollindex пропускает файлы, которые на прошлом проходе вызвали ошибку. Эта оптимизация производительности может быть отключена с помощью параметра командной строки -k, с которым программа будет повторно анализировать проблемные файлы. Например, после обновления обработчика ввода.

Если файл был удалён, recollindex удаляет и соответствующие данные из индекса. Точный момент времени удаления зависит от режима индексирования. Предусмотрены меры для предотвращения удаления данных при использовании съёмных носителей.

В последующих разделах даётся обзор различных аспектов процесса индексирования и конфигурации со ссылками на описывающие их разделы.

В зависимости от типа данных при индексировании могут потребоваться временные файлы, которые в некоторых случаях могут достигать довольно больших размеров. Можно использовать переменные окружения RECOLL_TMPDIR или TMPDIR для определения места их создания (по умолчанию они создаются в /tmp). Использование переменной TMPDIR полезно ещё и тем, что она также может учитываться вспомогательными командами, запускаемыми recollindex.

2.1.1. Режимы индексирования

Индексация Recoll может выполняться в двух основных режимах:

  • Периодическое (или пакетное) индексированиеrecollindex запускается через определённые промежутки времени. На Unix-подобных системах обычно используется для запуска в ночное время, которое прописывается в файле cron. В ОС Windows для запуска процедуры индексирования можно использовать Планировщик задач. В обох случаях, графический интерфейс Recoll включает простой интерфейс конфигурирования системного планировщика.

  • Индексирование в режиме реального времениrecollindex постоянно работает в качестве фоновой службы и использует механизм отслеживания изменений в файловой системе (например, inotify на Unix-подобных системах) для обнаружения изменений в файлах. Новые или обновлённые файлы мгновенно индексируются. Отслеживание дерева большой файловой системы может потреблять значительные ресурсы системы.

Выбор режима индексирования

Выбор между двумя методами делается на основе личных предпочтений, а также может комбинироваться при организации нескольких индексов (например: можно использовать периодическое индексирование на большом каталоге с документацией, и индексирование в режиме реального времени на небольшом домашнем каталоге), либо настроить индекс таким образом, чтобы отслеживать только некое подмножество дерева.

Выбор метода и используемых параметров можно настроить в графическом интерфейсе recoll: «Настройки» → диалог «Расписание индексирования».

2.1.2. Конфигурации, несколько индексов

Recoll поддерживает работу с несколькими индексами, каждый из которых определяется по своему конфигурационному каталогу. Конфигурационный каталог содержит несколько файлов с описанием объектов и способов индексирования.

При первом запуске recoll или recollindex создаётся конфигурационный каталог по умолчанию. Эта конфигурация используется для индексирования и выполнения запросов до тех пор, пока не задана никакая конкретная конфигурация. Она располагается в $HOME/.recoll/ на Unix-подобных системах и в %LOCALAPPDATA%/Recoll на ОС Windows (обычно C:/Users/[пользователь]/Appdata/Local/Recoll).

У всех параметров конфигурации есть значения по умолчанию, определённые в общесистемных файлах. Без дальнейшей настройки конфигурации по умолчанию все файлы домашнего каталога будут обрабатываться с применением наиболее целесообразного стандартного набора параметров. Настройка конфигурации позволяет задавать обработку произвольной области файловой системы, устанавливать способы выбора файлов, а также многое другое.

В некоторых случаях может быть полезно создавать дополнительные конфигурационные каталоги, например, для отделения общих индексов от личных, либо с целью использования преимуществ организации данных для улучшения точности поиска.

Для создания конфигурационного каталога необходимо создать пустой каталог в выбранном месте, затем задать назначение каталога в recoll или recollindex через настройки с помощью параметров командной строки (-c /some/directory), либо в переменной окружения (RECOLL_CONFDIR=/some/directory). После этого любое изменение, выполняемое командами (например, настройка конфигурации, поиск с помощью recoll или создание индекса recollindex), будет применяться к новому каталогу, а не к каталогу по умолчанию.

После создания нескольких индексов, каждый из них можно использовать независимо, для чего желаемый индекс указывается с параметром -c или в переменной окружения RECOLL_CONFDIR при запуске программы.

Также можно настроить одну конфигурацию в дополнение к своему индексу и отправлять запросы на один или несколько других индексов с помощью функции Внешний индекс в графическом интерфейсе recoll или путём использования аналогичных средств командной строки и программных инструментов.

Одним из вариантов при выборе системным администратором тактики использовании функции множественного индекса может быть установка центрального индекса на общие данные (с возможностью исключения их из поиска) в дополнение к своим личным данным. Конечно, существуют и другие варианты. Например, нередко так случается, что поиск нужно выполнить в известном наборе файлов, в каковом случае сужение области поиска может привести к улучшению его результатов. Схожего эффекта можно достичь и при указании в поисковом запросе фильтра каталогов, но множественное индексирование позволяет работать с большей производительностью и в некоторых ситуациях стоит усилий, затраченных на её настройку.

В более сложном формате использования индексов выполняется улучшение производительности индексирования путём параллельного обновления нескольких индексов (при использовании нескольких ядер ЦП и дисков, а также при использовании нескольких компьютеров) с последующим слиянием индексов, либо с выдачей параллельных запросов.

См. более подробную информацию в разделе о настройке конфигурации нескольких индексов

2.1.3. Типы документов

Recoll умеет работать с несколькими различными типами документов. Параметры определения типов документов и их обработки определяются в файлах конфигурации.

Большинство типов файлов, такие как HTML или файлы текстовых редакторов, могут содержать только один документ. Однако некоторые типы файлов, такие как папки электронной почти или zip-архивы, содержат по нескольку документов с собственной индексацией, которые и сами могут быть составными. Такие иерархии могут иметь глубокое вложение. Например, Recoll может обрабатывать документ LibreOffice, прикреплённый к сообщению электронной почты в файле zip-архива папки электронной почты…

recollindex способен обрабатывать своими силами простой текст, HTML, OpenDocument (Open/LibreOffice), форматы электронной почты, а также некоторые другие типы документов.

Остальные типы файлов (например: postscript, pdf, ms-word, rtf …) требуют наличия внешних приложений для предварительной обработки. Список таких приложений приведён в разделе установка. После каждой операции индексирования Recoll обновляет список команд, необходимых для индексирования существующих типов файлов. Этот список можно увидеть в меню «Файл»«Показать недостающие обработчики» графического интерфейса recoll. Он хранится в текстовом файле missing внутри конфигурационного каталога.

После установки отсутствующего обработчика будет логично запустить recollindex для повторной обработки файлов с ошибками, добавив параметр -k в интерфейсе командной строки или в графическом интерфейсе с помощью меню «Файл»«Специальное индексирование». Сделать это необходимо, потому что recollindex в режиме работы по умолчанию не будет повторно обрабатывать файлы, предыдущая обработка которых была выполнена с ошибкой. В некоторых случаях целесообразно очистить данные для категории файлов перед индексированием. См. страницу руководства recollindex. Если индекс не слишком велик, то проще будет построить его заново.

По умолчанию Recoll будет пытаться индексировать любой тип файла, который так или иначе можно прочитать. Делать это не всегда желательно, поэтому с одной стороны существуют способы для исключения некоторых типов файлов, с другой стороны можно задать список типов файлов, предназначенных для индексирования. В последнем случае любой тип файла, отсутствующий в списке, будет игнорироваться.

Исключение файлов по имени выполняется путём добавления шаблонов имён с подстановочными знаками в список skippedNames, что можно сделать из графического интерфейса в меню «Настройка индекса». Исключение по типу может быть задано путём ввода списка excludedmimetypes в конфигурационный файл. Список можно переопределить для подкаталогов.

Также можно определить исчерпывающий перечень индексируемых MIME-типов (остальные типы не будут индексироваться), путём задания конфигурационной переменной indexedmimetypes. Пример:

indexedmimetypes = text/html application/pdf

Данный параметр можно переопределить для подкаталогов Пример:

[/path/to/my/dir]
          indexedmimetypes = application/pdf

(При изменении подобных параметров, не забудьте, что они действуют до конца файла или другого маркера раздела).

Параметр excludedmimetypes или indexedmimetypes может быть задан либо путём внесения изменений в конфигурационный файл (recoll.conf) индекса, либо с помощью графического интерфейса средства настройки конфигурации индекса.

Примечание о MIME-типах

При редактировании списка indexedmimetypes или excludedmimetypes, необходимо предпочитать значения MIME, перечисленные в файле mimemap или в списках результатов Recoll, выводу команды file -i: между ними имеется ряд различий. Вывод file -i можно использовать только для файлов без расширений или для тех файлов, расширения которых отсутствуют в списке mimemap

2.1.4. Ошибки индексирования

Индексирование некоторых документов может вызывать ошибки по нескольким причинам: может отсутствовать вспомогательная программа, документ может быть повреждён, разархивирование файла может оказаться невозможным в связи с нехваткой дискового пространства, и т.д.

По умолчанию, индексатор Recoll версии 1.21 и более поздних не проводит повторную индексацию файлов с ошибками, потому что некоторые ошибки индексирования могут оказаться очень дорогостоящими (например, ошибка разархивирования большого файла по причине нехватки дискового пространства). Повторная индексация проводится только в случае непосредственного указания параметра (-k) при запуске команды recollindex в командной строке или когда такое указание даётся в сценарии, запускающемся при старте recollindex. Сценарий определяется в переменной конфигурации (checkneedretryindexscript) и делает неубедительную попытку выяснить факт установки вспомогательной программы путём проверки внесения изменений в общие каталоги bin.

2.1.5. Восстановление

В тех редких случаях, когда происходит повреждение индекса (о котором можно судить по странным результатам поиска или сбоям), необходимо удалить файлы индекса до запуска прохода переиндексирования. Для этого достаточно просто удалить каталог xapiandb (см. следующий раздел). Также можно запустить recollindex с параметром -z, который выполняет сброс базы данных перед индексацией. Различие между двумя методами заключается в том, что во втором случае текущий формат индекса не изменяется, что может быть нежелательно, если текущая версия Xapian уже поддерживает новый формат.

2.2. Хранение индекса

Данные индекса по умолчанию хранятся в подкаталоге xapiandb конфигурационного каталога Recoll, обычно это $HOME/.recoll/xapiandb/ на Unix-подобных системах или C:/Users/[me]/Appdata/Local/Recoll/xapiandb на Windows. Местоположение можно изменить двумя различными способами (для различных целей):

  1. Для данного конфигурационного каталога можно указать нестандартное место расположения индекса с помощью параметра dbdir в конфигурационном файле (см. раздел описания конфигурации). Этот способ подходит, главным образом, в том случае, когда расположение конфигурационного каталога хотелось бы оставить по умолчанию, но индекс требуется расположить в другом месте. Обычно это делают в связи с нехваткой дискового пространства или низкой производительностью.

  2. Другой конфигурационный каталог можно указать в переменной окружения RECOLL_CONFDIR или в параметре -c команды Recoll. Этот метод обычно используется для индексирования различных областей файловой системы в различных индексах. Например, при запуске указанной ниже команды:

    recoll -c ~/.indexes-email

    Recoll будет использовать конфигурационный файл, находящийся в ~/.indexes-email/ и (если не не указано иное в recoll.conf) будет искать индекс в ~/.indexes-email/xapiandb/.

    Использование нескольких конфигурационных каталогов и конфигурационных параметров позволяет настраивать несколько конфигураций и индексов для обработки любого подмножества доступных данных, использующихся для выполнения поиска.

Имеется ещё довольно большое количество параметров, которые можно задать в самом конфигурационном файле для настройки хранения данных Recoll. Они описаны в разделе главы по конфигурации.

Размер индекса определяется по размеру совокупности документов, но эта зависимость может сильно варьироваться. Для типичного смешанного набора документов, размер индекса часто будет близок к размеру набора данных. В особых случаях (например, набор сжатых mbox-файлов), индекс может значительно превышать документы по размеру. Также он может быть значительно меньше, если документы содержат большое количество изображений или других неиндексируемых данных (в качестве наиболее радикального примера можно представить набор mp3-файлов, где индексируются только теги).

Конечно же, изображения, звук и видео не увеличивают размер индекса, а это означает, что в подавляющем большинстве случаев используемое индексом пространство будет ничтожно мало по сравнению с общим количеством данных на компьютере.

Каталог данных индекса (xapiandb) содержит только такие данные, которые могут быть полностью воссозданы повторным индексированием (пока существуют исходные документы), и удаление их безопасно.

2.2.1. Форматы индекса Xapian

Версии Xapian обычно поддерживают несколько форматов для хранения индекса. Текущая старшая версия Xapian будет использовать текущий формат для создания новых индексов, а также будет поддерживать формат предыдущей старшей версии.

Xapian не будет автоматически преобразовывать существующий индекс из старого формата в новый. Для обновления текущего формата в новый формат, а также когда формат индекса настолько устарел, что более не поддерживается, необходимо полностью удалить старый индекс (обычно ~/.recoll/xapiandb), а затем запустить обычную команду индексирования. Команда recollindex с параметром -z в данном случае не сможет исправить ситуацию.

2.2.2. Аспекты безопасности

Индекс Recoll не сохраняет полных копий индексируемых документов (фактически начал сохранять с версии 1.24). Но содержит достаточное количество данных для почти полного их воспроизведения. Поэтому, при иднексировании секретных данных доступ к каталогу базы данных должен быть запрещён.

Recoll создаёт конфигурационный каталог с правами доступа 0700 (доступ только для владельца). Поскольку каталог данных индекса по умолчанию является подкаталогом конфигурационного каталога, что позволяет обеспечить ему надёжную защиту.

Если ваша установочная конфигурация имеет отличия от этой схемы, то возникает необходимость продумать способ защиты индекса, установить соответствующие права доступа для каталога и файлов, а также, по возможности, подправить параметры команды umask, применяемой при обновлении индекса.

2.2.3. Некоторые особенности работы с большими индексами

Интерес к данным рассуждениям может возникнуть только при превышении индексом размера 5 Гбайт. Размер более 10 Гбайт превращает вопрос в серьёзную проблему. Размер индекса у большинства пользователей будет несравнимо меньше. Для справки, размер 5 Гбайт идентичен содержимому примерно 2000 Библий, что составляет значительный объём текстовой информации. При наличии у вас значительного объёма текстовых данных (запомните: изображения не считаются, текстовая составляющая PDF-файлов обычно меньше 5% от размера файла) ознакомление с содержимым этого раздела крайне необходимо.

Количество операций записи, совершаемое Xapian при построении индекса, имеет нелинейную зависимость от размера индекса (близко к среднему значению между линейной и квадратичной). Для больших индексов это может привести к проблемам с производительностью и даже стать причиной износа SSD-дисков.

Остроту проблемы можно снизить путём соблюдения следующих базовых принципов:

  • Большой набор данных разбивается на несколько наборов сравнительно небольшого размера. Запросы к этим индексам в дальнейшем можно запараллелить (с помощью функции использования внешних индексов Recoll) или объединить с помощью xapian-compact.

  • Необходимо обеспечить наличие большого объёма ОЗУ и задать максимально возможное значение параметра idxflushmb конфигурации Recoll без подкачки на диск (необходимо поэкспериментировать). Значение 200 составляет минимально необходимую величину параметра в этом контексте.

  • Следует использовать Xapian 1.4.10 или более свежую версию продукта, поскольку она содержит значительное улучшение по количеству операций записи.

2.3. Конфигурация индекса

Параметры конфигурационных файлов Recoll определяют индексируемые области файловой системы и способы обработки файлов. Значения могут задаваться путём изменения текстовых файлов. Большинство наиболее часто используемых параметров также можно задать в диалогах графического интерфейса recoll.

При первом запуске recoll выводится предложение немедленно создать индекс. Если перед созданием индекса необходимо настроить конфигурацию, то на данном этапе можно нажать кнопку Отмена, после чего откроется интерфейс настройки конфигурации. При выходе из настройки на этом этапе recoll создаст конфигурационный каталог по умолчанию с пустыми конфигурационными файлами, после чего в эти файлы уже можно вносить изменения.

В текущем документе подробная информация по настройке конфигурации содержится в главе с описанием установки или на странице руководства recoll.conf(5). Оба документа автоматически создаются из комментариев, содержащихся в конфигурационном файле.

Наиболее полезной переменной на момент установки будет, вероятно, topdirs, в которой перечисляются индексируемые поддеревья и файлы.

Приложения, необходимые для индексирования различных типов файлов помимо простого текста, HTML и файлов электронной почты (например: pdf, postscript, ms-word…), описаны в разделе по внешним пакетам.

В Recoll могут использоваться два несовместимых типа индекса, имеющих отличия по обработке регистра символов и диакритических знаков. Далее в соответствующем разделе эти два типа описываются более подробно. В большинстве случаев подходит тип по умолчанию.

2.3.1.  Графический интерфейс настройки конфигурации индекса

Большая часть параметров конфигурации может быть установлена в графическом интерфейсе recoll (задайте переменную RECOLL_CONFDIR или примените параметр -c для использования нестандартного индекса).

В графическом интерфейсе диалог настройки конфигурации открывается с помощью меню «Настройки»«Настройка индекса». Он разделён на четыре вкладки, «Общие параметры», «Локальные параметры», «История в веб» (подробно) и «Параметры поиска».

Вкладка «Общие параметры» позволяет настраивать общие переменные, такие как списки начальных каталогов/каталогов верхнего уровня, пропущенных путей и языков со словоформами.

Вкладка «Локальные параметры» позволяет настраивать переменные, которые можно переопределить для подкаталогов. Эта вторая вкладка содержит изначально пустой список настраиваемых каталогов, которые можно туда добавить. Затем задаются переменные каталога, выбранного в данный момент (или находящегося на верхнем уровне при выборе пустой строки).

Вкладка «Параметры поиска» определяет общие для индекса параметры поискового запроса, которые оказывают влияние на все инструменты поиска, не ограничиваясь графическим интерфейсом.

Значение большинства элементов интерфейса совершенно очевидно и описано в содержимом всплывающей подсказки к текстовой надписи. Для получения более подробной информации необходимо обратиться к разделу конфигурации в данном руководстве.

Средство настройки конфигурации обычно учитывает комментарии и большую часть форматирования конфигурационных файлов. Поэтому оно вполне может быть использовано для внесения изменений в файлы, редактируемые вручную. Однако прежде всего рекомендуется создавать резервные копии этих файлов…

2.3.2. Несколько индексов

Несколько индексов Recoll могут быть созданы путём создания нескольких конфигурационных каталогов, которые обычно предназначаются для индексации различных областей файловой системы.

При этом конкретная конфигурация выбирается посредством установки переменной окружения RECOLL_CONFDIR или запуском recoll и recollindex с параметром -c.

Программа recollindex, использующаяся для создания или обновления индекса, всегда работает с одним индексом. Различные конфигурации полностью независимы (параметры никогда не используются совместно при индексировании на разных конфигурациях).

Все интерфейсы поиска (recoll, recollq, Python API, и т.д.) используют параметры и данные индекса основной конфигурации. При этом могут запрашиваться данные из нескольких дополнительных индексов. Но дополнительные индексы используются только в качестве источников данных. Конфигурационные параметры дополнительных индексов игнорируются. Это означает, что ряд параметров в совместно используемых конфигурациях индексов должен совпадать.

При осуществлении поиска, текущий основной индекс (указанный в RECOLL_CONFDIR или -c) всегда активен. Если это нежелательно, можно в основной конфигурации индексировать пустой каталог.

Параметры конфигурации индекса можно устанавливать либо с помощью текстового редактора в файлах или, для большинства параметров, с помощью графического интерфейса конфигурации индекса recoll . В последнем случае применяются параметры конфигурационного каталога, который был указан в RECOLL_CONFDIR или в параметре -c, и в процессе работы с графическим интерфейсом сменить конфигурационный каталог на другой уже не представляется возможным.

См. раздел настройки конфигурации для подробного описания параметров

Некоторые параметры конфигурации должны совпадать у ряда индексов, используемых для совместного поиска. Наиболее очевидно, что у всех одновременно запрашиваемых индексов должны совпадать параметры по регистрозависимости и использованию диакритических знаков, но существуют и другие ограничения. Большая часть соответствующих параметров влияет на формирование элементов поиска.

Использование нескольких индексов подразумевает выполнение некоторого объёма операций в командной строке или диспетчере файлов. Например, дополнительные конфигурационные каталоги создаются пользователем самостоятельно. В графическом интерфейсе выполнение таких операций не предусмотрено. Это сделано во избежание непреднамеренного создания дополнительных каталогов при ошибочном указании соответствующего параметра в командной строке. А также графический интерфейс или индексатор для работы с определённой конфигурацией необходимо загружать с указанием соответствующего параметра или переменной окружения.

Создание и использование дополнительного индекса: Пример на Linux

Нижеследующее описание относится к Unix-подобным системам

Сначала создаётся конфигурация и индекс:

mkdir /путь/к/моей/новой/конфигурации

Конфигурирование нового индекса может осуществляться в графическом интерфейсе recoll, запущенном из командной строки с целью передачи параметра -c (можно запускать с помощью специально созданного файла на рабочем столе) с последующим использованием графического инструмента конфигурации индекса для настройки индекса.

recoll -c /путь/к/моей/новой/конфигурации

В то же время можно просто открыть главный конфигурационный файл в текстовом редакторе:

мой_редактор /путь/к/моей/новой/конфигурации/recoll.conf

Создание и обновление индекса может выполняться из командной строки:

recollindex -c /путь/к/моей/новой/конфигурации

А также из меню «Файл» графического интерфейса, запущенного с тем же самым параметром (recoll, см. выше).

Графический интерфейс также позволяет настроить пакетное индексирование для нового индекса. Индексирование в режиме реального времени настраивается в графическом интерфейсе индекса по умолчанию (при запуске графического интерфейса с указанием другого индекса в параметре -c элемент меню будет неактивен).

Новый индекс можно использовать отдельно при указании соответствующего параметра:

recoll -c /путь/к/моей/новой/конфигурации

А также параллельно с индексом по умолчанию при запуске recoll без параметра -c, но с выполнением настройки на вкладке Внешние индексы в диалоге «Настройки», который можно открыть либо через меню «Параметры»«Настройки интерфейса»«Настройка внешнего индекса», либо «Запрос»«Настройка внешнего индекса». Более подробная информация доступна в разделе внешние индексы в графическом интерфейсе.

Создание дополнительного индекса: Пример на Windows

При работе в Recoll на Windows самым простым способом использования внешних индексов будет применение нескольких значков рабочего стола для запуска графического интерфейса программы. Для организации такой работы требуется следующий порядок действий:

  1. Создайте в любом удобном для вас месте папку для размещения новой конфигурации индекса.

  2. Выделите значок Recoll на рабочем столе, скопируйте и вставьте его. Если при установке программы значок рабочего стола не был создан, можно перетащить на рабочий стол программу recoll.exe из C:\Program Files (X86)\Recoll правой клавишей мыши и затем выбрать «Создать ярлык» для создания значка.

  3. Щёлкните правой клавишей мыши по новому значку и перейдите на вкладку «Свойства ярлыка»

  4. Измените значение поля Объект с исходного C:\Program Files (x86)\Recoll\recoll.exe на примерно следующую запись:

    "C:\Program Files (x86)\Recoll\recoll.exe" -c C:\путь\к\моему\новому\каталогу

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

  5. Сохраните новый значок нажатием кнопки «OK» и дважды щёлкните по нему для запуска графического интерфейса Recoll в новой конфигурации. В результате должно открыться окно установки начальной конфигурации.

Любой другой метод запуска графического интерфейса или программы recollindex с параметром -c или соответствующим значением переменной окружения RECOLL_CONFDIR также будет прекрасно работать.

2.3.3. Чувствительность к регистру и диакритическим знакам

Начиная с версии 1.18 в Recoll возможно построение индекса с учётом чувствительности к регистру и диакритическим знакам, либо без таковой. Исходный поисковый запрос Résumé, в первом случае фактически будет выглядеть как Résumé, а во втором — как resume.

При этом поиск без чувствительности к регистру и диакритическим знакам может выполняться при любом типе индекса: в случае регистрозависимого индекса пользовательский запрос будет расширен до совпадения со всеми существующими в индексе вариантами регистра и диакритических знаков. При урезанном индексе перед выполнением поиска поисковый запрос приводится к стандартной форме.

Неурезанный тип индекса различает регистр и диакритические знаки, позволяя, например, возвращать различные результаты при поисковом запросе US и us, а также resume и résumé. Для получения более подробной информации ознакомьтесь с разделом о поиске с учётом регистра и диакритических знаков.

Тип создаваемого индекса регулируется параметром конфигурации indexStripChars, который изменяется только путём внесения изменения в конфигурационный файл. Любое такое изменение предполагает переиндексацию (автоматическая переиндексация программой Recoll не предусмотрена), а также все параллельно используемые в поиске индексы должны принадлежать к одному типу (проверка средствами Recoll не производится).

По умолчанию, если не задан параметр indexStripChars, Recoll создаёт урезанную версию индекса.

В качестве расплаты за дополнительные возможности неурезанный индекс будет занимать чуть больше места, чем урезанный (примерно на 10%). Поисковые запросы будут сложнее и выполнение их будет занимать чуть больше времени. Также необходимо учитывать, что данный функционал используется сравнительно редко, в связи с чем логично предположить возможность появления разного рода странностей в поведении программы.

Одним из наиболее серьёзных последствий при применении неурезанного индекса может быть невозможность использования некоторых фраз и поиска с учётом расположения слов: в связи с необходимостью расширения каждого элемента поиска при создании всех комбинаций поиска на каком-то этапе мультипликативное расширение может выйти из под контроля.

2.3.4. Конфигурирование потоков индексирования (Unix-подобные системы)

Примечание: вполне возможно, что чтение этого раздела конкретно для вас не представляет особой необходимости. Автоматическая конфигурация по умолчанию в подавляющем большинстве случаев прекрасно справляется. Более-менее общеполезной может быть только та часть, в которой говорится об отключении многопоточного режима. Поэтому, спешим предоставить эту информацию сразу. Отключение многопоточности обеспечивает следующее значение параметра в recoll.conf:

            thrQSizes = -1 -1 -1
          

Многопоточный режим подготовки документа

Служба индексирования Recoll называется recollindex и она может использовать многопоточность для увеличения скорости индексирования на многопроцессорных системах. На данный момент она работает на Mac OS и Unix-подобных системах, но не на Windows.

Работа, выполняемая с файлами индекса, делится на несколько этапов, некоторые из которых могут исполняться в нескольких потоках. Имеются в виду следующие этапы работы:

  1. Переход по файловой системе: данная операция всегда выполняется в основном потоке.

  2. Преобразование файлов и извлечение данных.

  3. Обработка текста (разбивка, стемминг и т.д.).

  4. Обновление индекса Xapian.

Более подробно ознакомиться с настройкой индексирования Recoll применительно к многопоточности можно и в более содержательном документе на эту тему.

Конфигурация потоков контролируется двумя параметрами конфигурационного файла.

thrQSizes

Данная переменная определяет конфигурацию очереди входящих заданий. Всего может быть три очереди для этапов 2, 3 и 4, и этот параметр определяет глубину очереди для каждого этапа (три целочисленных значения). Если для какого-то конкретного этапа установлено значение -1, то для данного этапа очередь не используется и переходит к выполнению следующего этапа. Практика показала, что повышение глубины очереди не приводит к увеличению производительности. Значение 0 для первой очереди сообщает Recoll о необходимости выполнения автоконфигурации (в данном случае больше ничего не требуется, параметр thrTCounts не используется) — это конфигурация по умолчанию.

thrTCounts

Данный параметр определяет число потоков, использующихся на каждом этапе. Если в качестве глубины очереди какого-либо этапа в предыдущем параметре указано значение -1, указанное здесь число потоков для данного этапа игнорируется. Для последнего этапа нет смысла использовать значение отличное от 1, поскольку обновление индекса Xapian обязательно выполняется в однопоточном режиме (и защищено мьютексом).

Примечание

Если первое значение в thrQSizes равно 0, thrTCounts игнорируется.

В следующем примере используется три очереди (глубиной 2), а также 4 потока для преобразования исходных документов, 2 потока для обработки извлечённых из них текстов и один для обновления индекса. По результатам тестов эта конфигурация лучше всего обеспечивала работу тестируемой системы (четырёхпроцессорная с несколькими дисками).

            thrQSizes = 2 2 2
            thrTCounts =  4 2 1
          

Нижеследующий пример работает с использованием одной очереди и полная обработка каждого документа выполняется одним потоком (в большинстве случаев несколько документов так или иначе будут обрабатываться параллельно). Потоки будут использовать взаимное исключение при входе в режим обновления индекса. На практике производительность в целом будет близка к прецедентам, но в некоторых случаях результат будет заметно хуже (например, архив Zip будет обрабатываться исключительно последовательно), поэтому вышеприведённый подход представляется более предпочтительным. Впрочем, попробуйте сами, результаты вашей работы могут оказаться иными… Последние два значения thrTCounts просто игнорируются.

            thrQSizes = 2 -1 -1
            thrTCounts =  6 1 1
          

И уже знакомый нам заключительный пример отключает многопоточный режим работы. Индексирование будет выполняться в один поток.

thrQSizes = -1 -1 -1

2.4. Расписание обновления индекса

2.4.1. Периодичность индексирования

Запуск индексатора

Программа recollindex выполняет обновление индекса. Запустить его можно либо из командной строки, либо из меню «Файл» в графическом интерфейсе recoll. При запуске из графического интерфейса, индексирование будет работать с той конфигурацией recoll, с которой приложение было запущено. При запуске из командной строки нестандартный конфигурационный каталог для recollindex можно указать в переменной окружения RECOLL_CONFDIR или в параметре -c confdir.

Если программа recoll при запуске не сможет найти индекс, то автоматически запустит процесс индексирования (если не будет выполнена отмена).

В графическом интерфейсе меню «Файл» находятся элементы для запуска или остановки текущей операции индексирования. Если в данный момент индексирование не выполняется, то выбор ограничен элементами «Обновить индекс» и «Пересоздать индекс». В первом случае будут обработаны только изменённые файлы, во втором случае индекс удаляется для обработки всех файлов.

Управлять операциями индексирования с помощью графического интерфейса можно, как на Linux, так и на Windows. Остановка индексатора при этом выполняется с помощью элемента меню графического интерфейса recoll «Файл»«Остановить индексирование».

Кроме того, на Linux процесс индексирования recollindex можно прервать отправкой прерывания (Ctrl-C, SIGINT) или сигнала завершения процесса (SIGTERM).

При остановке индексирования может пройти некоторое время до фактического завершения работы recollindex, так как для корректного сброса и закрытия индекса требуется некоторое время.

После прерывания индексирования, строй индекса может оказаться не совсем последовательным, так как некоторые операции, обычно выполняемые в конце процесса индексирования, могли быть пропущены (например, базы данных стемминга и орфографических вариантов могут оказаться непоследовательно заполненными или устаревшими). Для восстановления последовательности построения всех данных достаточно всего лишь снова запустить индексирование. Оно будет перезапущено в точке прерывания (будет выполнен обход по всему дереву файлов, но файлы, которые уже были индексированы до прерывания и для которых содержание индекса не устарело, повторному индексированию не подлежат).

Командная строка recollindex

recollindex имеет большое количество параметров, описанных на странице руководства. Здесь будут описаны лишь некоторые из них.

Параметр -z сбрасывает индекс при запуске. Это практически полностью соответствует удалению файлов индекса (нюанс заключается в том, что версия формата файла Xapian в данном случае останется прежней).

Параметр -Z принудительно обновляет индекс всех документов без предварительного сброса. Здесь не будет «начала с чистого листа», характерного для -z, но выгода заключается в том, что индекс остаётся доступен для запросов в процессе переиндексирования, что может считаться серьёзным преимуществом при значительных размерах индекса (в некоторых ситуациях переиндексация может потребовать несколько дней).

Параметр -k обеспечивает принудительную повторную индексацию файлов, которые не получилось индексировать в прошлый раз, например, по причине отсутствия вспомогательной программы.

Особый интерес также могут представлять параметры -i и -f. -i позволяет индексировать список конкретных файлов (может передаваться с параметром командной строки или считываться из stdin). -f заставляет recollindex игнорировать параметры выбора файлов из конфигурации. В совокупности эти параметры позволяют выстроить собственный процесс выбора файлов для некоторой области файловой системы, путём добавления каталога верхнего уровня в список skippedPaths и применения соответствующего метода выбора файлов с целью построения списка файлов для передачи recollindex -if. Простейший пример:

    find . -name indexable.txt -print | recollindex -if

recollindex -i вместо входа в подкаталоги, указанные в качестве параметра, просто добавляет их в качестве элементов индекса. Построение полного списка файлов осуществляется здесь с помощью внешнего средства выбора файлов.

Linux: использование cron для автоматизации индексирования

Наиболее стандартным способом организации процесса индексирования являются выполняемые в ночное время задания cron. Например, следующая запись crontab обеспечит проведение ежедневного индексирования в 3:30AM (при этом recollindex предполагает, что путь к индексу находится в PATH):

30 3 * * * recollindex > /some/tmp/dir/recolltrace 2>&1

То же самое можно выполнять и с помощью anacron:

1  15  su mylogin -c "recollindex recollindex > /tmp/rcltraceme 2>&1"

Графический интерфейс Recoll предусматривает возможность управления заданиями crontab для recollindex. Для этого необходимо зайти в соответствующий диалог с помощью меню «Настройки»«Расписание индексирования». Операция выполняется с помощью обычной службы cron и не предполагает доступа ко всем имеющимся возможностям планирования cron. Создаваемые этим инструментом задания отмечаются маркером RCLCRON_RCLINDEX=, который позволяет отличать нужные инструменту записи. Соответственно, неизбежен побочный эффект в виде установки для процесса переменной окружения, фактически не использующейся, а проставляемой лишь в качестве маркера.

Для внесения изменений в crontab обычно применяется команда crontab -e (которая запускает редактор vi для редактирования файла). В каждой конкретной системе для этого могут использоваться и другие, более совершенные инструменты.

Необходимо осознавать возможность существования различий между интерактивной средой окружения командной строки текущей системы и средой окружения командной строки, применяемой командами crontab. В особенности это может касаться переменной PATH. Рекомендуется ознакомиться с руководством crontab для получения информации о возможных проблемах.

2.4.2. Индексирование в режиме реального времени

Отслеживание или индексирование в режиме реального времени выполняется путём запуска команды recollindex -m. С этим параметром, recollindex будет постоянно отслеживать изменения файлов и обновлять индекс.

На ОС Windows, процесс отслеживания запускается из графического интерфейса recoll в меню «Файл». На Unix-подобных системах, существуют иные возможности, которые будут раскрыты в последующих разделах.

При работе в режиме реального времени в меню «Файл» графического интерфейса recoll доступны две операции: «Остановить» и «Запустить пошаговый проход».

Операция «Запустить пошаговый проход» фактически перезапускает индексатор для выполнения полного обхода индексируемой области с обработкой изменённых файлов, а затем вновь переключается на режим отслеживания. Эта операция приносит лишь ограниченную пользу, и, большей частью, лишь в случаях, когда конфигурация индексатора настроена на отсрочку обновлений или для немедленной принудительной перестройки данных стемминга и фонетических вариантов, обрабатываемых индексатором в режиме реального времени лишь через определённые промежутки времени.

При всём удобстве индексирования данных в режиме реального времени часто повторяющаяся индексация может создавать значительную нагрузку на систему при изменении таких файлов, как папка электронной почты. Отслеживание больших файловых деревьев также заметно нагружает системные ресурсы. Поэтому вряд ли имеет смысл включать этот режим на маломощных системах. Периодического индексирования в большинстве случаев бывает вполне достаточно.

Версия Recoll 1.24 позволяет задавать конфигурационный параметр monitordirs для указания определённого набора индексируемых файлов, которые будут отслеживаться в режиме реального времени. В такой ситуации пошаговый проход по всему дереву может быть запущен либо путём перезапуска индексатора, либо просто запуском recollindex, который уведомит запущенный процесс. Меню графического интерфейса recoll также содержит элемент управления этим процессом.

Unix-подобные системы: автоматический запуск службы с помощью systemd

Установка содержит два примера файлов (в каталоге share/recoll/examples) для запуска службы индексирования с помощью systemd.

recollindex.service используется для запуска recollindex в качестве службы пользователя. Индексатор будет запускаться при входе пользователя в систему и работать до тех пор, пока сеанс активен.

recollindex@.service является шаблоном службы, которая будет использоваться для запуска индексатора в процессе загрузки и работать от имени конкретного пользователя. Это может быть полезно при запуске текстового поиска в качестве общей службы (например, когда пользователи получают доступ к ней по WEB UI).

Если конфигурация настроена именно так, то юнит-файлы в системе должны находиться в пути systemd по умолчанию (обычно /usr/lib/systemd/system/ и /usr/lib/systemd/user/). В противном случае, может возникнуть необходимость скопировать туда файлы перед запуском службы.

При установке юнит-файлов в соответствующем месте расположения пользовательский юнит может быть запущен с помощью следующих команд:

systemctl --user daemon-reload
systemctl --user enable --now recollindex.service

При запуске от имени суперпользователя системный юнит-файл может быть задан под определённого пользователя:

systemctl daemon-reload
systemctl enable --now recollindex@username.service

(Разумеется, вместо username в этом примере необходимо подставить настоящее имя пользователя).

Unix-подобные системы: автоматический запуск службы из сеанса рабочего стола

На KDE, Gnome и некоторых других средах рабочего стола, служба может быть автоматически запущена при входе в систему во время создания файла рабочего стола в каталоге ~/.config/autostart. Выполнить эту настройку можно с помощью графического интерфейса Recoll. Перейдите в меню «Настройки»->«Расписание индексирования».

В более устаревшей конфигурации X11 запуск службы обычно выполнялся из сценария сеанса пользователя.

Сценарий rclmon.sh можно использовать для простого запуска и остановки службы. Он находится в каталоге examples (обычно /usr/local/[share/]recoll/examples).

Например, хорошо известные сеансы на основе xdm могут иметь сценарий .xsession со следующими строками на конце:

recollconf=$HOME/.recoll-home
recolldata=/usr/local/share/recoll
RECOLL_CONFDIR=$recollconf $recolldata/examples/rclmon.sh start

fvwm

Запускается служба индексирования, а затем и предполагаемый сеансом оконный менеджер.

По умолчанию служба индексирования будет отслеживать состояние сеанса X11 и прекратит работу при его завершении, но необходимости в полном отключении нет. (Отслеживание сервера X11 можно отключить с помощью параметра -x с командой recollindex).

Если службу планируется использовать вне всякой связи с сеансом X11, необходимо добавить параметр -x для отключения отслеживания сеанса X11 (в противном случае служба не запустится).

Прочая информация

Журналирование. По умолчанию сообщения от службы индексирования отправляются в тот же файл, который используется с интерактивными командами (logfilename). Может возникнуть необходимость изменить это поведение путём настройки конфигурационных параметров daemlogfilename и daemloglevel. Также обрезка файла журнала будет выполняться только при запуске службы. В случае постоянной работе службы файл журнала может вырастать до значительных размеров в зависимости от уровня журнала.

Unix-подобные системы: увеличение ресурсов для inotify. На системах Linux отслеживание большого дерева может потребовать увеличения ресурсов, доступных для inotify, которые обычно определяются в /etc/sysctl.conf.

### inotify
#
# cat  /proc/sys/fs/inotify/max_queued_events   - 16384
# cat  /proc/sys/fs/inotify/max_user_instances  - 128
# cat  /proc/sys/fs/inotify/max_user_watches    - 16384
#
# -- Change to:
#
fs.inotify.max_queued_events=32768
fs.inotify.max_user_instances=256
fs.inotify.max_user_watches=32768

Усечение дерева или настройка значения параметра max_user_watches может быть особенно необходима, если индексирование завершается при выводе сообщения с кодом ошибки ENOSPC (28) от inotify_add_watch.

Уменьшение частоты повторной индексации для часто изменяющихся файлов. При работе в режиме реального времени может возникнуть необходимость в индексации некоторых файлов, но чрезмерно частое их изменение оказывает повышенную нагрузку на систему. В конфигурации Recoll имеется параметр, позволяющий указывать минимальное время, ранее которого файл, представленный в виде шаблона с символами подстановки, не может быть повторно индексирован. См. параметр mondelaypatterns в разделе конфигурации.

2.5. Прочие заметки об индексировании

2.5.1. Обработчик входных файлов PDF

Формат PDF очень важен для научной и технической документации, а также для архивирования документов. Он наделён широкими возможностями по хранению метаданных в составе документа, и эти возможности получили реальное применение на практике.

Соответственно, обработчик входных файлов PDF rclpdf.py отличается от других обработчиков наличием более широких функциональных возможностей, а также более тонкой настройкой. В частности, rclpdf.py способен выполнять следующие функции:

  • Извлечение конкретных тегов метаданных из пакета XMP при соответствующей настройке.

  • Извлечение вложенных PDF-файлов.

  • Автоматическое распознавание символов в случае отсутствия текста в документе. Эта функция выполняется путём запуска внешней программы, которая на данный момент описана в отдельном разделе, так как OCR-система также может распознавать текст в файлах изображений отдельно от формата PDF.

Извлечение полей XMP

Сценарий rclpdf.py в Recoll, начиная с версии 1.23.2, умеет извлекать поля метаданных XMP с помощью команды pdfinfo (обычно находится в составе poppler-utils). Контролируется переменной конфигурации pdfextrameta, в которой указываются извлекаемые теги и, по-возможности, присваиваемые им имена.

В переменной pdfextrametafix можно указать файл с кодом Python для изменения полей метаданных (доступно для Recoll 1.23.3 и более поздних версий; у версии 1.23.2 эквивалентный код встроен в сценарий обработчика). Пример:

import sys
import re

class MetaFixer(object):
def __init__(self):
pass

def metafix(self, nm, txt):
if nm == 'bibtex:pages':
txt = re.sub(r'--', '-', txt)
elif nm == 'someothername':
# do something else
pass
elif nm == 'stillanother':
# etc.
pass

return txt
def wrapup(self, metaheaders):
pass

Если определён метод «metafix()», то он вызывается для каждого поля метаданных. Для каждого документа PDF cоздаётся новый объект MetaFixer (поэтому объект может сохранять состояние для выполнения таких операций, как устранение дублирующихся значений). Если же определён метод «wrapup()», то он вызывается только после завершения обработки полей XMP со всеми метаданными в качестве параметра, представленными в виде массива пар «(nm, val)». При этом сохраняется возможность применения альтернативного подхода для изменения или добавления/удаления полей.

Более подробная информация по индексированию свойств XMP для файлов PDF доступна на этой странице.

Индексирование вложенных PDF-файлов

При установке pdftk, а также конфигурационной переменной pdfattach, обработчик входных PDF-файлов будет пытаться извлекать PDF-вложения для индексирования в виде поддокументов PDF-файла. Эта фукнция отключена по умолчанию в связи с тем, что вызывает некоторое замедление индексирования PDF-файлов, даже если ни одно вложение не будет обнаружено (на моём опыте вложения PDF-файлов встречаются достаточно редко).

2.5.2. Запуск распознавания символов (OCR) на файлах изображений

Если обрабатываемый файл не содержит текста, то обработчик входных PDF-файлов Recoll может вызвать внешнюю OCR-программу. Данные OCR сохраняются в кеше отдельных файлов для предотвращения внесения каких-либо изменений в оригиналы.

Следует учитывать, что при возможности внесения изменений в файлы (или их копии), лучше всего запустить модуль OCRmyPDF (либо аналогичный), который добавляет текстовый слой в сам исходный PDF-файл (например, это позволяет открывать из Recoll документ в просмотрщике PDF-файлов непосредственно в месте найденного поискового запроса с возможностью выполнения вторичного поиска встроенным инструментом).

Для того чтобы включить функцию распознавания символов (OCR) в Recoll, необходимо установить OCR-приложение (tesseract или ABBYY), включить OCR в обработчике PDF-файлов (для чего в конфигурационном файле индекса переменная pdfocr устанавливается в значение 1), затем следует указать метод работы OCR в Recoll путём установки переменных конфигурации. Все параметры можно локализовать в подкаталогах с помощью обычного механизма основной конфигурации (в разделах для указания путей).

Пример фрагмента конфигурационного файла recoll.conf:

pdfocr = 1
ocrprogs = tesseract
pdfocrlang = eng

Основное обновление этой функции произошло в Recoll 1.26.5. В более ранних версиях содержался менее полный функционал без кеширования при запуске внешней программы OCR в обработчике PDF-файлов. Новая функция обладает следующими возможностями:

  • Вывод OCR кешируется и сохраняется в отдельных файлах. Кеширование полностью основано на хэш-значении исходного содержимого файла, чтобы исключить привязку к его имени. Основываясь на путях размещения, первый слой обеспечивает быстрое выполнение операций для неизменявшихся (неперемещённых) файлов, а хэш-данные (которые всё ещё обрабатываются на порядок быстрее, чем OCR) повторно вычисляются только в случае их перемещения. OCR выполняется только в том случае, если файл ещё не обрабатывался или был изменён.

  • Добавлена поддержка специальной программы в виде простого модуля Python, благодаря чему возможна работа с любым OCR-движком для выполнения операций из командной строки.

  • Изначально содержит модули tesseract (Linux и Windows), и ABBYY FineReader (на Linux тестировалось работа с версией 11). ABBYY FineReader является коммерческим продуктом с закрытым исходным кодом, но в ряде случаев работает лучше, чем tesseract.

  • OCR на данный момент вызывается только из обработчика PDF-файлов, но использование его для других типов изображений тоже не должно представлять никаких трудностей.

2.5.3. Работа программ распознавания речи с аудиофайлами

Если доступна программа OpenAI Whisper и в конфигурационных файлах установлены соответствующие параметры, то обработчик аудиофайлов Recoll может запустить распознавание речи для аудиофайлов и полученный текст будет проиндексирован. Более подробную информацию см. в соответствующем разделе «Вопросов и ответов».

Результаты распознавания речи будут сохраняться в кеше точно также, как и результаты распознавания символов (OCR) изображения.

2.5.4. Съёмные носители

Изначально в Recoll отсутствовала поддержка по индексированию съёмных устройств (переносных дисков, ключей USB, и т.д.). В последних версиях ситуация несколько улучшилась и поддержка индексирования съёмных устройств производится одним из двух способов:

  • Путём индексирования тома в основной, фиксированный индекс с гарантированным завершением индексирования до удаления тома из системы (начиная с Recoll 1.25.2).

  • Путём сохранения индекса тома на самом томе (начиная с Recoll 1.24).

Индексирование съёмных носителей в основной индекс

Начиная с версии 1.25.2, Recoll использует простой способ, гарантирующий, что данные индекса отсутствующего тома не будут удалены. Это обеспечивается при соблюдении двух условий:

  • Точка монтирования тома должна входить в список topdirs.

  • Каталог для монтирования тома должен быть пустым (когда том не смонтирован).

Если recollindex при запуске обнаружит, что один из каталогов в составе topdirs не содержит данных, все существующие для этого дерева данные при обходе индексирования будут сохранены (данные для этой области не будут очищены).

Автономные тома

Начиная с Recoll 1.24, появилась возможность построения автономных наборов данных, включая конфигурационный каталог Recoll и индекс вместе с индексируемыми документами, а также перемещение такого набора данных (например, копирование его на USB-диск) без необходимости настройки конфигурации для обращения к индексу.

Примечание

Эта функция предназначена только для выполнения запроса. Обновление индекса может осуществляться только в его исходном местоположении. Если обновление необходимо выполнить из другого расположения, то индекс должен быть построен заново.

Принцип действия заключается в том, что в конфигурации сохраняется расположение исходного конфигурационного каталога, который должен находится на съёмном носителе. Если в дальнейшем том будет смонтирован в любом другом месте, Recoll настроит пути, сохранённые в индексе, по разнице между исходным и текущим расположениями конфигурационного каталога.

Ниже приведён сценарий, предназначение которого вкратце можно охарактеризовать как создание конфигурации и индекса Recoll в заданном каталоге (передаётся в одном параметре). Итоговый набор данных (файлы + каталог recoll) позднее можно переместить на CDROM или флешк-диск. Более подробное объяснение следует ниже сценария.

#!/bin/sh

fatal()
{
echo $*;exit 1
}
usage()
{
fatal "Usage: init-recoll-volume.sh <top-directory>"
}

test $# = 1 || usage
topdir=$1
test -d "$topdir" || fatal $topdir should be a directory

confdir="$topdir/recoll-config"
test ! -d "$confdir" || fatal $confdir should not exist

mkdir "$confdir"
cd "$topdir"
topdir=`pwd`
cd "$confdir"
confdir=`pwd`

(echo topdirs = '"'$topdir'"'; \
echo orgidxconfdir = $topdir/recoll-config) > "$confdir/recoll.conf"

recollindex -c "$confdir"

Приведённые ниже примеры предполагают наличие набора данных в /home/me/mydata/, индекс конфигурации и данные которого находятся в /home/me/mydata/recoll-confdir.

Для выполнения запросов после перемещения набора данных, необходимо выполнить следующие действия:

  • В главном конфигурационном файле переменная orgidxconfdir должна определять исходное расположение конфигурационного каталога (соответственно, переменная orgidxconfdir=/home/me/mydata/recoll-confdir должна быть определена в файле /home/me/mydata/recoll-confdir/recoll.conf в примере выше).

  • В перемещаемом каталоге с документами должен находиться конфигурационный каталог. Например, при перемещении каталога /home/me/mydata, конфигурационный каталог должен располагаться где-то в подкаталоге, например /home/me/mydata/recoll-confdir или /home/me/mydata/sub/recoll-confdir.

  • Исходное расположение должно сохраняться для элементов индекса, имеющих связь с конфигурационным каталогом по умолчанию (преимущественно, dbdir). Абсолютными должны быть только пути, ссылающиеся на сами документы (например, значения переменной topdirs, которые используются только при выполнении индексирования).

Непосредственного участия пользователя требует только первый пункт, настройка значений по умолчанию в Recoll совместима с третьим пунктом, а второй пункт не содержит ничего особенно нового.

Если после перемещения необходимо будет скопировать конфигурационный каталог из набора данных (например, по причине медленной работы флеш-диска), то может потребоваться установка значения переменной curidxconfdir в копируемой конфигурации для указания размещения после копирования. Например, если /home/me/mydata смонтирован на /media/me/somelabel, но конфигурационный каталог и индекс были скопированы в /tmp/tempconfig, то переменной curidxconfdir в файле /tmp/tempconfig/recoll.conf необходимо присвоить значение /media/me/somelabel/recoll-confdir. При этом orgidxconfdir сохранит прежнее значение /home/me/mydata/recoll-confdir как в исходной версии, так и в копии.

Если копирование конфигурации во внешний каталог осуществляется на постоянной основе, то удобнее будет написать сценарий для автоматизации этой процедуры. Однако обилие возможных вариантов не позволяет выполнять такую настройку непосредственно из Recoll. В качестве примера можно привести вариант с копированием конфигурации, чтобы сделать её доступной для записи, оставляя при этом данные индекса на носителе вследствие слишком большого размера. Здесь в копируемой конфигурации необходимо будет задать переменную dbdir.

При выполнении тех же манипуляций (Recoll 1.24) возникает возможность выполнения запросов из конфигурационного каталога с правами только для чтения (разумеется, функционал будет слегка урезан, например, в части пополнения истории запросов).

2.5.5. Unix-подобные системы: индексирование истории веб-поиска

С помощью расширения Firefox, Recoll может индексировать посещаемые пользователем веб-странички. Расширение имеет долгую историю: изначально оно было разработано для индексатора Beagle, потом было добавлено в Recoll, а затем и в Firefox XUL API. Настоящая версия расширения, размещённая в репозитории расширений Mozilla, использует WebExtensions API и работает с текущими версиями Firefox.

Расширение работает путём копирования посещаемых веб-страниц в каталог очереди индексирования, после чего Recoll их обрабатывает, сохраняя данные в локальный кеш с последующей индексацией, а затем удаляет файлы из очереди.

Локальный кеш не является архивом

Как уже упоминалось выше, Recoll сохраняет копии индексированных веб-страниц в локальный кеш (из которого данные берутся для предварительного просмотра или при сбросе индекса). При сбросе индекса кеш не изменяется, а используется для индексирования. Минимальный размер кеша задаётся в диалоговом окне «Настройки индекса» / «История в веб» (параметр webcachemaxmbs в recoll.conf). При достижении минимального размера старые страницы начинают удаляться, чтобы очистить место для новых. Страницы, подлежащие хранению на неопределённое время, необходимо архивировать отдельно в другом месте. Во избежание удаления данных можно установить очень большой размер кеша, но сначала рекомендуется изучить соответствующую страницу «Практического руководства» для ознакомления с дополнительной информацией и возможными трудностями.

Функцию индексирования веб-поиска можно включить из графического интерфейса Recoll в диалоговом окне «Настройка индекса» или путём редактирования конфигурационного файла (необходимо установить переменую processwebqueue в значение 1).

Графический интрфейс Recoll имеет инструмент для вывода и редактирования содержимого веб-кеша. («Инструменты»«Редактор веб-кэша»)

Команда recollindex имеет два параметра для работы с веб-кешем:

  • --webcache-compact освобождает пространство от удалённых элементов. Может потребовать в два раза больше места, чем занимает веб-кеш.
  • --webcache-burst destdir разбивает все имеющиеся элементы на пары файлов метаданных и данных, которые создаются внутри каталога destdir

Более подробная информация по веб-индексирванию, его использованию и настройке конфигурации доступна в соответствующем разделе «Практического руководства» Recoll.

2.5.6. Unix-подобные системы и Mac OS-подобные системы: использование расширенных атрибутов

Пользовательские расширенные атрибуты представляют собой элементы информации, которые могут присваиваться любому файлу в наиболее современных файловых системах.

Все расширенные атрибуты Recoll обрабатывает как поля документов. При этом необходимо понимать, что большинство полей по умолчанию не индексируются. Активировать их индексацию можно путём установки префикса в конфигурационном файле fields.

В стандартах freedesktop определяется несколько специальных атрибутов, которые обрабатывает Recoll:

mime_type

С помощью этого параметра переопределяется любое другое определение MIME-типа файла.

charset

С помощью этого параметра определяется кодировка файла (главным образом, актуально для простых текстовых файлов).

Остальные атрибуты по умолчанию обрабатываются в виде полей Recoll с тем же именем.

В Linux префикс user удаляется из имени.

Точнее настроить преобразование имени можно с помощью соответствующих полей конфигурационного файла.

Установка даты изменения/создания документа

Некоторые документы имеют внутренний атрибут даты (например, электронные письма), однако большинство файлов получает дату из атрибута времени последнего изменения файла. Присвоить документу дату, отличную от заданной в атрибуте файла, можно путём установки особого расширенного атрибута. По неким малопонятным причинам имя этого атрибута программно задано как modificationdate. Его содержимое должно включать ASCII-символы десятичных целочисленных значений в формате времени Unix (секунд с начала эпохи). Пример командной строки Linux для установки этого конкретного поля представлен ниже. Команда date здесь возвращает параметр даты в формате времени Unix (секунд с начала эпохи).

setfattr -n user.modificationdate -v `date -d '2022-09-30 08:30:00' +%s` /некий/файл
Подстановка даты затем происходит автоматически без необходимости настройки файла fields.

2.5.7. Unix-подобные системы: импорт внешних тегов

В процессе индексирования можно импортировать метаданные для каждого файла с помощью соответствующих команд. Это позволяет, например, извлекать данные тегов из внешнего приложения и сохранять их в поле для индексирования.

Синтаксис конфигурации представлен в описании поля metadatacmds в основной главе по настройке конфигурации.

Например, если для чего-то нужно, чтобы Recoll использовал подконтрольные tmsu теги в поле с именем tags, то необходимо добавить следующие строки:

[/некая/область/фс]
          metadatacmds = ; tags = tmsu tags %f
        

Примечание

В зависимости от версии tmsu может возникнуть необходимость/желание добавить параметры, например: --database=/некая/бд.

Может потребоваться ограничить обработку неким подмножеством дерева каталогов для ускорения процесса индексирования ([некая/область/фс]).

Не забудьте поставить точку с запятой между значением параметра и знаком равенства.

В примере выше вывод tmsu используется для установки значения поля с именем tags. Имя поля выбирается произвольно и для него с одинаковым успехом можно использовать как tmsu, так и любое другое имя, например, myfield. Однако tags является псевдонимом стандартного поля keywords в Recoll, и вывод tmsu лишь увеличит размер его содержимого. Это позволит избежать необходимости расширения конфигурации полей.

Как только будет выполнено повторное индексирование (необходима принудительная переиндексация файла — сам Recoll необходимость переиндексации определить не сможет), можно будет выполнять поиск на языке запроса с использованием любых его псевдонимов: tags:некие/альтернативные/значения или tags:все,эти,значения.

Индексатор не сможет обнаружить изменения в тегах, если сам файл не изменялся. Одним из вариантов решения этой проблемы может быть обновление времени файла ctime при изменении тегов, соответствующих по функционалу расширенным атрибутам. Этого можно добиться с помощью пары команд chmod или команды touch -a. Также можно просто привязать обновление тега к recollindex -e -i /путь/к/файлу.

Глава 3. Поиск

3.1. Введение

Бесспорно, основной функцией Recoll является получение результатов на конкретные запросы поиска. Для этого предусмотрено несколько интерфейсов, которые хорошо понимают простые запросы, состоящие из одного или нескольких слов, и в большинстве случаев возвращают соответствующие результаты.

Однако для полноценного использования возможностей Recoll рекомендуется разобраться с процессом обработки запросов пользователя. Существует пять различных режимов поиска:

  • В режиме «Все слова» Recoll ищет документы, содержащие все слова в запросе.

  • В режиме «Язык запроса» при отсутствии специального ввода поиск выполняется почти как в режиме «Все слова», но на самом деле в нём скрыты большие возможности. Он позволяет наиболее полно использовать способности Recoll. Может применяться из всех возможных интерфейсов (графическая оболочка, командная строка, веб-интерфейс, …) и подробно описан здесь.

  • В режиме «Любое слово» Recoll выполняет поиск документов, содержащих любое слово из состава имеющихся в поисковом запросе, предпочитая те документы, в которых этих слов содержится больше всего.

  • В режиме «Имя файла» Recoll будет искать совпадения только с именами файлов, игнорируя их содержимое. Поскольку в данном случае набор индекса будет небольшим, то возможно применение таких средств, как левосторонние знаки подстановки, не опасаясь проблем с производительностью, что иногда может быть полезно.

  • Режим «Сложный поиск» в графическом интерфейсе не имеет никаких практических преимуществ перед использованием языка запросов, но позволяет пользователю строить сложные запросы без необходимости владения этим языком, а также избегать неоднозначностей толкования, поскольку обработка ввода перенаправляется пользователю.

Все эти пять режимов ввода поддерживаются различными интерфейсами пользователя, которые описаны в следующих разделах.

3.2. Поиск с помощью графического интерфейса пользователя на основе библиотеки Qt

Главный пользовательский интерфейс поиска программы recoll основан на библиотеке Qt.

Этот интерфейс имеет два варианта:

  • Простой поиск (по умолчанию, на основном экране) имеет одно поле для ввода нескольких слов или запроса на языке запросов.

  • Сложный поиск (соответствующее окно можно открыть либо в меню «Инструменты», либо щелчком по значку на одноимённой панели инструментов) снабжён несколькими полями ввода, которые позволяют выстраивать логические условия, с дополнительным фильтрованием по типу файлов, расположению их в файловой системе, дате изменения и размеру.

Инструмент «Сложный поиск» легче в использовании, но в действительности нисколько не мощнее варианта «Простой поиск», когда он используется в режиме языка запросов. Данное имя сложилось исторически, хотя суть выполняемых процессов, вероятно, лучше передавало бы имя «Автоматизированный поиск».

В большинстве текстовых полей, можно вводить запросы в их исходном виде, даже если они содержат знаки пунктуации или другие нетекстовые символы (например, Recoll способен обрабатывать такие специфические строки, как адреса электронной почты).

Расположение текста в порядке, отличном от привычного, может потребоваться, главным образом, для восточноазиатских языков (китайского, японского, корейского). Слова, состоящие из одного или нескольких символов, в этом случае необходимо разделять пробелом (обычно они пишутся без пробела).

В некоторых случаях запрос может оказаться таким сложным, что может возникать потребность его повторного использования с возможностью внесения некоторых изменений. Recoll способен сохранять и восстанавливать такие запросы. См. Сохранение и восстановление запросов.

3.2.1. Простой поиск

  1. Запустите программу recoll.

  2. При необходимости выберите режим поиска: «Любое слово», «Все слова», «Имя файла» или «Язык запросов».

  3. Введите слово или слова запроса в текстовом поле в верхней части окна.

  4. Щёлкните по кнопке «Поиск» или нажмите клавишу Enter для запуска поиска.

В качестве режима поиска по умолчанию используется «Язык запросов». Без специальных указаний выполняется лишь поиск документов, содержащих все слова поискового запроса (чем больше слов, тем лучше будут результаты поиска), практически также, как в режиме «Все слова».

В режиме «Любое слово» выполняется поиск документов, содержащих хотя бы одно из имеющихся слов.

В режиме «Имя файла» выполняется поиск только по именам файлов, а не по их содержимому.

Во всех режимах поиска можно расширить элемент поиска с помощью знаков подстановки (*, ?, []). См. более подробную информацию в разделе о знаках подстановки.

Во всех режимах, за исключением «Имя файла», можно выполнять поиск точных фраз (смежных слов в заданном порядке) путём заключения ввода в двойные кавычки. Например: "virtual reality".

Функции Языка запросов описаны в отдельном разделе.

При использовании урезанного индекса (по умолчанию), регистр символов не оказывает влияния на результаты поиска, за тем исключением, что можно отключить поиск по однокоренным словам для любого элемента поиска при вводе его текста с прописной буквы. Например: при вводе слова floor обычно поиск будет выполняться по словам flooring, floored, и т.д, но поиск по слову Floor будет включать только слово floor в любом регистре. При необходимости поиск по словоформам можно также полностью отключить в настройках. При использовании неурезанного индекса правила будут ещё немного сложнее.

Recoll запоминает несколько последних запросов, выполнявшихся пользователем. Непосредственно обратиться к истории запросов можно нажатием на кнопку с изображением часов справа от поля ввода запроса при отсутствии в нём текста. В противном случае история запросов используется для вставки завершения запроса (см. далее). Запоминаются только тексты запросов, но не использовавшиеся с ними режимы («все слова»/«любое слово»/«имя файла»).

При вводе текста область поиска recoll будет отображать возможные варианты завершения строки, фильтруемые из истории и элементов поиска в индексе. Отключить автодополнение можно с помощью соответствующего параметра настройки.

Двойной щелчок по слову в списке результатов или в окне просмотра добавляет его в простое поле ввода.

В режиме поиска «Все слова» или «Любое слово» в поле ввода можно вставить любой скопированный текст со всеми знаками пунктуации, переносами строк и прочими символами, за исключением символов подстановки (допускаются лишь одиночные символы ?). Recoll будет обрабатывать эти слова и выполнять осмысленный поиск. В этом заключается самое серьёзное отличие указанных режимов от режима «Язык запросов», где необходимо соблюдать правила синтаксиса.

Режим поиска «Имя файла» будет осуществлять поиск только по именам файлов. Смысл в наличии отдельного режима для поиска по именам файлов заключается в более эффективном использовании символов подстановки с индексом небольшого размера (использование символов подстановки с левой стороны элемента поиска будет не так затратно). При этом необходимо запомнить следующие особенности:

  • Пробел при вводе должен соответствовать пробелу в имени файла, так как специальной обработке подвергаться не будет.

  • Поиск не учитывает регистр символов и диакритические знаки независимо от типа индекса.

  • Ввод без символов подстановки и без символов в верхнем регистре будет предваряться и завершаться символом «*» (e.g.: etc -> *etc*, but Etc -> etc).

  • Если индекс имеет значительные размеры (много файлов), чрезмерное обобщение фрагментов может привести к низкой эффективности поиска.

3.2.2. Список результатов

После запуска поиска в главном окне постоянно отображается список результатов поиска.

По умолчанию список документов представлен в порядке степени соответствия (насколько хорошо приложение оценивает соответствие документа запросу). Результаты можно отсортировать в порядке убывания или возрастания даты с помощью вертикальных стрелочек на панели управления.

Каждый результат отображается в виде абзаца структурированного текста. Стандартный формат обычно вполне удовлетворяет необходимым требованиям, но способен учитывать и пожелания более взыскательной публики, обладая широкими возможностями настройки.

Большая часть результатов будет содержать интерактивные ссылки «Просмотр» и «Открыть».

Щелчок по ссылке «Просмотр» открывает внутреннее окно просмотра документа. Дальнейшие переходы по ссылкам «Просмотр» из того же списка результатов поиска открываются в виде вкладок на уже открытом окне просмотра. Принудительно открыть ссылку в новом окне просмотра можно при нажатии клавиши Shift +щелчок мыши, что может быть полезно при параллельном просмотре документов. (Также можно последовательно открывать результаты поиска в одном окне просмотра при нажатии клавиш Shift+стрелка вверх/вниз).

Щелчок по ссылке «Открыть» запускает внешний просмотрщик документа. По умолчанию при выборе соответствующего приложения для просмотра большинства типов документов Recoll использует настройки рабочего стола. См. далее о настройке приложений.

Ссылки «Просмотр» и «Открыть» на некоторых фрагментах могут отсутствовать. Они доступны только для документов с MIME-типами, из которых Recoll умеет извлекать текст, а также для документов, которым в конфигурации задан соответствующий просмотрщик. Однако при настройке конфигурации в это поведение можно внести некоторые изменения. Более подробно:

  • Ссылка «Просмотр» появляется для документов, MIME-тип которых присутствует в разделе [index] файла mimeconf, и только в случае установки переменной конфигурации textunknownasplain — для всех типов, идентифицированных в качестве подтипа для text (text/*).

  • Ссылка «Открыть» появляется для документов, MIME-тип которых присутствует в разделе [view] конфигурационного файла mimeview. Если задана переменная textunknownasplain, но не установлена специальная программа для просмотра данного подтипа text, будет использован просмотрщик для text/plain.

Для просмотра фактического запроса Xapian, полученного по итогам реализации поиска по словоформам и другой обработки, можно щёлкнуть по ссылке «показать запрос» в верхней части страницы результатов.

Двойной щелчок по любому слову внутри списка результатов или окна просмотра приведёт к его вставке в поле простого поиска.

Список результатов разбивается на страницы. Размер страницы можно поменять в настройках. Для навигации по списку результатов можно использовать кнопки со стрелками на панели управления или ссылки в нижней части страницы.

Настройка просмотрщиков

По умолчанию при выборе приложения для открытия данного документа Recoll использует настройки рабочего стола с некоторыми исключениями.

Более тонко настроить это поведение можно в диалоговом окне меню «Настройки»«Настройка интерфейса»«Интерфейс пользователя»«Выбор приложений-редакторов» или путём внесения изменений в конфигурационный файл mimeview.

Если в верхней части диалогового окна установлен флажок «Использовать настройки окружения по умолчанию», то обычно используются настройки рабочего стола по умолчанию. Однако имеется небольшой стандартный список исключений для MIME-типов, для которых выбор Recoll должен переопределять выбор рабочего стола. Эти приложения хорошо интегрированы с Recoll. Например, в Linux для открытия файлов PDF и Postscript используется приложение evince, поскольку оно поддерживает открытие документа на определённой странице и передачу строки поиска в качестве параметра командной строки. В этом диалоговом окне можно добавлять и удалять типы документов в списке исключений.

Если предполагается полностью перестроить конфигурацию выбора приложений, то можно снять флажок «Использовать настройки окружения по умолчанию». В этом случае Recoll будет использовать предустановленные приложения, которые могут изменяться для каждого типа документа. В большинстве случаев этот подход может оказаться не самым удобным.

Так или иначе, в диалоговом окне выбора приложений-редакторов можно выбрать несколько MIME-типов в верхней части окна и определить для них обработчика в нижней части. В большинстве случаев %f будет использоваться в качестве заполнителя и заменяется именем файла в командной строке при запуске приложения.

Приложения-редакторы можно также изменять путём изменения конфигурационного файла mimeview, если этот вариант окажется более удобным.

В Unix-подобных системах на каждом элементе списка результатов поиска также можно открыть контекстное меню, в котором имеется элемент «Открыть с помощью». Это позволяет выбирать приложение из списка зарегистрированных в рабочем столе приложений для MIME-типа данного документа в индивидуальном порядке.

Поиск не дал результатов: варианты правописания

При отсутствии результатов поиска, если выполнена настройка словаря aspell, Recoll инициирует проверку слов поискового запроса на ошибки с предложением списков на замену. Щелчком по одному из предлагаемых слов можно заменить слово и перезапустить поиск. При этом необходимо удерживать любую из клавиш-модификаторов (Ctrl, Shift и т.д.), чтобы остаться в окне предложений слов на замену, если меняется сразу нескольких слов.

Контекстное меню списка результатов

Помимо ссылок для просмотра и изменения файлов имеется выпадающее меню, которое можно открыть щелчком правой клавиши мыши по абзацу в списке результатов. Это меню включает следующие элементы:

  • Просмотр

  • Открыть

  • Открыть с помощью

  • Запустить выполнение сценария

  • Копировать имя файла

  • Копировать URL

  • Сохранить в файл

  • Найти похожие документы

  • Просмотр родительского документа

  • Открыть родительский документ

  • Открыть окно выдержек

Элементы «Просмотр» и «Открыть» выполняют те же действия, что и соответствующие ссылки.

«Открыть с помощью» (Unix-подобные системы) позволяет открыть документ с помощью одного из приложений предположительно способных работать с файлами этого MIME-типа (согласно информации файлов .desktop в /usr/share/applications).

«Запустить выполнение сценария» позволяет запустить произвольную команду для обработки файла, представленного в результатах поиска. Этот элемент меню появляется только для результатов, относящихся к файлам верхнего уровня. См. более подробное соответствующее описание ниже.

Элементы меню «Копировать имя файла» и «Копировать URL» выполняют копирование соответствующих данных в буфер обмена для последующей вставки.

Элемент меню «Сохранить в файл» позволяет сохранять содержимое документа из результатов поиска в выбранный файл. Этот элемент появляется только в случае отсутствия собственного файла для данного документа, когда он является поддокументом внутри другого файла (например: вложение электронной почты). Это особенно полезно, так как позволяет извлекать вложения, для которых не задано приложение-редактор.

Элемент меню «Открыть родительский документ»/«Просмотр родительского документа» позволяют работать с документом верхнего уровня (например: с письмом электронной почты, в которое вложен данный документ). Recoll не всегда абсолютно точен на предмет того, что он может или не может делать в этой области. Например, те же Родительские элементы меню появятся и для электронной почты, которая является частью файла папки mbox, но при этом нельзя открыть mbox для просмотра (попытка просмотра вызовет появление ошибки).

Если документ является файлом верхнего уровня, при выборе элемента меню «Открыть родительский документ» откроется менеджер файлов с каталогом файловой системы, в котором находится данный файл.

Элемент меню «Найти похожие документы» позволяет выбрать несколько соответствующих слов из текущего документа и вставить их в поле простого поиска. Это позволяет выполнить простой поиск, имея все шансы найти документы, имеющие отношение к текущему результату поиска. Не могу однако припомнить ни одного случая, где бы эта функция принесла мне реальную пользу…

Элемент меню «Открыть окно выдержек» появляется только для документов, которые поддерживают разрывы страниц (обычно PDF, Postscript, DVI). Окно выдержек содержит фрагменты документа, имеющие совпадение с поисковым запросом, вместе с соответствующими номерами страниц в виде ссылок, которые позволяют открыть приложение-просмотрщик на соответствующей странице. Если просмотрщик поддерживает эту функцию, то его система поиска также будет задействована для нахождения одного из элементов поиска.

3.2.3. Таблица результатов поиска

Результаты поиска могут быть представлены не только в виде списка, но и в виде электронной таблицы. Переключиться на этот вид представления можно нажатием на значок с изображением таблицы на панели управления (значок работает как тумблер, и чтобы перейти обратно к представлению в виде списка необходимо щёлкнуть его же).

Щелчком по заголовку столбца можно отсортировать содержимое таблицы по значениям данного столбца. Повторное нажатие изменяет порядок сортировки на обратный, а в контекстном меню шапки таблицы можно сбросить сортировку по столбцу на сортировку по умолчанию (также можно использовать стрелочки «сортировать по дате»).

Как список, так и таблица, отображают результаты одного и того же поиска. Настройка сортировки таблицы остаётся активной при переключению обратно к списку поиска. Для сброса сортировки в этом случае необходимо дважды нажать на стрелочку сортировки по дате.

Контекстное меню заголовка таблицы позволяет добавлять или удалять столбцы. Размер столбцов можно менять, как и порядок их расположения (перетаскиванием). При завершении работы в recoll все эти изменения запоминаются.

При наведении курсора на строки таблицы происходит обновление области подробной информации в нижней части окна на соответствующие значения. Для фиксации значения можно щёлкнуть по строке. Отображение в нижней части окна соответствует абзацу списка результатов поиска со ссылками для просмотра или открытия документа в приложении-редакторе, а также с соответствующим контекстным меню. Нажатие на клавишу Esc снимает фиксацию этой области экрана.

При щелчке левой клавишей мыши совместно с клавишей Shift вместо дополнительной информации отображается извлечённый из документа текст (подобно окну просмотра). Однако функции щелчка, как и щелчка совместно с клавишей Shift, могут быть зарезервированы в настройках графического интерфейса.

3.2.4. Панель фильтров

По умолчанию графический интерфейс отображает панель фильтров слева от области отображения результатов. Эта панель появилась в версии 1.32. Ширина панели может настраиваться, либо полностью сжиматься, и запоминается до следующего сеанса.

В панели имеется две области для фильтрации результатов либо по датам, либо по расположению в файловой системе.

Панель активна только в режиме поиска «Язык запроса» и эффект её заключается в добавлении выражений date: и dir: к текущему поиску.

Фильтр по датам включается установкой соответствующего флажка. В нём имеется два виджета автоматизации ввода даты для минимальной и максимальной даты периода поиска.

Фильтр каталога отображает набор каталогов файловой системы, ограничивающих индексируемую область согласно списку topdirs и параметров исключения имени. Можно включать и исключать каталоги путём установки и снятия флажков. При этом выбор каталога включает поиск по всему поддереву. Необходимости специально включать подкаталоги нет, а некоторые из них даже и невозможно исключить из списка (используйте выражения Языка запросов dir:, если это необходимо).

3.2.5. Выполнение произвольных команд для обработки файлов из результатов поиска

Помимо операций «Открыть» и «Открыть с помощью», которые позволяют запустить приложение для открытия документа из результатов поиска (или временной копии) на основе его MIME-типа, также возможно выполнение произвольных команд для работы с файлами верхнего уровня в списке результатов с помощью элемента контекстного меню «Запустить выполнение сценария».

Команды, которые появятся в подменю «Запустить выполнение сценария», определяются файлами .desktop внутри подкаталога scripts текущего конфигурационного каталога.

Ниже следует пример файла .desktop, который может быть назван, например, ~/.recoll/scripts/myscript.desktop (конкретное имя файла внутри этого каталога не имеет определющего значения):

          [Desktop Entry]
          Type=Application
          Name=MyFirstScript
          Exec=/home/me/bin/tryscript %F
          MimeType=*/*
        

Атрибут Name определяет надпись, которая появится внутри меню «Запустить выполнение сценария». Атрибут Exec определяет запускаемую программу, которая совсем необязательно должна быть сценарием. Атрибут MimeType не используется, но должен присутствовать.

Определяемые таким образом команды также могут быть использованы по ссылкам внутри абзаца результатов поиска.

Например, может иметь смысл написать сценарий, который будет перемещать документ в корзину и удалять его из индекса Recoll.

3.2.6. Unix-подобные системы: отображение миниатюр

В формате отображения элементов списка результатов поиска по умолчанию, а также в области подробной информации при отображении таблицы результатов поиска каждый документ обозначается определённым значком. Это либо общий значок для соответствующего MIME-типа, либо миниатюра внешнего вида документа. Миниатюры отображаются только в том случае, когда соответствующие файлы расположены в стандартных каталогах для freedesktop, где они обычно создаются менеджером файлов.

Recoll не обладает функциональной возможностью создания миниатюр. Для этого используется относительно простой трюк в виде элемента контекстного меню «Открыть родительский документ/каталог» списка результатов поиска, при выборе которого должно открыться окно менеджера файлов с содержимым соответствующего каталога, в котором уже будут созданы миниатюры (в зависимости от настройки менеджера файлов). После чего при перезапуске поиска уже должны появиться миниатюры.

См. также несколько советов по созданию миниатюр в «Вопросах и ответах» программы Recoll.

3.2.7. Окно просмотра

Окно просмотра сначала открывается при щелчке по ссылке Просмотр внутри списка результатов поиска.

Последующие переходы по этой ссылке в том же списке результатов поиска открываются в новых вкладках уже открытого окна (если при этом не была нажата клавиша Shift, в каковом случае будет открыто новое окно для параллельного просмотра).

После выполнения другого поиска и перехода по ссылке просмотра будет открыто новое окно просмотра. При этом старое окно остаётся открытым пока оно не будет закрыто пользователем.

Закрытие вкладки в окне просмотра выполняется с помощью комбинации клавиш Ctrl-W (Ctrl + W). При закрытии последней вкладки или нажатии соответствующей кнопки оконного менеджера в верхней части рамки окно также будет закрыто.

Можно отображать последующие или предыдущие документы из списка результатов поиска внутри вкладки просмотра нажатием клавиш Shift+Вниз или Shift+Вверх (Вниз и Вверх представляют собой клавиши со стрелками).

Контекстное меню в области текста позволяет переключаться между отображением основного текста и содержимым полей, связанных с документом (например: author, abtract, и т.д.). Это особенно полезно в случаях, когда совпадение элемента поиска произошло не по основному тексту, но по одному из полей. В случае с изображениями можно переключаться между тремя видами: само изображение, метаданные изображения, извлечённые с помощью exiftool, и поля в виде метаданных, сохранённых в индексе.

Содержимое текущего окна просмотра можно вывести на печать нажатием клавиш Ctrl-P (Ctrl + P) в окне просмотра текста.

Поиск в окне просмотра

Окно просмотра также имеет встроенную возможность поиска, управление которым осуществляется на панели в нижней части окна. Этот поиск работает в двух режимах: в виде классического последовательного поиска, реализуемого в большинстве редакторов, в которых имеется функция поиска текста, набираемого в области ввода, либо в виде перебора совпадений документа и поискового запроса, обнаруженных программой Recoll.

Последовательный поиск текста

Вкладки просмотра снабжены функцией последовательного внутреннего поиcка. Ввод строки поиска выполняется либо после нажатия клавиши / (косая черта), либо CTL-F при нахождении внутри области текста, либо щелчком по полю с текстом «Искать:». При этом для поиска следующего/предыдущего совпадения можно использовать кнопки «Следующий» и «Предыдущий». Также для перехода к следующему совпадению внутри текстовой области можно нажимать клавишу F3.

После ввода строки поиска при использовании клавиш Ctrl-Вверх/Ctrl-Вниз выполняется поиск для каждого последующего документа списка результатов. В случае наличия результатов поиска курсор располагается на первом совпадении искомой строки.

Переход по списку совпадений

Если область ввода поиска при нажатии клавиши «Следующий» или «Предыдущий» пуста, текст прокручивается для отображения следующего совпадения с любым элементом поиска (следующая выделенная область). При выборе группы поиска из выпадающего списка щелчок по кнопке «Следующий» или «Предыдущий» выполняет переход по списку совпадений для этой группы. Такой поиск выполняется иначе, чем поиск по тексту, с учётом неточных совпадений (при использовании словоформ и символов подстановки). Поиск вернётся в текстовый режим как только в поле поиска будет введён текст.

3.2.8. Окно «Фрагменты запроса»

Окно «Фрагменты запроса» можно использовать для управления фильтрованием элементов языка запроса путём изменения текущего запроса одним нажатием кнопки. Эта функция позволяет уменьшить размер ввода и необходимость запоминания простых выражений общего назначения (например, для выбора только отдельных документов или вложений, для фильтрации результатов веб-поиска, для выбора поддерева файловой системы, типа файла и так далее).

При выборе элемента меню «Инструменты»«Фрагменты запроса» откроется диалоговое окно.

Конфигурация содержимого окна полностью настраивается, и определяется по содержимому текстового XML-файла с именем fragment-buttons.xml, который должен находиться в конфигурационном каталоге текущего индекса. Образец файла, распространяемый с дистрибутивом Recoll содержит несколько примеров фильтров. Эти фильтры будут автоматически скопированы в конфигурационный каталог при отсутствии в нём данного файла (например, ~/.recoll/fragment-buttons.xml на Linux и Mac OS, $HOME/AppData/Local/Recoll/fragment-buttons.xml на Windows). Внесение изменений в этот файл позволит настроить инструмент под потребности пользователя .

Примечание

Файл fragment-buttons.xml до Recoll версии 1.31.0 назывался fragbuts.xml . Для носителей английского языка это имя звучало настолько неприлично, что его в итоге пришлось сменить. Однако при отсутствии файла fragment-buttons.xml использование файла fragbuts.xml допускается. Автоматическое переименование файла не предусмотрено.

Ниже следует иллюстрация внешнего вида диалогового окна:

А также соответствующий конфигурационный файл:

<?xml version="1.0" encoding="UTF-8"?>
<fragbuttons version="1.0">

  <radiobuttons>
    <!-- Toggle WEB queue results inclusion -->
    <fragbutton>
      <label>Include Web Results</label>
      <frag></frag>
    </fragbutton>
    <fragbutton>
      <label>Exclude Web Results</label>
      <frag>-rclbes:BGL</frag>
    </fragbutton>
    <fragbutton>
      <label>Only Web Results</label>
      <frag>rclbes:BGL</frag>
    </fragbutton>
  </radiobuttons>

  <radiobuttons>
    <!-- Standalone vs embedded switch -->
    <fragbutton>
      <label>Include embedded documents</label>
      <frag></frag>
    </fragbutton>
    <fragbutton>
      <label>Only standalone documents</label>
      <frag>issub:0</frag>
    </fragbutton>
    <fragbutton>
      <label>Only embedded documents</label>
      <frag>issub:1</frag>
    </fragbutton>
  </radiobuttons>

  <buttons>
    <fragbutton>
      <label>Example: Year 2010</label>
      <frag>date:2010-01-01/2010-12-31</frag>
    </fragbutton>
    <fragbutton>
      <label>Example: c++ files</label>
      <frag>ext:cpp OR ext:cxx</frag>
    </fragbutton>
    <fragbutton>
      <label>Example: My Great Directory</label>
      <frag>dir:/my/great/directory</frag>
    </fragbutton>
  </buttons>
</fragbuttons>
        

Присутствует два типа группирования переключатели и кнопки, каждое из которых определяет ряд флажков или переключателей внутри окна. При этом можно выбрать любое количество кнопок, но из ряда переключателей выбирается только один.

Кнопки определяются в разделе fragbutton, где указывается надпись для кнопки и фрагмент Языка запроса, добавляемого (в виде фильтра AND) перед выполнением поиска, если кнопка активна.

    <fragbutton>
      <label>Пример: Мой замечательный каталог</label>
      <frag>dir:/мой/замечательный/каталог</frag>
    </fragbutton>
  

Также внутрь группы можно добавлять элементы message для описания поведения. Элементы message имеют label, но элемент frag у них отсутствует. Пример:

  <buttons>
    <message>
      <label>Это — сообщение</label> 
    </message>
  </buttons>
  

Содержимое элемента label интерпретируется как HTML. Но при использовании в нём тегов символы открывающего тега < должны быть представлены в виде кодов &lt;.

Всё что нужно знать об XML при внесении изменений в этот файл — это то, что любой открывающий тег, такой как <label>, должен иметь парный закрывающий тег после соответствующего значения: </label>.

Как правило, файл редактируется в обычном текстовом редакторе, например, vi или notepad. Причём двойной щелчок по файлу в менеджере файлов не обязательно приведёт к нужному результату, поскольку файл при этом обычно открывается в веб-браузере, который не позволяет изменять содержимое.

3.2.9. Автоматизированный сложный поиск (также называется «Сложным поиском»)

Диалоговое окно сложного поиска позволяет выполнять более сложные запросы без необходимости запоминания конструкций языка запросов. Оно открывается из меню «Инструменты» или щелчком по значку на панели инструментов.

Recoll сохраняет историю поиска. См. Историю сложного поиска.

В диалоговом окне доступны две вкладки:

  1. Первая вкладка позволяет указать элемент поиска, а также определить несколько выражений, которые объединяются для построения запроса.

  2. Вторая вкладка позволяет фильтровать результаты по размеру файла, дате изменения, MIME-типу или расположению.

Для начала поиска щёлкните по кнопке «Начать поиск» в диалоговом окне сложного поиска или нажмите кнопку Enter в любом текстовом поле. Кнопка в главном окне всегда запускает простой поиск.

Для просмотра охвата поиска щёлкните по ссылке «Показать сведения о запросе» в верхней части страницы результатов поиска.

Сложный поиск: вкладка «Найти»

Эта часть диалогового окна позволяет конструировать запрос объединением нескольких выражений различных типов. Каждое поле можно настраивать на следующие режимы:

  • Все слова.

  • Любое слово.

  • Ни одного из слов.

  • Фраза (точные формы слов в заданном порядке в настраиваемом окне).

  • Близость (слова в любом порядке в настраиваемом окне).

  • Поиск имени файла.

Можно создавать дополнительные поля ввода щелчком по кнопке «Добавить выражение».

При поиске непустые выражения будут объединены либо с помощью логической операции И, либо ИЛИ, в зависимости от выбора элемента слева («Все условия» или «Любое условие»).

Элементы всех типов, за исключением «Фраза» и «Близость» принимают смесь отдельных слов и фраз, заключённых в двойные кавычки. Поиск с использованием словоформ и символов подстановки в этом случае выполняется также, как это происходит при простом поиске.

Поиск с использованием выражений типа «Фраза» и «Близость»

В обоих типах выражений поиск группы слов выполняется в соответствии с указанием их относительного расположения. Разница лишь в том, что порядок следования слов чётко определяется лишь для выражений типа «Фраза», и не имеет жёсткой фиксации в выражениях типа «Близость». Однако в обоих случаях между словами можно допустить наличие некоторого числа (допуск) несовпадающих с поиском слов. Для элементов поиска типа «Фраза» число таких слов по умолчанию равно нулю (точное совпадение). Для элементов поиска типа «Близость» это число равно десяти (значит совпадение будет зафиксировано, если поисковые слова будут найдены в окне из двенадцати слов).

Примеры: поиск по фразе «quick fox» с допуском 0 совпадёт с фразой «quick fox», но не совпадёт с фразой «quick brown fox». Поиск с допуском 1 уже зафиксирует совпадение в предыдущей фразе, но не с фразой «fox quick». Поиск по близости найдёт совпадение с фразой «quick fox» с допуском по умолчанию, а также с фразой «a fox is a cunning and quick animal».

Допуск можно настраивать с помощью поля счётчика слева от поля ввода

Сложный поиск: вкладка «Фильтр»

Эта вкладка диалогового окна разделена на несколько частей, которые позволяют фильтровать результаты поиска в соответствии с несколькими критериями

  • Первая часть позволяет настроить фильтр результатов по дате последнего изменения. Можно указывать как минимальную, так и максимальную дату. Исходные значения заданы по самому старому и самому новому документу в индексе.

  • Вторая часть позволяет фильтровать результаты по размеру файла. Имеется два поля для ввода минимального и максимального значения. Введите десятичное число. Можно использовать следующие суффиксы в качестве множителей: k/K, m/M, g/G, t/T для 10E3, 10E6, 10E9, 10E12, соответственно.

  • Третья часть позволяет фильтровать результаты поиска по их MIME-типам или MIME-категориям (например: медиа/текст/сообщение/и т.д.).

    Типы можно перемещать между двумя полями для указания какие из них необходимо включить или исключить из поиска.

    Состояние выбора типа файлов можно сохранить в качестве значения по умолчанию (фильтр типа файлов не будет активироваться при запуске программы, но списки будут доступны для восстановления состояния).

  • Нижняя часть позволяет ограничить результаты поиска поддеревом индексируемой области. Можно установить флажок «Обратить», чтобы поиск выполнялся по файлам не входящим в указанное поддерево. Если фильтр по каталогам часто используется для поиска по большим поддеревьям файловой системы, то имеет смысл настроить несколько индексов для обеспечения лучшей производительности.

    Для фильтрации можно использовать относительные/частичные пути. Например, при вводе dirA/dirB поиск будет выполнятся как для /dir1/dirA/dirB/myfile1, так и для /dir2/dirA/dirB/someother/myfile2.

История сложного поиска

При выполнении сложного поиска запоминаются последние 100 выполненных поисковых запросов. По сохранённым поисковым запросам можно переходить с помощью клавиш со стрелками вверх и вниз, когда курсор находится на диалоговом окне сложного поиска.

Историю сложного поиска можно удалить вместе с историей простого поиска выбором элемента меню «Файл»«Стереть историю поиска».

3.2.10.  Инструмент обзора терминов

Recoll автоматически управляет дополнением слов поискового запроса их производными словоформами (например: формами множественного/единственного числа, формами спряжения глагола). Но существуют случаи, когда точный элемент поиска неизвестен . Например, пользователь может забыть орфографию слова или может помнить только начало имени.

Если в документах не будет обнаружено совпадений, поиск будет предлагать слова для замены с различными орфографическими вариантами. В некоторых случаях в индексе могут присутствовать варианты слов с правильной и неправильной орфографией, и поиск именно по этим вариантам может представлять отдельный интерес.

Инструмент обзора терминов (запускается щелчком по значку на панели инструментов или из элемента «Обозреватель терминов» меню «Инструменты») может использоваться для поиска по всему списку слов индекса или (более позднее добавление) отображать некоторые статистические данные, а также другую информацию по индексу. Он имеет несколько режимов работы:

«Маски»

В этом режиме работы можно вводить строку поиска с символами подстановки, подобными использующимся в консоли (*, ?, []). Например: xapi* отобразит все элементы поиска из индекса, которые начинаются с xapi. (С более подробной информацией по символам подстановки можно ознакомиться здесь).

«Регулярные выражения»

В этом режиме в качестве ввода принимаются регулярные выражения. Пример: word[0-9]+. В выражении задано начало строки. Например: при указании слова press с поисковым запросом совпадёт слово pression, но не expression. Для совпадения с этим вариантом можно использовать поисковый запрос .*press, но нужно понимать, что это приведёт к полному сканированию слов индекса, что может занять немало времени.

«Однокоренные слова»

В этом режиме выполняется стандартный поиск по вариантам различных словоформ, реализуемый при обработке ввода пользователя, в связи с чем именно демонстрация данного процесса представляет наибольшую пользу.

«Написание/произношение»

В этом режиме слово вводится в предполагаемой пользователем орфографии, а затем Recoll пытается подобрать к нему наиболее подходящие слова в индексе. Здесь применяется приложение проверки орфографии Aspell, которое для работы этого механизма необходимо установить в системе (если документ содержит не ascii-символы, то для работы с поддержкой UTF-8 в Recoll потребуется версия aspell не ниже 0.60). Для построения словаря из слов индекса (операция выполняется на заключительном этапе прохода индексирования) используется язык, указанный в локали. Можно лишь догадываться какой букет невероятных приключений ожидает пользователя, если ему доведётся перепутать языки.

«Показать статистику индекса»

Отображает длинный список скучных числовых характеристик индекса

«Показать непроиндексировавшиеся файлы»

Выводит файлы, при индексировании которых произошла ошибка. Обычно ошибка происходит, когда recollindex не может преобразовать эти файлы в текстовый формат.

Важно понимать, что в тех случаях, когда в запросе Recoll не определено начало строки поиска (например, в выражениях с символами подстановки в виде *coll), поиск по словоформам может занимать значительное время, поскольку предполагает поиск по полному списку словоформ. В настоящее время поиск по словоформам ограничен 10000 результатами для поиска с применением символов подстановки и регулярных выражений. Это огнаничение можно изменить в конфигурационном файле.

Двойной щелчок по слову в списке результатов добавляет его в поле простого поиска. Также можно использовать функции копирования/вставки текста между списком результатов и любым из полей ввода (при этом выполняется соответствующая обработка переводов строк).

3.2.11. Несколько индексов

В соответствующем разделе выше можно ознакомиться с общими положениями, касающимися использования нескольких индексов. Здесь будут описаны только аспекты, касающиеся графического интерфейса recoll.

Экземпляр программы recoll всегда привязан к главному индексу, который обновляется при выполнении соответствующей команды в меню «Файл», но может использовать любое количество внешних индексов Recoll для поиска. Внешние индексы можно выбрать на вкладке «Внешние индексы» в диалоговом окне «Настройки», которое открывается либо через: «Настройки»«Настройки интерфейса»«Настройка внешнего индекса», либо через «Запрос»«Настройка внешнего индекса».

Выбор индекса осуществляется в два этапа. Сначала необходимо определить все используемые индексы, а затем набор индексов, используемых для поиска. Эти параметры сохраняются при всяком выполнении программы (хранятся отдельно для каждой конфигурации Recoll). Общий набор индексов обычно довольно стабилен, хотя список активных индексов может меняться относительно часто.

Основной индекс (определяемый в RECOLL_CONFDIR) активен всегда. Если это нежелательно, можно построить основную конфигурацию на базе пустого каталога и индексировать его.

Когда в набор добавляется новый индекс, можно выбрать либо конфигурационный каталог Recoll, либо каталог индекса Xapian. В первом случае, каталог индекса Xapian будет получен из выбранной конфигурации.

Если внешний индекс фактически расположен в томе, смонтированном с другого компьютера, и ссылается на удалённые файлы, то может возникнуть необходимость в настройке путей, чтобы они совпадали с локальными файлами (для открытия документов). Это можно сделать с помощью средства корректировки путей.

Поскольку построение набора всех индексов при работе в графическом интерфейсе может оказаться весьма утомительно, для построения исходного набора можно использовать переменную окружения RECOLL_EXTRA_DBS. Обычно эта задача выполняется системным администратором, чтобы её не нужно было выполнять каждому пользователю. Эта переменная должна определять список каталогов индекса, разделённых двоеточиями, например:

export RECOLL_EXTRA_DBS=/некий/путь/xapiandb:/некая/другая/бд

На ОС Windows, в качестве разделителей вместо двоеточий нужно использовать точку с запятой (;).

Имеется другая переменная окружения, RECOLL_ACTIVE_EXTRA_DBS, которая позволяет добавлять индексы к списку активных индексов. Эта переменная была предложена и реализована пользователем Recoll. Главным образом, полезна при использовании сценариев монтирования внешних томов с индексами Recoll. При использования RECOLL_EXTRA_DBS и RECOLL_ACTIVE_EXTRA_DBS можно добавлять и активировать индексы для монтируемых томов при запуске recoll. Недоступные индексы при запуске будут автоматически деактивированы.

3.2.12. История документов

Фактически просматриваемые документы (с помощью встроенной функции просмотра или внешнего инструмента) вводятся в сохраняемую историю документов.

Отобразить список истории можно с помощью элемента меню «Инструменты»/«История документов».

Удалить документ из истории можно с помощью элемента меню «Файл» «Стереть историю документов».

3.2.13. Сортировка результатов поиска и устранение дубликатов

Документы в списке результатов обычно упорядочиваются по соответствию. Другой порядок сортировки можно указать либо с помощью вертикальных стрелок в панели графического интерфейса для сортировки по дате, либо при переключении на отображение в виде электронной таблицы щелчком по любому её заголовку. Выбранный внутри таблицы результатов порядок сортировки остаётся активным и при переключении обратно к списку результатов, но только до тех пор, пока не будет нажата одна из вертикальных стрелок, а также и по снятии этого нажатия (происходит возврат к сортировке по соответствию).

Параметры сортировки запоминаются между вызовами программы, но сортировка результата обычно всегда неактивна при её запуске. Существует возможность сохранения состояния активности сортировки между вызовами программы путём установки флажка «Запомнить порядок сортировки результатов» в параметрах.

Также можно скрыть дублирующиеся элементы внутри списка результатов (документы с содержимым идентичным отображаемому). Проверка идентичности проводится на основе MD5-хэша контейнера документа, а не только на основе содержимого текста (чтобы, например, текстовый документ с добавлением изображения не оказался дубликатом документа содержащего только текст). Запрет отображения дубликатов контролируется с помощью соответствующего элемента управления в диалоговом окне конфигурации графического интерфейса, и по умолчанию обычно отключен.

Когда документ в результатах поиска имеет скрытые дубликаты, на этом элементе списка результатов будет отображаться ссылка «Дубликаты». При щелчке по этой ссылке будут отображены пути (URL-адреса + I-пути) к дублирующим элементам.

3.2.14. Клавиши быстрого доступа

Ряд стандартных действий в графическом интерфейсе может осуществляться с помощью клавиш быстрого доступа. В Recoll 1.29, многие значения этих сочетаний можно настроить в диалоговом окне настройки интерфейса. Большая часть настроек относится к заданному контексту (например, действует в окне просмотра, в таблице результатов).

Большую часть клавиш быстрого доступа можно изменить на более предпочитаемые последовательности с помощью редактора сочетаний клавиш в диалоге настройки интерфейса: «Настройки»«Настройка интерфейса»«Сочетания клавиш». Для изменения сочетания необходимо щёлкнуть по соответствующей ячейке в столбце «Сочетание», и ввести желаемую последовательность.

Таблица 3.1. Сочетания клавиш

Описание Значение по умолчанию
Контекст: почти везде
Выход из программы Ctrl+Q
Контекст: сложный поиск
Загрузка следующего элемента из истории поиска Стрелка вверх
Загрузка предыдущего элемента из истории поиска Стрелка вниз
Контекст: главное окно
Очистить поиск. При этом курсор ввода перемещается в поле ввода простого поиска и удаляется текущий текст Ctrl+S
Переместить курсор ввода в область поля ввода поиска без удаления текущего текста Ctrl+L
Переместить курсор ввода в область поля поиска без удаления текущего текста Ctrl+Shift+S
Переключить вывод текущего результата поиска на отображение в виде таблицы или списка Ctrl+T
Контекст: основное окно при отображении результатов в виде таблицы
Переместить курсор ввода на выделенную строку в таблице, либо на первую строку, если ни одна из них не выделена Ctrl+R
Перейдите на строку 0-9 или a-z в таблице Ctrl+[0-9] или Ctrl+Shift+[a-z]
Отмена текущего выделения Esc
Контекст: окно просмотра
Закрыть окно просмотра Esc
Закрыть текущую вкладку Ctrl+W
Открыть диалоговое окно для печати содержимого текущей вкладки Ctrl+P
Загрузить следующий результат поиска из списка в текущую вкладку Shift+Down
Загрузить следующий результат поиска из списка в текущую вкладку Shift+Up
Контекст: таблица результатов
Копировать текст из выделенного документа в буфер обмена Ctrl+G
Копировать текст из выделенного документа в буфер обмена и выйти из Recoll Ctrl+Alt+Shift+G
Открыть текущий документ Ctrl+O
Открыть текущий документ и выйти из Recoll Ctrl+Alst+Shift+O
Открыть полный просмотр текущего документа Ctrl+D
Переключить отображение имён столбцов Ctrl+H
Показать список фрагментов (ключевых слов в контексте) для текущего документа Ctrl+E
Переключить отображение букв/номеров строки Ctrl+V
Контекст: окно фрагментов
Закрыть окно фрагментов Esc
Поиск в списке фрагментов (метод №1) Ctrl+F
Поиск в списке фрагментов (метод №2) /
Найти следующий экземпляр поискового запроса F3
Найти предыдущий экземпляр поискового запроса Shift+F3

3.2.15. Советы по поиску

Слова и расширение поиска

Завершение слова. При вводе в поле простого поиска появляется выпадающее меню с отображением возможных завершений для текущей строки. Значения, предваряемые значком с изображением часов, извлечены из истории, а строки с изображением увеличительного стекла взяты из состава слов индекса. Отображение этого меню можно отключить в настройках.

Копирование новых слов из результата поиска или текста в окне просмотра. Двойной щелчок по слову в списке результатов или в окне просмотра приводит к копированию его в поле ввода простого поиска.

Символы подстановки. Символы подстановки можно использовать со словами в поиске во всех его формах. Более подробная информация по символам подстановки.

Автоматическая подстановка суффиксов.  Такие слова, как odt или ods могут автоматически переводиться в выражения на языке запроса ext:xxx. Включить эту функцию можно в графическом интерфейсе на панели параметров поиска.

Отключение поиска по словоформам.  Ввод слова с прописной буквы в любом поле поиска отключает поиск по словоформам (при вводе слова Garden вместо garden поиск по слову gardening выполняться не будет). Это единственный случай, при котором регистр символа играет особую роль при выполнении поиска с помощью Recoll. Поиск по словоформам может быть также отключен в настройках, где можно изменить и язык словоформ.

Поиск сопутствующих документов. При выборе элемента «Найти похожие документы» контекстного меню результатов поиска составляется набор «характерных» слов из текущего результата, которые затем копируются в поле ввода простого поиска. Заданный список можно подправить и запустить поиск документов, которые могут иметь отношение к текущему результату.

Имена файлов. Имена файлов в процессе индексирования добавляются в качестве элементов поиска. Поэтому можно указывать их в обычных полях поиска как обычные слова (изначально Recoll индексировал все каталоги в пути к файлу в качестве элементов поиска, но впоследствии эта практика была прекращена ввиду отсутствия ощутимой пользы). С другой стороны, можно организовать специализированный поиск файлов, который будет искать только имена файлов, в связи с чем будет работать быстрее обычного поиска, особенно при использовании символов подстановки.

Работа с фразами и поиском по близости

Поиск по фразам. Поисковый запрос для поиска по фразе может выглядеть как несколько слов, заключённых в двойные кавычки. Пример: Запрос "user manual" будет выполнять поиск только слова «user», непосредственно за которым следует слово «manual». С тем же результатом можно использовать поле «Фраза» в диалоговом окне сложного поиска. Фразы можно вводить параллельно с обычными словами во все поля ввода простого или сложного поиска, за исключением поля «Фраза».

Поиск по близости. Поиск по близости отличается от поиска по фразам тем, что не обязывает строго придерживаться порядка следования слов. Поиск по близости можно задать путём указания типа «Близости» в сложном поиске или подстановкой буквы «p» в конец выражения. Пример: запрос "user manual"p совпадает также и с фразой "manual user". См. также раздел модификаторов из документации к языку запросов.

Автофраза. Этот параметр можно задать в диалоговом окне настройки. При его включении происходит автоматическое построение фраз и добавление их к простым запросам, в случае выполнения поиска в режиме «Любые слова». Это не приведёт к радикальным изменениям результатов поиска, однако существенно поднимет планку соответствия для результатов, в которых поисковый запрос составляет фразу. Например: поиск по virtual reality обнаружит соответствие во всех документах, содержащих либо virtual, либо reality, либо оба слова сразу, но при этом документы, содержащие фразу «virtual reality» окажутся выше по списку.

Поиск по фразе может работать медленнее, если использовать распространённые слова. Если параметр «Автофраза» активирован, очень распространённые слова будут удаляться из автоматически конструируемых фраз. Порог для удаления слов устанавливается в настройках поиска.

Фразы и аббревиатуры. Сокращения с точками, например I.B.M., также автоматически индексируются в виде слов без точек: IBM. Поиск по слову во фразе (например: "the IBM company") совпадёт с аббревиатурой, содержащей точки, только при увеличении погрешности фразы (в окне сложного поиска или с помощью модификатора языка поиска o). Полностью идентичные слова будут совпадать в обычном порядке.

Прочие

Работа с полями.  Можно использовать язык запросов и спецификации полей для поиска только определённых частей документов. Это представляет особенную пользу в работе с электронными письмами, например, только для поиска электронных писем только от конкретного адресата: search tips from:helpfulgui

Настройка столбцов таблицы результатов поиска.  При отображении результатов поиска в режиме таблицы щелчком правой клавиши мыши по заголовку таблицы можно вывести контекстное меню, с помощью которого настраивается отображение столбцов. Можно перетаскивать заголовки таблицы для настройки порядка их отображения. Можно щёлкать по ним для сортировки по отображаемому в столбце полю. А также можно сохранять полученные результаты в CSV-формат.

Изменение геометрии графического интерфейса. Конфигурацию отображения графического интерфейса можно менять в широких пределах путём перетаскивания панелей управления в одну из сторон (их расположение запоминается между сеансами), а также перемещением фильтров категорий к меню (можно настроить в окне «Настройки»«Настройка интерфейса»«Интерфейс пользователя»).

Описание запроса. Полное описание поискового запроса, включая поиск по словоформам и использование логических операторов, можно получить щелчком по заголовку результатов поиска.

История сложного поиска. Вывод любого из последних ста запросов сложного поиска можно получить при работе в окне сложного поиска нажатием на клавиши со стрелками вверх и вниз.

Принудительное открытие окна предпросмотра. Можно использовать сочетание Shift+щелчок по ссылке Просмотр списка результатов для принудительного создания нового окна просмотра вместо новой вкладки в существующем окне.

3.2.16. Сохранение и восстановление запросов

При выполнении поиска (как простого, так и сложного) сохраняется история запросов, но число этих записей ограничено: старые запросы в конце концов удаляются. Также иногда бывает трудно найти важные запросы среди всех остальных. Поэтому существует возможность сохранения запросов обоих типов в файлы непосредственно из меню графического интерфейса: «Файл»«Сохранить последний запрос» / «Загрузить последний запрос»

По умолчанию для сохранения запросов используется подкаталог текущего конфигурацинного каталога, запросы сохраняются в виде обычных файлов и могут записываться или перемещаться куда угодно.

Некоторые параметры сохранённого запроса задаются в настройках (например, «Автофраза» или активные внешние индексы) и при загрузке запроса могут отличаться от настроек, существовавших во время его сохранения. В таком случае Recoll предупредит о наличии расхождений, но не будет изменять пользовательские настройки.

3.2.17. Настройка интерфейса поиска

Некоторые параметры интерфейса поиска можно настраивать через элемент «Настройка интерфейса» в меню «Настройки».

В диалоговом окне находится несколько вкладок, относящихся к самому интерфейсу, параметрам поиска и возвращению результатов, а также к применяемым в поиске индексам.

Параметры интерфейса пользователя: 

  • Выделение слов поискового запроса: Слова из поискового запроса выделяются в выборках списка результатов и окна просмотра. Здесь же можно выбрать и цвет. Любая строка обозначения цвета в Qt должна работать (например, red, #ff0000). По умолчанию используется blue.

  • Стили CSS: Имя текстового css-файла стилей Qt, который применяется ко всему приложению Recoll при загрузке. Значение по умолчанию отсутствует, но в каталоге /usr/share/recoll/examples находится базовый файл стилей (recoll.qss). При помоши файла стилей можно менять большинство графических параметров recoll: цвета, шрифты, и т.д. См. несколько простых примеров в образце файла.

    Здесь важно понимать, что параметры (например: цвет фона), заданные в стилях графического интерфейса Recoll переопределяют глобальные настройки системы и нередко способствуют появлению странных побочных эффектов: например, если установить светлый цвет переднего плана и тёмный цвет фона в настройках рабочего стола, то в css-стилях Recoll устанавливается только цвет фона, и поскольку он тоже светлый, текст в графическом интерфейсе Recoll будет отображаться светлым шрифтом на светлом фоне.

  • Предельный размер текста, выбранного для просмотра Выделение элемента поиска в тексте перед вставкой в окно просмотра требует выполнения значительного объёма обработки, которая для ускорения работы может отключаться при превышении текстом определённого размера.

  • Предпочитать HTML простому тексту при просмотре. При включении данного параметра в окне просмотра Recoll будет отображаться HTML. Если при отображении HTML в Qt возникают проблемы, то данный параметр можно отключить для вывода простого текста.

  • Активировать ссылки в режиме просмотра. При установке параметра в Recoll ссылки HTTP, найденные внутри простого текста, преобразуются в настоящие HTML-ссылки, которые можно открыть в браузере по умолчанию щелчком по ссылке в окне просмотра.

  • Стиль отображения строк HTML в простом тексте: при отображении простого текста в окне просмотра выполняется попытка сохранить часть переносов строк и отступов, имеющихся в исходном тексте. Для этого могут использоваться либо HTML-теги PRE, которые хорошо сохраняют отступы, но приводят к горизонтальному прокручиванию длинных строк, либо теги BR на переносах строк в исходном тексте, которые позволяют редактору вставлять свои переносы строк по ширине окна, однако приводят к потере части исходных отступов. Третий параметр доступен со времени последних выпусков и будет, вероятно, лучшим из них: использовать теги PRE при переносе строк.

  • Выбор приложений-редакторов: открывает диалоговое окно, в котором можно выбрать приложение для использования с каждым MIME-типом. По умолчанию для этого используется утилита xdg-open, но в данном диалоговом окне можно переопределить это значение и устанавливать исключения для MIME-типов, которые будут открываться в соответствии с настройками Recoll. Это полезно для передачи таких параметров, как номер страницы или строка поиска в поддерживающие их приложения (например, evince). Однако с xdg-open так сделать не получится, поскольку данное приложение поддерживает передачу только одного из этих параметров.

  • Отключить автодополнение Qt в строке поиска: этот параметр отключает вывод всплывающего окна автодополнения. В этом случае автодополнение можно будет открыть либо вводом пробела в области поиска, после чего откроется полная история, либо нажатием кнопки с изображением часов справа от этого поля.

  • Стиль отображения фильтров: здесь можно выбрать отображение категорий документов в виде списка, ряда кнопок или меню.

  • Начать с режима простого поиска: здесь в качестве типа поиска при запуске программы можно выбрать либо простой поиск, либо фиксированный тип поиска (например, «Язык запросов», либо тот тип поиска, который использовался при последнем завершении программы).

  • Открывать диалог сложного поиска при запуске: При частом использовании этого диалогового окна имеет смысл установить флажок, после чего диалог будет открываться автоматически при запуске recoll.

  • Запомнить порядок сортировки результатов: При установке данного параметра Recoll запоминает заданный механизм сортировки между сеансами работы программы. Обычно при запуске сортировка отключена.

Параметры списка результатов: 

  • Число результатов на странице

  • Шрифт списка результатов: Список результатов обычно включает достаточно большое количество информации, в силу чего может возникнуть желание настроить шрифт и/или его размер. Остальные шрифты, используемые в Recoll, определяются общей конфигурацией Qt (воспользуйтесь командой qtconfig).

  • Изменить строку форматирования параграфа списка результатов поиска: позволяет изменить внешний вид каждого элемента списка результатов поиска. См. раздел настройки списка результатов.

  • Редактировать вставку html-заголовка страницы результатов: позволяет определить формат текста, вставляемого в заголовок HTML-страницы результатов. Более подробная информация доступна в разделе настройки списка результатов.

  • Формат даты: позволяет указать формат для отображения даты внутри списка результатов. Строка должна оформляться в виде строки вывода strftime() (man strftime).

  • Условный разделитель выдержек: здесь для синтетических описаний, выстраиваемых из данных индекса, которые обычно создаются из нескольких фрагментов различных частей документа, определяется разделитель фрагментов текста, в качестве которого по умолчанию используется многоточие.

Параметры поиска: 

  • Скрывать дубликаты: принимает решение о том являются ли элементы списка результатов одинаковыми документами, найденными в разных местах.

  • Язык словоформ: поиск по словоформам имеет сильную зависимость от языка документа. В этом списке можно выбирать базы данных словоформ, которые были построены в процессе индексирования (эта настройка выполняется в главном конфигурационном файле) или добавлены позднее с помощью команды recollindex -s (См. руководство по recollindex). Динамически добавленные языки словоформ будут удалены при следующем проходе индексирования, если они не были добавлены в конфигурационный файл.

  • Автоматически добавлять фразу при простом поиске: фраза будет автоматически построена и добавлена в простой поиск при работе в режиме «Любые слова». Это увеличит число соответствий в результатах для элементов поиска, построенных в виде фразы (смежное расположение слов в определённом порядке).

  • Процент порогового значения частоты автофраз: очень часто встречающиеся слова не должны включаться в автофразы для поиска по соображениям производительности. Параметр определяет предельное значение процента (процент документов, содержащих слово).

  • Заменять описания из документов: определяет необходимость создания и отображения синтетического описания вместо настоящего описания найденного в самом документе.

  • Составлять описания на лету: контролирует необходимость построения описания документов (в виде набора фрагментов) при отображении списка результатов. Описания конструируются путём извлечения контекста из информации о документе, а также в непосредственной близости от элементов поиска.

  • Размер создаваемого описания: настроить по вкусу…

  • Число слов контекста в описании: сколько слов будет отображаться вокруг каждого совпадения элемента поиска.

  • Распознавание типа файлов при помощи файла сигнатур (magic file): список слов, которые автоматически превращаются в расширение имени файла ext:xxx при запуске запроса на языке запросов (например: doc xls xlsx...). Это позволит сэкономить время пользователям, часто использующим типы файлов при поиске.

Внешние индексы: Это окно позволяет выполнить обзор дополнительных индексов, которые предполагается использовать в поиске. Внешние индексы определяются по каталогам своих баз данных (например:/home/someothergui/.recoll/xapiandb, /usr/local/recollglobal/xapiandb).

После выбора индексы появляются в списке Внешних индексов, где в любой момент можно выбрать используемые индексы путём установки или снятия флажков.

Основная база данных (в которую индексируются данные текущей конфигурации) всегда неявно активна. Если это нежелательно, можно построить основную конфигурацию на базе пустого каталога и индексировать пустой каталог. Также может потребоваться альтернативный индексатор для организации способа очистки индекса от устаревших данных,

Формат списка результатов

Recoll обычно использует полнофункциональный HTML-процессор для отображения списка результатов и окна фрагментов. В зависимости от версии, эта функция может быть основана либо на Qt WebKit, либо на Qt WebEngine. При этом возможна полная настройка отображения списка результатов с поддержкой CSS и Javascript.

Также имеется возможность собрать Recoll на базе более простого виджета отображения HTML Qt QTextBrowser, что может быть необходимо, если вышеупомянутые виджеты не портированы в систему, а также для уменьшения размера приложения и его зависимостей. В этом случае возможности по настройке параметров списка будут значительно более ограничены, однако сохраняется способность задавать как данные, отображаемые в каждом результате, так и способ их отображения.

Настроить представление списка результатов можно при помощи следующих двух элементов:

  • Формат абзаца

  • Код HTML внутри раздела заголовка. Применяется также и для окна фрагментов.

Формат параграфа и заголовка можно изменять на вкладке «Список результатов» диалога «Настройка интерфейса».

HTML-заголовок используется как для списка результатов, так и для окна фрагментов. Список фрагментов представлен в виде таблицы и имеет атрибут списка фрагментов. Каждый абзац в списке результатов является таблицей с классом respar, что можно изменить путём смены формата абзацев.

Страница на веб-сайте Recoll, повествующая о настройке списка результатов содержит несколько примеров форматирования.

Формат абзаца

Это произвольная строка HTML, которая формируется для отображения результатов путём подстановки параметров в стиле printf с применением спецификаторов %.

Примечание

Для экранирования символов % во вводе необходимо представить их в виде %%. Например, <table style="width: 100%;"> необходимо ввести в виде <table style="width: 100%%;">.

При этом для подстановки применяются следующие спецификаторы:

%A

Описание. При отсутствии %s содержит либо атрибут описания документа, при его наличии, либо синтетическое описание фрагментов. В случае наличия %s представляет собой либо описание документа, либо пустое поле.

%D

Дата.

%I

Имя изображения значка. Обычно определяется по MIME-типу. Ассоциации определяются в конфигурационном файле mimeconf. При обнаружении миниатюры файла, расположенной согласно стандарту Freedesktop, эта миниатюра будет отображаться вместо значка.

%K

Ключевые слова.

%L

Предварительный просмотр, изменение, а иногда и ссылки на фрагменты.

%M

MIME-тип.

%N

Номер результата на странице результатов.

%P

Url-адрес родительского каталога. При использовании вложенного документа применяется родительский каталог файла-контейнера верхнего уровня.

%R

Процент совпадения.

%S

Информация о размере.

%s

Синтетическое описание «фрагментов» (найденный в документе текст вокруг элементов поиска).

%T

Заголовок (если задан), либо имя файла.

%t

Заголовок или пустое поле.

%(имя файла)

Имя файла.

%U

Url-адрес

В дополнение к показанным выше предустановленным значениям, все строки вида %(fieldname) заменяются на значение поля с именем fieldname для данного документа. Этот способ позволяет получить доступ только к сохранённым полям, тогда как значение индексированного, но не сохранённого поля на данном этапе процессу поиска неизвестно (см. конфигурация поля). В настоящее время не так много полей сохраняется по умолчанию отдельно от указанных выше значений (только author и filename). Поэтому использование данной возможности потребует выполнения дополнительной настройки. Отличным кандидатом для использования в этом качестве могло бы стать поле recipient, создаваемое обработчиком ввода сообщения.

Ссылки «Просмотр», «Открыть», а также ссылки на фрагменты имеют следующий формат < href="P%N">, < href="E%N"> и < href="A%N">, где вместо docnum (%N) подставляется номер документа на странице результатов).

Адрес ссылки, определяемый как «F%N», открывает документ, входящий в состав родительского каталога %P, в каковом случае в окне менеджера файлов обычно открывается папка, содержащая файл контейнера. Например:

<a href="F%N">%P</a>

Адрес ссылки в виде R%N|scriptname запускает соответствующий сценарий, который открывает файл результата (у вложенного документа сценарий открывает родителя верхнего уровня). См. раздел по определению сценариев. Обратите внимание на то, что значение поля scriptname должно соответствовать значению поля Name файла рабочего стола, а не его имени.

Значение формата строки абзаца по умолчанию:

            "<table class=\"respar\">\n"
            "<tr>\n"
            "<td><a href='%U'><img src='%I' width='64'></a></td>\n"
            "<td>%L &nbsp;<i>%S</i> &nbsp;&nbsp;<b>%T</b><br>\n"
            "<span style='white-space:nowrap'><i>%M</i>&nbsp;%D</span>&nbsp;&nbsp;&nbsp; <i>%U</i>&nbsp;%i<br>\n"
            "%s %A %K</td>\n"
            "</tr></table>\n"
            

Пример для иллюстрации использования более веб-ориентированного формата:

            <u><b><a href="P%N">%T</a></b></u><br>
            %A<font color=#008000>%U - %S</font> - %L
            

Обратите внимание на то, что в примере выше ссылка на P%N для просмотра создаётся либо с использованием заголовка, либо в более аккуратном исполнении:

            <img src="%I" align="left">%L <font color="#900000">%R</font>
            &nbsp;&nbsp;<b>%T&</b><br>%S&nbsp;
            <font color="#808080"><i>%U</i></font>
            <table bgcolor="#e0e0e0">
            <tr><td><div>%A</div></td></tr>
            </table>%K
            

Эти и несколько других подобных примеров размещены на веб-сайте с изображениями для иллюстрации их внешнего вида.

Также можно определить значение разделителя фрагментов, применяющегося при составлении раздела описания.

3.3. Поиск с помощью KIO slave в KDE

KIO slave для Recoll также может выполнять поиск с помощью Recoll путём ввода соответствующего URL-адреса в диалоговом окне открытия файла KDE или Dolphin. Результаты отображаются в виде элементов каталога.

Инструкции для сборки данного модуля находятся в дереве исходников. См.: kde/kio/recoll/00README.txt. Некоторые дистрибутивы Linux включают в себя пакет модуля kio-recoll, поэтому есть смысл проверить это перед тем, как погружаться в процесс сборки. Может быть пакет уже ждёт вас готовый к установке в один клик.

3.4. Поиск в командной строке

Существует несколько вариантов получения результатов поиска в виде потока текстовых данных без использования графического интерфейса:

  • С помощью параметра командной строки -t программы recoll, либо recollq (по ссылке).

  • С помощью самой программы recollq.

  • Путём создания программы на Python, с помощью Recoll Python API.

Первые два метода работают совершенно одинаково принимая/ работая с одинаковыми аргументами (за исключением дополнительного параметра -t, передаваемого recoll). Передаваемый запрос указывается в составе аргументов команды.

recollq не всегда собирается по умолчанию. Для его сборки можно использовать файл Makefile в каталоге query. Это очень простая программа и при наличии определённого навыка в c++, может оказаться весьма полезной для подгонки формата вывода под свои нужды. Помимо несложной настройки команда recollq действительно полезна только при отсутствии в системе библиотек Qt. В противном случае она лишь дублирует recoll -t.

У recollq имеется страница руководства. Эта страница приводится ниже:

recollq: usage:
 -P: Show the date span for all the documents present in the index.
 [-o|-a|-f] [-q] <query string>
 Runs a recoll query and displays result lines. 
  Default: will interpret the argument(s) as a xesam query string.
  Query elements: 
   * Implicit AND, exclusion, field spec:  t1 -t2 title:t3
   * OR has priority: t1 OR t2 t3 OR t4 means (t1 OR t2) AND (t3 OR t4)
   * Phrase: "t1 t2" (needs additional quoting on cmd line)
 -o Emulate the GUI simple search in ANY TERM mode.
 -a Emulate the GUI simple search in ALL TERMS mode.
 -f Emulate the GUI simple search in filename mode.
 -q is just ignored (compatibility with the recoll GUI command line).
Common options:
 -c <configdir> : specify config directory, overriding $RECOLL_CONFDIR.
 -C : collapse duplicates
 -d also dump file contents.
 -n [first-]<cnt> define the result slice. The default value for [first]
    is 0. Without the option, the default max count is 2000.
    Use n=0 for no limit.
 -b : basic. Just output urls, no mime types or titles.
 -Q : no result lines, just the processed query and result count.
 -m : dump the whole document meta[] array for each result.
 -A : output the document abstracts.
    -p <cnt> : show <cnt> snippets, with page numbers instead of the concatenated abstract.
    -g <cnt> : show <cnt> snippets, with line numbers instead of the concatenated abstract.
 -S fld : sort by field <fld>.
   -D : sort descending.
 -s stemlang : set stemming language to use (must exist in index...).
    Use -s "" to turn off stem expansion.
 -T <synonyms file>: use the parameter (Thesaurus) for word expansion.
 -i <dbdir> : additional index, several can be given.
 -e use url encoding (%xx) for urls.
 -E use exact result count instead of lower bound estimate.
 -F <field name list> : output exactly these fields for each result.
    The field values are encoded in base64, output in one line and 
    separated by one space character. This is the recommended format 
    for use by other programs. Use a normal query with option -m to 
    see the field names. Use -F '' to output all fields, but you probably
    also want option -N in this case.
   -N : with -F, print the (plain text) field names before the field values.
 --extract_to <filepath> : extract the first result to filepath, which must not exist.
      Use a -n option with an offset to select the appropriate result.
      

Пример работы:

recollq 'ilur -nautique mime:text/html'
Recoll query: ((((ilur:(wqf=11) OR ilurs) AND_NOT (nautique:(wqf=11) OR nautiques OR nautiqu OR nautiquement)) FILTER Ttext/html))
4 results
text/html       [file:///Users/dockes/projets/bateaux/ilur/comptes.html]      [comptes.html]  18593   bytes   
text/html       [file:///Users/dockes/projets/nautique/webnautique/articles/ilur1/index.html] [Constructio...
text/html       [file:///Users/dockes/projets/pagepers/index.html]    [psxtcl/writemime/recoll]...
text/html       [file:///Users/dockes/projets/bateaux/ilur/factEtCie/recu-chasse-maree....
      

3.5. Язык запросов

Язык запросов Recoll изначально основан на уже несуществующей ныне спецификации языка поиска Xesam. Он позволяет выполнять логический поиск как по основному тексту, так и по специальным полям, а также имеет много дополнительных функций, которые в целом равноценны использованию графического интерфейса сложного поиска.

Обработчик языка запросов активируется при выборе Языка запросов в качестве режима поиска в поле ввода на вкладке простого поиска в графическом интерфейсе. Подобным образом его можно использовать при выполнении поиска в командой строке, а также при использовании KIO slave или WEB UI.

Если применение языка запросов приводит к неожиданным результатам и возникают вопросы к содержимому строки поиска, то в верхней части списка результатов поиска можно нажать на ссылку «Показать запрос» для просмотра точной формы запроса, составленной с помощью Xapian.

3.5.1. Базовый синтаксис

Ниже приведён пример запроса, который мы сейчас подробно разберём:

        author:"john doe" Beatles OR Lennon Live OR Unplugged -potatoes
      

Здесь будет выполняться поиск всех документов, у которых в поле автора указано имя John Doe (более точно определяется в зависимости от типа документа, например, для сообщения электронной почты это будет заголовок From:) и содержащих слова beatles или lennon, а также live или unplugged, но не potatoes (в любой части документа).

Элемент запроса составляется из необязательного указания поля и его значения, разделённых двоеточием (разделитель поля является последним двоеточием в элементе). Примеры:

  • Eugenie
  • author:balzac
  • dc:title:grandet
  • dc:title:"eugenie grandet"

Присутствие двоеточия означает «содержит». Язык Xesam определяет и другие отношения, которые на данный момент обычно не поддерживаются (за исключением специальных случаев, описанных ниже).

Все элементы в поле поиска обычно неявно объединяются оператором AND. Однако можно указать и оператор OR, как в примере с Beatles OR Lennon. Оператор OR вводится как есть (в верхнем регистре) и имеет приоритет над операциями с AND: word1 word2 OR word3 означает word1 AND (word2 OR word3), а не (word1 AND word2) OR word3.

Для группирования элементов можно использовать скобки (начиная с версии 1.21), что делает запрос более понятным, а также позволяет составлять комбинации, которые иными средствами выразить очень трудно.

Элемент, предваряемый -, указывает на слово, которого быть не должно.

По умолчанию слова, заключённые в двойные кавычки, указывают на поиск фразы (с соблюдением порядка слов), поэтому запрос title:"prejudice pride" будет отличаться от title:prejudice title:pride, и крайне маловероятно приведёт к положительному результату. Это можно изменить с помощью модификаторов.

Слова внутри фразы и слова с прописной буквы исключаются из поиска по словоформам. Внтури элемента поиска символы подстановки могут располагаться в любом месте. Однако вставка символа подстановки слева от слова может привести к замедлению поиска (или даже к выводу неверных результатов, когда набор словоформ обрезается ввиду превышения размера запроса). Также необходимо изучить раздел дополнительной информации по символам подстановки.

Для уменьшения ввода текста в Recoll версии 1.20 и выше значение поля в виде списка, разделённого запятыми, интерпретируется как список с операторами AND, а значение поля в виде списка, разделённого символами косой черты, как список с операторами OR. Наличие пробелов не допускается. Поэтому,

author:john,lennon

будет выполнять поиск документов содержащих в поле author слова john и lennon (в любом порядке), тогда как

author:john/ringo

будет выполнять поиск слов john или ringo. Такое происходит при наличии префикса поля «:» без которого, ввод элементов, разделённых запятыми или косой чертой приведёт к поиску соответствующей фразы. Однако можно использовать имя поля text для поиска в поле основного текста в качестве альтернативы использованию однозначного OR, например, text:napoleon/bonaparte выполнит поиск слов napoleon или bonaparte в поле основного текста.

Вместо двойных кавычек можно задать модификаторы, например, для указания поиска по близости (неупорядоченного). См. раздел по модификаторам. Закрывающие кавычки не должны отделяться пробелом от модификатора, например "two one"po10

В настоящий момент Recoll по умолчанию работает следующими полями:

  • title, subject или caption являются синонимами, которые определяют данные поиска в заголовке или теме документа.

  • author или from при поиске по составителям документа.

  • recipient или to при поиске по получателям документа.

  • keyword при поиске по характерным ключевым словам документа (встречаются далеко не в каждом документе).

  • filename при поиске по имени файла документа. Можно использовать более краткий псевдоним fn. Это значение определяется не для всех документов: внутренние документы, находящиеся внутри сложного документа (например, раздел EPUB) больше не наследует имя файла, оно было заменено на поле с более конкретным значением (см. далее). Поддокументы всё ещё могут содержать поле filename, если оно включено в формат документа, например, имя вложенного файла в сообщении электронной почты.

  • containerfilename, с псевдонимом cfn. Это поле установлено для всех документов, как верхнего уровня, так и вложенных поддокументов, и всегда содержит имя файловой системы, в которой находятся файлы. Слова из этого поля могут совпадать только при указании на конкретную спецификацию поля (в отличие от слов из поля filename, которые индексируются подобно общему содержимому документа). При этом в случае поиска по имени файла-контейнера не будут получены совпадения для всех его поддокументов.

  • ext указывает расширение файла (Ex: ext:html).

  • rclmd5 контрольная сумма MD5 документа. Используется для обнаружения дубликатов в результатах поиска (при включении параметра, позволяющего скрыть дублирующиеся результаты поиска). В принципе, может быть использовано для поиска любого имеющегося файла путём вычисления его контрольной суммы MD5 и выполнения запроса со значением rclmd5.

Именам полей можно присваивать псевдонимы для использования предпочтительных названий для полей или уменьшения объёма печатаемого текста (например, заданные по умолчанию псевдонимы fn и cfn для полей filename и containerfilename). См. раздел о файле fields.

Обработчики ввода документов позволяют создавать другие поля с произвольными именами, а в конфигурации могут быть определены псевдонимы, чтобы обеспечить возможность поиска по конкретным полям для конкретного пользователя после выполнения соответствующей настройки.

3.5.2. Особые спецификаторы, похожие на поля

Синтаксис, применимый к полям, также работает и с некоторыми похожими на поля специальными критериями, значения у которых интерпретируются иначе. Обычная обработка здесь неприменима (например, не работают списки с разделением косой чертой или запятой). Ниже приводится список таких полей.

  • dir — служит для фильтрования результатов по расположению файла. Например, dir:/home/me/somedir ограничивает поиск теми результатами, которые были найдены в пределах каталога /home/me/somedir (включая подкаталоги).

    Подстановка тильды выполняется в обычном порядке. Символы подстановки раскрываются, но имеются серьёзные ограничения по использованию символов подстановки в фильтрах пути, с которыми необходимо предварительно ознакомиться.

    Также можно использовать относительные пути. Например, dir:share/doc может совпадать либо с /usr/share/doc, либо с /usr/local/share/doc.

    -dir выполняет поиск результатов вне заданного места расположения.

    Можно задать сразу несколько выражений с dir, как положительных, так и отрицательных. Например, в виде следующей строки:

    dir:recoll dir:src -dir:utils -dir:common

    В данном случае будут выбраны результаты, в пути которых имеются каталоги recoll и src (в любом порядке следования), а также отсутствуют каталоги utils и common.

    С выражениями dir: также можно использовать операторы OR.

    Особенность работы с выражениями dir на Unix-подобных системах заключается в том, что значения в индексе не перекодируются в UTF-8, не переводятся в нижний регистр и не очищаются от диакритических знаков, но хранятся в двоичном виде. Это означает, что при вводе значений необходимо соблюдать регистр, а поиск по именам с диакритическими знаками может иногда оказаться невозможным по причине проблем с преобразованием кодировки. Не-ASCII пути файлов в UNIX могут стать бесконечной головной болью, и поэтому лучше всего их избегать.

    Если значения путей содержат пробелы, необходимо заключать их в двойные кавычки.

    Сокращённый синтаксис для определения списков OR или AND внутри полей с помощью запятых или символов косой черты не работает.

  • size — служит для фильтрации результатов по размеру файла. Пример: size<10000. В качестве операторов можно использовать <, > или =. Диапазон указывается следующим образом: size>100 size<1000. Обычные обозначения k/K, m/M, g/G, t/T можно использовать как (десятичные) множители. Пример: size>1k — выполняет поиск файлов больше 1000 байт.

  • date — служит для поиска или фильтрации по датам. Синтаксис параметра основан на стандарте ISO8601 в части указания интервалов даты и времени. Данный параметр поддерживает только дату, время указывать не нужно. Согласно базовому синтаксису обычно присутствует 2 элемента, которые разделены символом /. Каждый элемент может представлять собой дату или временной интервал. Интервалы указываются в виде PnYnMnD. Число n здесь представляет соответствующее количество лет, месяцев или дней. Любой параметр из этого списка может быть пропущен. Даты указываются в виде YYYY-MM-DD. Элементы для определения дней и месяцев могут быть пропущены. Если символ / присутствует, но отсутствует сам элемент, то отсутствующий элемент считается наименьшим или наибольшим значением даты в индексе. Примеры:

    • 2001-03-01/2002-05-01 основной синтаксис для обозначения интервала дат.

    • 2001-03-01/P1Y2M то же самое с указанием периода.

    • 2001/ с начала 2001 до самой поздней даты в индексе.

    • 2001 весь 2001 год

    • P2D/ два дня назад до текущего момента, если отсутствуют документы с датами в будущем.

    • /2003 все документы с 2003 и старше.

    Периоды также могут быть указаны строчными буквами (например: p2y).

  • mime или format — служат для указания MIME-типа. Эти выражения обрабатываются отдельно от нормальной булевой логики поиска: между несколькими значениями проставляются операторы OR (вместо обычного AND). Исключаемые типы указывают с помощью обычного средства -, либо символами подстановки. Например: mime:text/* -mime:text/plain. Вставка конкретного логического оператора перед mime не поддерживается и приведёт неожиданным результатам.

  • type или rclcat — служат для указания категории (как в text/media/presentation/etc.). Классификация MIME-типов в категориях определяется в конфигурации Recoll (mimeconf) и может быть модифицирована или расширена. Имена категорий по умолчанию позволяют фильтровать результаты в окне графического интерфейса. Между несколькими категориями проставляются операторы OR, как и у MIME-типов выше, а оператор НЕ можно также использовать в виде -.

  • issub — служит для указания, что результаты должны выводиться только из отдельных (issub:0) или только из вложенных (issub:1) документов.

Примечание:

Критерии mime, rclcat, size, issub и date всегда оказывают влияние на весь запрос (они применяются в качестве завершающего фильтра), даже если задаются совместно с другими элементами внутри скобок.

Примечание

mime (или его аналог rclcat) является единственным полем, где операция OR задана по умолчанию. Например, если необходимо использовать оператор OR с элементами ext.

3.5.3. Интервальные выражения

Recoll 1.24 и более поздние версии поддерживают интервальные выражения для полей, которые были специально сконфигурированы для их использования. На данный момент ни одно из полей не поддерживает интервальные выражения по умолчанию, поэтому данный параграф может представлять интерес только при внесении изменений в конфигурацию полей наряду с использованием собственного обработчика ввода.

Интервальное выражение может выглядеть следующим образом:

моё_поле:малое_значение..большое_значение
моё_поле:малое_значение..
моё_поле:..большое_значение
        

Характер выражения определяется оператором с двумя точками.. и заключается в фильтрации результатов по значению поля моё_поле, которое должно находиться в указанном интервале, с учётом возможности использования полуоткрытого интервала.

См. раздел о конфигурационном файле fields для получения более подробной информации по конфигурированию поля интервального поиска (находятся в разделе [values]).

3.5.4. Модификаторы

Некоторые символы применяются в качестве модификаторов поиска, располагаясь непосредственно после закрывающей двойной кавычки фразы, в виде "строка поиска"модификаторы. Конечно же в реальности «фраза» может содержать всего одно слово. Поддерживаемые модификаторы:

  • «l» используется для отключения поиска по словоформам (главным образом, имеет смысл с модификатором «p», поскольку поиск по словоформам по умолчанию отключается для фраз, но будет также полезно обратить внимание и на модификатор «x» ниже).

  • «o» используется для указания «допуска» как в поиске по фразе, так и в поиске по близости, в виде числа слов, находящихся между заданными словами. Если после «o» указано целое число, то оно является показателем допуска, в противном случае допуском по умолчанию считается 10. Допуск по умолчанию (без модификатора «o») будет 0 для поиска по фразе и 10 для поиска по близости.

  • «p» используется для преобразования упорядоченного поиска по фразе в неупорядоченный поиск по близости. Например: "любой порядок в"p. Более подробное описание поиска по фразе и близости доступно здесь.

  • «s» (1.22) может использоваться для отключения поиска с учётом синонимов при наличии файла синонимов в штатном месте расположения.

  • «x» (1.33.2) включает поиск по словоформам для слов в составе фразы (по умолчанию поиск по фразе выполняется буквально). См. также stemexpandphrases в разделе конфигурации для изменения поведения по умолчанию.

  • Вес может быть указан для элемента запроса в виде десятичного значения перед модификаторами. Пример: "Важно"2.5.

Дальнейшие указания имеют смысл только для индексов, чувствительных к регистру и диакритическим знакам (не по умолчанию):

  • «C» включает чувствительность к регистру.

  • «D» включает чувствительность к диакритическим знакам (если поддерживается индексом).

  • «e» (explicit — «буквально») включает чувствительность к регистру и диакритическим знакам, одновременно отключая поиск по словоформам.

3.6. Символы подстановки и позиционный поиск

Некоторые специальные символы в поисковых строках интерпретируются Recoll как указание для расширения поиска или привязка к конкретному местоположению. Символы подстановки расширяют поиск по корневому слову с учётом соответствующих правил. Символы позиционирования могут ограничить совпадение положением слова в начале или непосредственной близости от начала документа, либо в районе одного из его полей.

3.6.1. Символы подстановки

Перед выполнением поиска все слова, вводимые в поле поиска Recoll, при наличии символа подстановки обрабатываются на предмет расширения поиска.

В качестве символов подстановки используются следующие символы:

  • * — совпадает с 0 или несколькими символами.

  • ? — совпадает с любым одиночным символом.

  • [] — позволяет определить набор символов для совпадения (например: [abc] совпадает с одним символом «a», «b» или «c», [0-9] совпадает с любым числом.

При использовании символов подстановки необходимо учитывать следующее:

  • Применение символа подстановки в начале слова может замедлить поиск, поскольку Recoll должен будет сканировать весь список слов индекса для поиска совпадений. Однако в этой ситуации намного меньше проблем возникает с поиском по полям. При этом запросы в виде author:*@domain.com могут оказаться очень полезны.

  • Только в Recoll версии 18 при работе с неурезанным индексом (с сохранением регистра и диакритических знаков) буквальная часть выражения с символами подстановки будет совпадать точно по регистру и диакритическим знакам. В версиях 19 и выше этого уже не происходит.

  • Использование символа * в конце слова может привести к большему количеству совпадений, чем можно было бы ожидать, и вообще странным результатам поиска. Для проверки завершений, существующих для данного слова, можно использовать Обозреватель терминов. А также можно просмотреть точную форму выполнявшегося поискового запроса щелчком по ссылке в верхней части списка результатов. В целом, для слов естественного языка поиск по словоформам приводит к лучшим результатам, чем размещение символа * в конце слова (поиск по словоформам отключается при использовании в запросе какого-либо символа подстановки).

Символы подстановки и фильтр путей

С учётом метода, используемого Recoll для обработки символов подстановки внутри выражений фильтра пути dir, они будут оказывать мультипликативный эффект на размер запроса. Выражение, содержащее символы подстановки в нескольких элементах пути, как например, dir:/home/me/*/*/docdir, почти наверняка приведёт к путанице, если путь дерева индекса имеет хоть сколь-нибудь реалистичный размер.

В зависимости от конкретной ситуации в качестве обходного манёвра для решения вопроса можно указать элементы путей более узко, с постоянным префиксом, либо с помощью 2 отдельных выражений dir: вместо нескольких символов подстановки, как в следующем примере: dir:/home/me dir:docdir. Последний запрос не эквивалентен первому, потому что он не учитывает ряд уровней каталогов, но в данном случае это всё, что мы можем сделать (и иногда такой вариант решения вопроса действительно лучше работает).

3.6.2. Позиционный поиск

Позиционировать совпадение в начале или в конце текста можно с помощью двух символов. Символ «^» в начале слова или фразы указывает на то, что совпадение должно произойти в начале строки, а символ «$» в конце слова указывает на то, что совпадение должно произойти в конце.

Поскольку эта функция применяется для поиска фразы, возникает возможность указания максимального расстояния, на котором должно произойти совпадение. Это выполняется либо с помощью элементов управления в окне сложного поиска, либо с помощью языка запроса, например:

"^someterm"o10

в данном случае слово someterm должно находится на расстоянии 10 слов от начала текста. Это можно объединить с поиском по полю, например, somefield:"^someterm"o10 или somefield:someterm$.

Данную функцию можно использовать и при настоящем поиске фразы, но в таком случае расстояние применяется к целой фразе и позиции, так что, например, «bla bla my unexpected term» в начале текста даст совпадение для "^my term"o5.

Позиционные поиски могут быть очень полезны для поиска внутри документов с определённой структурой, таких как научные статьи. Особенно в случае, когда конкретные метаданные не были предоставлены. Например, при поиске совпадений внутри аннотации или списка авторов (которые находятся в начале документа).

3.7. Использование синонимов (1.22)

Синонимы слов и текстовый поиск: в принципе, существует два разных способа использования синонимов элементов поиска для поиска текста:

  • При создании индекса синонимы можно использовать для изменения числа индексируемых слов как в сторону их увеличения, так и в сторону уменьшения, либо используя все синонимы элемента поиска в качестве его словоформ, либо только его канонические формы.

  • При поиске запроса они могут использоваться для совпадения с текстом, содержащим синонимы слов, указанных пользователем, либо расширяя запрос пользователя на все синонимы, либо уменьшая его до канонических форм (последнее работает только в том случае, когда соответствующая обработка была выполнена при создании индекса).

Recoll применяет синонимы только во время запроса. Запрос пользователя, который является частью группы синонимов может разворачиваться в цепочку, содержащую все синонимы группы, связанные оператором OR.

Группы синонимов определяются в обычных текстовых файлах. Каждая строка в файле определяет группу.

Пример:

        привет здравствуйте "доброе утро"

        # не уверен насчёт "о`ревуар". Так говорят по русски?
        пока "до свидания" "до встречи" \
        "о`ревуар" 
      

Как обычно, строки, начинающиеся с #, являются комментариями, пустые строки игнорируются, после ввода обратной косой черты текущая строка завершается на следующей строке.

Синонимы, состоящие из нескольких слов, также поддерживаются, но с ними уже будет использоваться фразовый поиск, который может заметно ухудшить производительность с одновременным отключением поиска по словоформам для фразовых поисковых запросов.

Содержимое файлов синонимов должно иметь регистронезивисимое представление (и это касается не только перевода символов в нижний регистр), потому что при обработке запроса предполагается использование регистронезависимого формата. Можно продемонстрировать несколько случаев, где это важно, например, немецкая буква эсцет должна выражаться в виде ss, греческая конечная сигма — в виде строчной сигмы. Поэтому Python3 имеет в своём арсенале специальную процедуру для перевода текста в регистронезависимый формат (str.casefold()).

Файл синонимов можно указать на вкладке «Параметры поиска» элемента «Настройка интерфейса» меню «Настройки», либо в виде параметра при выполнении поиска в командной строке.

После определения файла использование синонимов можно включать или отключать напрямую из меню «Настройки».

Поиск синонимов по словам поискового запроса выполняется после подготовки списка словоформ, но содержимое файла синонимов в поиске по словоформам уже не участвует. Это означает, что совпадение не будет обнаружено, если форма, присутствующая в файле синонимов, отсутствует где бы то ни было в наборе документов (то же и с диакритическими знаками при использовании неурезанного индекса).

Поэтому функция поиска по синонимам вряд ли сможет помочь при поиске писем, адресованных Иванову или Сидорову. Лучше всего использовать её для поиска в какой-то конкретной области. Например, если пользователь изначально предполагает выполнять поиск по историческим документам, то файл синонимов может содержать прозвища и псевдонимы интересующих его лиц.

3.8. Корректировка путей

В некоторых случаях пути документов, хранящихся внутри индекса не совпадают с действительными путями, в связи с чем просматривать и открывать эти файлы не представляется возможным. Это может случиться по целому ряду причин:

  • При использовании нескольких индексов довольно часто случается, что некоторые из них находятся на удалённом томе, например, смонтированном по NFS. В таком случае локальные пути доступа к документу совсем необязательно совпадают с теми, которые использовались при индексации на удалённом компьютере. Например, при индексации в составе элементов topdirs мог быть использован путь /home/me, а каталог на локальном компьютере мог быть смонтирован как /net/server/home/me.

  • То же самое могло случиться и со съёмными дисками. При соответствующей настройке конфигурации индекс мог находиться вместе с документами на съёмном диске, который в данный момент может быть смонтирован в другой точке. В связи с этим пути документов из этого индекса использовать нельзя. Хотя в некоторых случаях настройку путей можно автоматизировать.

  • Подобная ситуацация происходит и при перемещении большого каталога, когда выполнить запуск индексатора в данный момент неудобно.

Recoll обладает функцией перезаписи путей доступа при извлечении данных из индекса. Такую корректировку можно задать как для основного индекса, так и для любого дополнительного индекса запросов.

В примере выше с NFS Recoll можно проинструктировать на выполнение корректировки любого URL-адреса из индекса с file:///home/me на file:///net/server/home/me, что позволит получить доступ для клиента.

Корректировки определяются в конфигурационном файле ptrans, который можно отредактировать вручную или в диалоговом окне настройки конфигурации внешних индексов: «Настройки»«Настройка внешнего индекса», после чего нажимается кнопка «Корректировка путей» внизу справа от списка индексов: корректировка при этом будет задана либо для основного индекса, если внешние индексы на данный момент не выбраны в списке, либо для индекса, который выбран в данный момент.

Пример записи из файла ptrans

[/путь/к/внешней/xapiandb]
          /некий/путь/индекса = /некий/локальный/путь

В данном случае для индекса, хранящегося в /путь/к/внешней/xapiandb, любое вхождение пути /некий/путь/индекса будет заменяться на /некий/локальный/путь при выводе результата.

Замечание для ОС Windows

На данный момент при корректировке пути в MS Windows используется регистрозависимое сравнение пути (когда-нибудь это будет исправлено). Поэтому путь нужно использовать в текущем регистре так, как он отображается в диспетчере файлов. Например:

[Z:/некий/монтированный/xapiandb]
C: = Z:

3.9. Чувствительность к регистру и диакритическим знакам при поиске

Для Recoll 1.18 и более поздних версий, а также при работе с неурезанным индексом (не по умолчанию), поиск может быть чувствителен к регистру и диакритическим знакам. Это зависит от переменных конфигурации и данных, введённых в поиске.

Обычно по умолчанию поисковый запрос без символов в верхнем регистре или диакритических знаков не чувствителен к регистру или диакритике. Поэтому, ввод слова resume будет совпадать с любыми его вариантами Resume, RESUME, résumé, Résumé и т.д.

Две переменные конфигурации могут автоматически переключать чувствительность (они описывались ранее в документации, но фактически не работали до Recoll 1.22):

autodiacsens

При установке этого параметра чувствительность поиска к диакритическим знакам включается при появлении в поисковом запросе диакритического знака. Когда переменная получает значение true, поисковый запрос resume инициирует запуск поиска без чувствительности к регистру, но при запросе résumé будет осуществляться поиск точного совпадения. Значение этого параметра по умолчанию — false.

autocasesens

При установке этого параметра чувствительность поиска к регистру символов включается при появлении в поисковом запросе символа в верхнем регистре, без учёта первого символа слова. Когда переменная получает значение true, запрос us или Us приведёт к поиску без чувствительности к регистру и диакритическим знакам, но при запросе US будет выполняться поиск точного совпадения. Значение этого параметра по умолчанию — true (в отличие от autodiacsens).

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

Чувствительность к регистру и диакритике также может быть включена с помощью модификаторов к языку запросов. Так, модификатор C сделает поисковый запрос чувствительным к регистру, а D — чувствительным к диакритическим знакам. Примеры:

        "us"C
      

выполнит точный поиск слова us (Us с этим словом уже не совпадёт).

        "resume"D
      

выполнит точный поиск для слова resume (résumé с этим словом уже не совпадёт).

Включение чувствительности к регистру, а равно и чувствительности к диакритическим знакам, отключает поиск по словоформам. Установка обоих параметров вряд ли будет иметь смысл.

3.10. Интеграция с рабочим столом

Независимость от рабочего стола имеет свои обратные стороны: Recoll имеет минимальную интеграцию с рабочим столом. Однако присутствует несколько полезных инструментов:

  • Пользователи текущих дистрибутивов на основе Ubuntu, а также любых других систем с рабочим столом Gnome (например, Fedora) могут установить Recoll GSSP (Gnome Shell Search Provider).

  • Описание KIO Slave для KDE находится в предыдущем разделе. Он способен вывести результаты поиска внутри Dolphin.

  • При использовании устаревшей версии Linux Ubuntu, может показаться полезным модуль Ubuntu Unity Lens.

  • Также можно обратить внимание на независимо разрабатываемый модуль Krunner.

Вот ещё несколько полезных функций.

3.10.1. Сочетания клавиш для recoll

Удивительно удобна возможность одним щелчком клавиш выводить или скрывать графический интерфейс Recoll. Такой функционал предоставляется включенным в состав Recoll небольшим сценарием Python на основе библиотеки интерфейса менеджера окон libwnck. Более подробное описание содержится на этой wiki-странице.

3.10.2. Апплет Recoll — KDE Kicker

Вполне возможно, что сейчас это уже преданье старины глубокой. Но всё же:

В исходном коде Recoll содержится исходный код для recoll_applet — небольшого приложения на основе find_applet. Его можно использовать для добавления миниатюрного средства запуска Recoll на панели KDE.

Данный апплет не собирается автоматически с основной программой Recoll, и даже не включается в основной дистрибутив исходного кода (потому что шаблонный код сборки KDE значительно увеличивает его размер). Исходный код можно скачать со страницы загрузки на recoll.org, после чего для сборки и установки необходимо произнести всемогущее заклинание configure;make;make install.

Затем апплет добавляется на панель щелчком правой клавиши мыши по панели с выбором элемента «Добавить апплет».

Апплет recoll_applet снабжён небольшим текстовым полем, куда можно ввести запрос Recoll (в формате языка запросов), а также значок для ограничения поиска определёнными типами файлов. Он довольно примитивен и каждый раз загружает новый экземпляр окна интерфейса recoll (даже если старый уже выполняется). Тем не менее, в некотором роде он может оказаться полезен.

Глава 4. Программный интерфейс

Recoll имеет свой программный интерфейс (API), который можно использовать как для индексирования, так и для поиска. Доступ к нему в текущей реализации можно получить с помощью языка Python.

Другой, менее радикальный путь расширения функционала при использовании приложения заключается в написании обработчиков ввода для новых типов документов.

Обработка атрибутов метаданных у документов (полей) имеет очень гибкие возможности настройки.

4.1. Написание обработчика ввода документа

Терминология

Небольшие программы или фрагменты кода для обработки различных типов документов в приложении Recoll раньше вызывались с помощью фильтров, что до сих пор ещё отражается в имени каталога, который их содержит, а также многих переменных конфигурации. Такое имя им присваивалось в связи с тем, что в число основных функций этих модулей входила фильтрация команд форматирования и сохранение текстового содержимого. Однако они способны выполнять и другие функции, в связи с чем в настоящее время старое название в документации активно заменяется на термин обработчик ввода, хотя слово фильтр местами до сих пор ещё используется.

Обработчики ввода Recoll объединяют усилия по извлечению содержимого из документов в окончательный формат индексирования ввода Recoll. Эти документы могут быть представлены большим количеством форматов — простыми, как opendocument и acrobat, или составными, как Zip и Email. В формате ввода индексирования используется простой текст (хотя во многих случаях промежуточным шагом конвейера обработки является преобразование в формат HTML, который предпочтителен для просмотра документов). Большинство обработчиков ввода реализованы в виде исполняемых программ или сценариев. Некоторые из них написаны на C++ и встроены в recollindex. Эти последние здесь не описываются.

Имеется два типа внешних исполняемых обработчиков ввода:

  • Простые обработчики типа exec выполняются один раз, после чего завершают работу. Могут быть реализованы в виде настоящих программ, как antiword, либо сценариев, которые используют в работе другие программы. Они несложны для написания, поскольку всего лишь выводят преобразованный документ в стандартный вывод. Документ может выводиться в виде простого текста или HTML. Вывод HTML считается более предпочтительным, так как способен хранить большее число полей метаданных, что позволяет сохранять часть форматирования для просмотра в графическом интерфейсе. Однако эти обработчики имеют и свои ограничения:

    • Могут обрабатывать только один документ на один файл.

    • MIME-тип вывода должен быть известен и чётко зафиксирован.

    • Кодировка символов, если применимо, должна быть известна и соответствующим образом указана (либо просто может зависеть от расположения).

  • Несколько обработчиков execm могут обрабатывать несколько файлов (для экономии времени на запуск процесса, которое может быть очень значительным), либо несколько документов на файл (например: при обработке архивов или публикаций, содержащих несколько глав). Они общаются с индексатором по простому протоколу, но всё же на несколько более сложном уровне, чем в старом варианте. Большинство новых обработчиков написаны на Python (исключение: rclimg, который написан на Perl, так как для exiftool не существует достойного аналога на Python). Обработчики на Python используют общие модули во избежание вставки шаблонного кода, что при благоприятном стечении обстоятельств позволяет значительно их упростить. Выводимые этими обработчиками поддокументы могут индексироваться напрямую (текст или HTML), либо представляют собой простые или составные документы в других форматах, требующих обработки с помощью другого обработчика.

В обоих случаях, обработчики имеют дело с обычными файлами файловой системы, и могут обрабатывать либо отдельный документ, либо линейный список документов в каждом файле. Recoll отвечает за проверку актуальности, обработку более сложных вложений и другие вопросы верхнего уровня.

Простой обработчик, возвращающий документ в формате text/plain, может не отправлять индексатору никаких метаданных. Общие метаданные, такие как размер документа или дата последнего изменения, фиксируются и сохраняются индексатором.

Обработчики, выполняющие вывод формата text/html, могут возвращать произвольное количество метаданных в meta-тегах HTML. Они обрабатываются в соответствии инструкциями в конфигурационном файле fields.

Обработчики, которые способны обрабатывать несколько документов в одном файле, возвращают единственный элемент, содержащий данные для идентификации каждого документа в файле. Этот элемент под названием ipath отправляется обратно в Recoll для извлечения документа во время запроса, а также просмотра или создания временного файла, открываемого просмотрщиком. Эти обработчики также могут возвращать метаданные по коммуникационному протоколу в виде meta-тегов HTML или именованных данных.

Следующий раздел содержит описание простого обработчика, а следующий за ним предлагает несколько разъяснений по обработчикам типа execm. Простой обработчик вполне возможно написать исключительно на основе информации представленной в руководстве. Однако с другими обработчиками так сделать уже не получится и придётся серьёзно вникать в код.

4.1.1. Простые обработчики ввода

Простые обработчики Recoll обычно представляют собой сценарии командной оболочки, хоть это и необязательно. Самым трудным моментом является извлечение текста из исходного формата. Вывод в формате, который используется в Recoll, не представляет сложности. К счастью, для большинства форматов документов имеются трансляторы или инструменты, которые позволяют извлекать текст и могут быть вызваны из обработчика. В некоторых случаях вывод программы трансляции полностью готов к использованию и не требует какой-либо промежуточной обработки в сценарии командной оболочки.

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

При написании обработчика необходимо выбрать формат вывода — простой текст или HTML. Простой текст получить проще, но в нём невозможно разместить метаданные или изменить кодировку символов (определяется в конфигурационном файле). К тому же это позволяет частично сохранить форматирование при просмотре HTML. На самом деле решающим фактором является наличие метаданных: Recoll способен извлекать метаданные из заголовка HTML и использовать их для поиска по полям..

Переменная окружения RECOLL_FILTER_FORPREVIEW (значения yes, no) сообщает обработчику назначение текущей операции — индексация или просмотр. Некоторые обработчики используют этот параметр для выполнения вывода в другом формате, например, для удаления непродуктивных повторяющихся ключевых слов (пример: Тема: для электронной почты) при индексации. Но это не принципиально.

Для начала необходимо рассмотреть один из самых простых обработчиков, например, rclps.

Перед тестированием не забудьте убедиться в том, что обработчик является исполняемым файлом!

4.1.2. «Модульные» обработчики

Имея навыки программирования и желание написать обработчик execm, не составит труда разобраться в работе существующих обработчиков.

Существующие обработчики различаются по объёму используемого ими вспомогательного кода:

  • rclimg написан на Perl и совершенно самостоятельно обрабатывает протокол execm (иллюстрируя простоту создания обработчика).

  • Все обработчики на Python используют по крайней мере один модуль rclexecm.py, который берёт на себя обработку сообщений. Например, rclzip.py может служить примером обработчика, напрямую использующего rclexecm.py.

  • Большинство обработчиков на Python, предназначенных для обработки файлов, которые содержат один документ, применяют для работы другую команду, и способны достичь ещё большего уровня обобщения при использовании модуля rclexec1.py. В качестве примера простого обработчика см. rclrtf.py, либо более сложный вариант rcldoc.py (с возможностью запуска нескольких команд).

  • Обработчики для извлечения текста из документа XML с помощью таблицы стилей XSLT теперь встроены в recollindex и применяют таблицы стилей из каталога filters/. Они могут использовать одну таблицу стилей (например, abiword.xsl), либо две таблицы для данных и метаданных (например, opendoc-body.xsl и opendoc-meta.xsl). Использование таблицы определяется в конфигурационном файле mimeconf, на который не лишним будет взглянуть. До перехода на C++ обработчики на основе xsl использовали общий модуль rclgenxslt.py, который до сих пор присутствует, но сейчас не используется. Обработчик презентаций OpenXML до сих пор реализован в Python-версии, поскольку данный формат не вписывается в логику кода на C++, и может служить неплохой основой для создания другого подобного обработчика.

В комплекте имеется образец простого обработчика на основе rclexecm.py, снабжённого большим количеством комментариев, но практически не использующегося в Recoll. Он выполняет построчную индексацию текстового файла в рамках одного документа. См. rcltxtlines.py в каталоге src/filters в составе общедоступного репозитория Git Recoll (на данный момент образец не включается в распространяемые дистрибутивы).

Также можно посмотреть на несколько более сложный файл rclzip.py, который использует пути Zip в качестве идентификаторов (ipath).

Обработчикам execm иногда приходится определять формат элементов ipath при общении с индексатором. Ниже приводится несколько базовых принципов:

  • Используйте ASCII или UTF-8 (если идентификатор является целым числом, то вывод может быть организован, например, в стиле printf %d).

  • Данные при выводе в файл журнала для помощи в отладке должны иметь максимально осмысленное значение.

  • В качестве разделителя для внутреннего хранения сложного пути (более глубокого вложения) Recoll применяет двоеточие (:). В составе вывода элементов ipath двоеточия экранируются обработчиком, но не рекомендуется использовать их в качестве разделителя для обработчика (главным образом, опять же во избежание проблем с отладкой).

В любом случае основная цель заключается в удобстве извлечения целевого документа обработчиком при наличии имени файла и элемента ipath.

Обработчики execm также могут создавать документ с нулевым элементом ipath. В зависимости от типа документа он может иметь какие-то связанные данные (например, тело сообщения электронной почты) или не иметь оных (характерно для файла архива). Но даже при отсутствии данных документ без сомнения будет полезен при выполнении некоторых операций в качестве родителя документов действительно содержащих данные.

4.1.3. Установка обработчика в Recoll

Имеется два элемента, связывающих файл с обрабатывающим его обработчиком: привязка файла к MIME-типу и привязка MIME-типа к обработчику.

Привязка файлов к MIME-типам основана большей частью на расширениях имён файлов. Типы определяются в файле mimemap file. Пример:


.doc = application/msword

Если привязка к расширению файла не найдена, Recoll последних версий будет использовать libmagic. Более древние или специально собранные версии могут пытаться выполнить системную команду (обычно file -i или xdg-mime).

В качестве второго варианта выступает привязка MIME-типов к обработчикам в файле mimeconf. В данном случае пример будет предпочтительнее долгих разъяснений:


          [index]
          application/msword = exec antiword -t -i 1 -m UTF-8;\
          mimetype = text/plain ; charset=utf-8

          application/ogg = exec rclogg

          text/rtf = exec unrtf --nopict --html; charset=iso-8859-1; mimetype=text/html

          application/x-chm = execm rclchm.py
        

Приведённый пример фрагмента файла указывает на следующее:

  • файлы application/msword обрабатываются программой antiword, которая выводит text/plain в кодировке utf-8.

  • файлы application/ogg обрабатываются сценарием rclogg с типом вывода по умолчанию (text/html, кодировка указывается в заголовке или utf-8 по умолчанию).

  • файлы text/rtf обрабатываются с помощью unrtf с типом вывода text/html. Кодировка iso-8859-1 здесь указывается в силу отличия от заданной по умолчанию utf-8, а также в связи с тем, что unrtf не выводит её в заголовке HTML-файла.

  • файлы application/x-chm обрабатываются с помощью модульного обработчика, определяемого ключевым словом execm.

4.1.4. Вывод обработчика ввода

Как простые, так и модульные обработчики ввода могут возвращать в Recoll любой MIME-тип, а Recoll далее обрабатывает данные в соответствии с конфигурацией переданного MIME-типа.

Большинство фильтров ввода формируют данные либо типа text/plain, либо text/html. При этом не обходится без исключений, например, фильтры, обрабатывающие файлы архива (zip, tar, и т.д.), обычно возвращают документы в исходном виде, без дальнейшей обработки.

Вывод типа text/plain не обладает сколь-нибудь замечательными особенностями, разве что его кодировка должна соответствовать кодировке, указанной в файле mimeconf.

Вывод фильтров, генерирующих HTML, должен быть максимально минималистичен, как в примере ниже:

          <html>
            <head>
              <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
            </head>
            <body>
              Некоторое текстовое содержимое
            </body>
          </html>
          

Необходимо обеспечить экранирование некоторых символов в тексте путём преобразования их в соответствующие мнемоники. По крайней мере, «&» должно быть преобразовано в «&amp;», а «<» необходимо представить в виде «&lt;». Вспомогательные внешние программы вывода HTML не всегда корректно выполняют эту задачу, не говоря уже о программах вывода простого текста.

При вставке простого текста в тело HTML-документа отображение на выводе может быть улучшено заключением текста в теги <pre>.

Кодировку необходимо указать в заголовке. Это не обязательно должна быть UTF-8 (Recoll самостоятельно преобразует текст), но для правильного отображения она должна быть указана корректно.

meta-теги в заголовке документа будут обработаны Recoll в качестве возможных кандидатов на использование в качестве полей документа. Поля документа могут обрабатываться индексатором для поиска или для отображения в результатах поиска по-разному, что подробно описано в следующем разделе.

По умолчанию индексатор обрабатывает стандартные поля заголовка при наличии таковых: title, meta/description, как и meta/keywords индексируются и сохраняются для отображения при запросе.

Предустановленные нестандартные meta-теги также будут обрабатываться в Recoll без дальнейшего участия в конфигурации: если тег date присутствует в корректном формате, он будет использован в качестве даты для документа (при отображении и сортировке), а также в параметрах даты изменения файла. Формат даты будет отображаться следующим образом:

          <meta name="date" content="YYYY-mm-dd HH:MM:SS">
          или
          <meta name="date" content="YYYY-mm-ddTHH:MM:SS">
        

Пример:

          <meta name="date" content="2013-02-24 17:50:00">
        

Обработчики ввода также способны «изобретать» имена полей, которые будут выводиться в виде мета-тегов:

          <meta name="somefield" content="Некие текстовые данные" />
        

Для улучшения отображения в списке результатов внутрь содержимого пользовательских полей можно вкладывать HTML-разметку. Для этого необходимо добавить (абсолютно нестандартный) атрибут markup для передачи Recoll информации о том, что данное значение является HTML разметкой и не должно экранироваться для отображения.

          <meta name="somefield" markup="html" content="Некие <i>текстовые</i> данные" />
        

Как уже написано выше, описание обработки полей находится в следующем разделе.

Модульные фильтры могут использовать другой, и вероятно, более простой способ генерации метаданных путём вызова вспомогательного метода setfield(). Это позволяет исключить необходимость генерации HTML, и всех вопросов, связанных с его копированием. См., например, rclaudio.py в Recoll 1.23 и более поздних версиях, как образец обработчика, выводящего text/plain с использованием метода setfield() для генерации метаданных.

4.1.5. Номера страниц

Индексатор интерпретирует символы ^L в выводе обработчика в качестве индикатора разрывов страниц и запоминает их. Во время выполнения поиска это позволяет запустить просмотрщик на странице местонахождения совпадения или фрагмента. Однако на данный момент разрывы страниц генерируют только обработчики PDF, Postscript и DVI.

4.2. Обработка данных поля

Поля (fields) являются именованными единицами информации в/о документах, например, title, author, abstract.

Значения полей документов в ходе индексирования вводятся несколькими различными способами: путём вывода полей meta в заголовке HTML обработчиками ввода, путём извлечения расширенных атрибутов из файла, путём добавления в качестве атрибутов объекта Doc при помощи API, путём внутреннего синтеза с помощью Recoll.

Язык запросов Recoll позволяет выполнять поиск текста в конкретном поле.

Recoll определяет количество полей по умолчанию. Вывод из дополнительных полей может выполнятся обработчиками и описывается в конфигурационном файле fields.

Поля могут быть:

  • индексируемыми — текст хранится отдельно в инвертированных списках (с особым префиксом), благодаря чему возможен поиск по отдельным полям.

  • сохранёнными — значение поля хранится в записи данных индекса для документа и его можно вернуть и отобразить в результатах поиска.

Поле может принадлежать либо только к какому-то одному типу, либо сразу к обоим. Этот и другие аспекты обработки полей определяются в конфигурационном файле fields.

Для некоторых полей также можно указать поддержку интервальных запросов, в том смысле, что результаты могут выбираться для некоторого диапазона возможных величин. См. более подробное описание в разделе конфигурации.

При обработке полей события происходят в следующей последовательности:

  • При индексировании recollindex сканирует все поля meta в HTML-документе (большинство типов документов на том или ином этапе преобразуются в HTML). Сравнивает имя каждого элемента с конфигурацией для определения перечня необходимых операций с полями (файл fields)

  • Если имя элемента meta совпадает с именем поля, которое необходимо проиндексировать, то содержимое обрабатывается и слова вводятся в индекс с префиксом, определённым в файле fields.

  • Если имя для элемента meta совпадает с именем поля, которое необходимо сохранить, то содержимое элемента сохраняется в составе записи данных документа, из которой его можно извлечь и отобразить при вводе запроса.

  • При выполнении запроса поиска по полям производится рассчёт префикса индекса и поиск совпадения осуществляется только по словам, содержащим в индексе соответствующий префикс.

  • При выполнении запроса поле может отображаться внутри списка результатов, если указать соответствую директиву в определении формата абзаца в списке результатов. Все поля отображаются при выводе полей в окно просмотра (данный режим отображения можно включить через контекстное меню). Причём здесь уже не важно, использовался ли поиск, сформировавший эти результаты, для данного поля или нет.

Дополнительную информацию можно найти в разделе о файле fields или в комментариях внутри файла.

Также можно изучить пример в разделе «Вопросы и ответы», иллюстрирующий добавление поля номеров страниц документов pdf для отображения в списках результатов.

4.3. API для Python

4.3.1. Введение

Программный интерфейс Python может быть использован в Recoll как для поиска, так и для создания/обновления индекса в виде запуска программы интерпретатором Python3. Этот интерпретатор доступен на всех платформах (Unix-подобные системы, MS Windows, Mac OS).

Интерфейс поиска используется в нескольких активных проектах: Recoll Gnome Shell Search Provider, Recoll Web UI и upmpdcli UPnP Media Server, а также в большом количестве небольших сценариев.

Обновление индекса с помощью API может применяться для создания и обновления индексов Recoll. До версии Recoll 1.37 для этого необходимо было использовать отдельные конфигурации (но запросы можно было обрабатывать совместно с обычным индексом). Начиная с Recoll 1.37, внешний индекс с помощью расширения Python может обновлять основной индекс. Например, данный метод используется индексатором Recoll для работы с приложением ведения заметок Joplin.

Модель API поиска составлена согласно спецификации базы данных Python API версии 2.0 (более ранние версии использовали спецификацию версии 1.0).

Пакет recoll содержит два модуля:

  • Модуль recoll содержит функции и классы для выполнения запроса или обновления индекса.

  • Модуль rclextract содержит функции и классы, использующиеся во время запроса для получения доступа к данным документа. Это можно использовать, например, при извлечении документов, вложенных в отдельные файлы.

Есть все шансы, что репозитории вашей системы содержат пакеты для Recoll Python API, которые иногда могут помещаться в отдельном пакете (с названием похожим на python-recoll). В противном случае, см. главу Сборка из исходников.

В качестве вводного примера приведём небольшую программу, которая отправляет запрос, а затем выводит заголовок и url-адрес для каждого результата. Каталог исходного кода python/samples содержит несколько примеров программ Python для Recoll, использующих данное расширение более полноценно, а в особенности её возможности по извлечению данных.

#!/usr/bin/python3

from recoll import recoll

db = recoll.connect()
query = db.query()
nres = query.execute("some query")
results = query.fetchmany(20)
for doc in results:
    print("%s %s" % (doc.url, doc.title))

Можно также взглянуть на исходники Recoll (в порядке увеличения сложности) Gnome Shell Search Provider, WebUI и локальный медиа-сервер upmpdcli .

4.3.2. Элементы интерфейса

Несколько элементов интерфейса имеют характерные особенности и нуждаются в дополнительных разъяснениях.

ipath

ipath определяет местоположение документа, вложенного в другой документ (определяется по URL-адресу). Значение, при необходимости, хранится вместе с URL-адресом, но не индексируется. Доступ к нему можно получить или задать в виде поля в объекте Doc.

Содержимое ipath непрозрачно для нижних уровней индекса (создателей или пользователей объектов Doc), и использование их контролируется отдельными индексаторами. Например, индексатор файловой системы Recoll использует ipath для хранения части пути к документу внутри (возможно перекрывающихся) документов-контейнеров. ipath в данном случае будет представлять собой своеобразный вектор для доступа к элементам (например, первая часть может содержать путь к файлу внутри zip-файла, который в свою очередь может оказаться файлом mbox, тогда второй элемент будет содержать порядковый номер сообщения внутри mbox и т.д.). Сам индекс не имеет никакого понятия об этой иерархической структуре.

На данный момент ipath, с учётом иерархии, используются только индексатором файловой системы (ни индексатор Web, ни индексатор Joplin пока этого не умеют). Некоторое представление о структуре этих элементов также складывается на верхнем уровне ПО. Например, в графическом интерфейсе Recoll имеется информация по использованию элемента индексатора файловой системы ipath для таких функций, как открытие непосредственного родителя данного документа.

url и ipath возвращаются в каждом результате поиска и определяют доступ к исходному документу. Для документов/файлов верхнего уровня возвращается пустое значение ipath (например, для документа PDF, который является отдельным файлом файловой системы).

udi

udi (уникальный идентификатор документа) используется для идентификации документа. Ввиду ограничений в модуле индексатора, он имеет ограниченную длину (до 200 байт). Структура и содержимое udi определяются приложением и непрозрачны для модуля индексатора. Например, внутренний индексатор файловой системы для создания идентификатора использует полный путь к документу (путь к файлу + внутренний путь), обрезанный до максимальной длины. При этом скрытая часть заменяется значением хеша для сохранения необходимой уникальности.

Иными словами: индексатор файловой системы не может использовать URL+ipath в качестве уникального идентификатора документа, так как такой идентификатор может оказаться слишком большим: вместо этого из URL+ipath извлекается более короткий идентификатор udi. При этом другой индексатор может использовать совершенно другой метод. Например, индексатор Joplin использует идентификатор заметки.

parent_udi

Если данный атрибут используется при вводе документа в индекс, то в нём задаётся его физический документ-контейнер, хотя в многоуровневой иерархии он может и не быть его непосредственным родителем. При применении индексатором метода purge() использование parent_udi будет обязательно для поддокументов. В противном случае данный атрибут применяется опционально, однако может упростить обслуживание индекса индексатором, так как Recoll при уничтожении документа с соответствующим udi будет автоматически удалять всех потомков, имеющих обозначение parent_udi == udi. К примеру, если Zip-архив содержит элементы, которые сами являются контейнерами, например, файлы mbox, то все поддокументы внутри Zip-файла (mbox, сообщения, вложения сообщений, и т.д.) будут иметь один и тот же parent_udi, совпадающий с udi Zip-файла, и все они будут уничтожены при удалении Zip-файла (идентифицированного по его udi) из индекса.

Сохраняемые и индексируемые поля

Файл fields в конфигурации Recoll определяет поля документа либо как индексируемые (доступные для поиска), либо как сохраняемые (доступные для получения с результатами поиска), либо как и то и другое сразу. В отличие от нескольких стандартных/внутренних полей, только сохраняемые поля могут быть доступны через интерфейс поиска Python.

4.3.3. Сообщения журнала для сценариев Python

Две отдельные переменные конфигурации: pyloglevel и pylogfilename позволяют переопределять базовые значения для программ Python. Установка значения 2 у переменной pyloglevel приведёт к подавлению стандартных сообщений о запуске (выводимых на уровне 3).

4.3.4. Интерфейс поиска Python

Модуль recoll

connect(confdir=None, extra_dbs=None, writable = False)

Функция connect() осуществляет соединение с одним или несколькими индексами Recoll и возвращает объект Db.

Этот вызов инициализирует модуль recoll, который всегда должен выполняться перед любым другим вызовом или созданием объекта.

  • confdir обозначает основной каталог конфигурации индекса. Отсутствующие значения заменяются на обычные системозависимые параметры по умолчанию.

  • extra_dbs представляет собой список дополнительных внешних индексов (каталоги Xapian). Запросы к ним будут осуществляться, но установка каких-либо значений конфигурации не предусматривается.

  • writable определяет возможность индексирования новых данных по этому соединению.

Пример:

from recoll import recoll

# Открывается БД по умолчанию
db = recoll.connect()

# Открывается БД по умолчанию и парочка дополнительных индексов
db = recoll.connect(extra_dbs=["/home/me/.someconfdir/xapiandb", "/data/otherconf/xapiandb"])
Класс Db

Объект Db создаётся с помощью вызова connect() и поддерживает соединение с индексом Recoll.

Db.query(), Db.cursor()

Эти методы-синонимы возвращают пустой объект Query для данного индекса.

Db.getdoc(udi, idxidx=0)

Извлекает документ по указанному уникальному идентификатору, а также индексу при использовании внешних индексов. Основным индексом всегда является индекс 0. Значение udi могло быть получено из более раннего запроса как doc.rcludi, либо уже известно, поскольку приложение является индексатором и генерирует эти значения.

Db.termMatch(match_type, expr, field='', maxlen=-1, casesens=False, diacsens=False, lang='english')

Разворачивает выражение согласно списку элементов индекса. Выполняет базовые функции инструмента обзора элементов поиска в графическом интерфейсе. match_type может принимать значения wildcard, regexp или stem. field (если задано) ограничивает сопоставление содержимым заданного поля метаданных. Возвращает развёрнутый список элементов поиска на основе выражения на входе.

Db.setAbstractParams(maxchars, contextwords)

Задаёт параметры для построения фрагментов (наборов ключевых слов в текстовых фрагментах из контекста). maxchars определяет максимальный общий размер описания. contextwords определяет число слов, отображаемых вокруг ключевого слова.

Db.close()

Закрывает соединение. После этого с объектом Db делать ничего нельзя.

Класс Query

Объект Query (аналогично курсору в Python DB API) создаётся с помощью вызова Db.query(). Используется для выполнения поиска по индексу.

Query.sortby(fieldname, ascending=True)

Задаёт порядок сортировки для будущих поисков по полю fieldname в восходящем или нисходящем порядке. Вызывается перед выполнением поиска.

Query.execute(query_string, stemming=1, stemlang="english", fetchtext=False, collapseduplicates=False)

Выполняет поиск по строке query_string на языке поиска Recoll. Если тексты документов хранятся в индексе и fetchtext имеет значение True, то в результате запроса объекты Doc будут содержать извлечённый из документа текст в doc.text. В противном случае поля doc.text будут пусты. Если параметр collapseduplicates имеет значение True, то лишь один из нескольких одинаковых документов (определённых по хешу MD5) появится в списке результатов.

Query.executesd(SearchData, fetchtext=False, collapseduplicates=False)

Запускает поиск по запросу, заданному в объекте SearchData. См. выше описание других параметров.

Query.fetchmany(size=query.arraysize)

Получает последующие объекты Doc из текущего списка результатов и возвращает их в виде массива соответствующего размера, по умолчанию задаваемого согласно значению элемента данных arraysize.

Query.fetchone()

Получает следующий объект Doc из текущего списка результатов. При завершении списка результатов генерирует исключение StopIteration.

Query.__iter__() и Query.next()

Соответственно, обеспечивается работа конструкции for doc in query:. Пример:

from recoll import recoll

db = recoll.connect()
q = db.query()
nres = q.execute("некий запрос")
for doc in q:
    print("%s" % doc.title)
              
Query.close()

Закрывает запрос. После данного вызова использование объекта невозможно.

Query.scroll(value, mode='relative')

Настраивает позицию в текущем наборе результатов. Параметр mode может принимать значение relative или absolute.

Query.getgroups()

Получает расширенные элементы запроса в виде списка пар. Имеет смысл только после применения executexx. В каждой паре первый элемент представляет собой список элементов запроса пользователя (размером в один элемент для простых запросов, либо больше в случае групповых выражений или фраз). Второй элемент представлен списком элементов запроса, полученных на основе запроса пользователя для применения в запросе Xapian.

Query.getxquery()

Возвращает описание запроса Xapian в виде строки Юникод. Имеет смысл только после применения executexx.

Query.highlight(text, ishtml = 0, methods = object)

Заключает области совпадения в тексте ввода в теги <span "class=rclmatch"> и </span> и возвращает изменённый текст. Можно задать параметр ishtml для указания, что текст ввода содержит HTML и не нуждается в экранировании специальных символов HTML. Параметр methods (если задан) должен содержать имя объекта с методами startMatch(i) и endMatch(), которые будут вызываться для каждого совпадения и возвращать тег начала и завершения. Пример:

class MyHighlighter:
    def startMatch(self, idx):
        return "<span style='color:red;background:yellow;'>"
    def endMatch(self):
        return "</span>"
Query.makedocabstract(doc, methods = object))

Создаёт фрагменты для описания doc (объект Doc) путём выборки текста вокруг элемента поиска. При указании значения параметра methods также выполняет выделение подсветкой. См. метод highlight().

Query.getsnippets(doc, maxoccs = -1, ctxwords = -1, sortbypage=False, methods=object)

Возвращает список извлечений из документа в результатах поиска путём выбора текста вокруг совпадения с элементом поиска. Каждый элемент списка результатов содержит три параметра: номер страницы, элемент поиска, текст. По умолчанию более подходящие по смыслу фрагменты появляются в начале списка. Установите значение параметра sortbypage, чтобы сортировка происходила по номеру страницы. При указании значения параметра methods фрагменты будут подсвечиваться (см. описание метода highlight()). При указании значения параметра maxoccs регулируется максимальная длина списка результатов. Параметр ctxwords обеспечивает индивидуальную настройку размера фрагмента контекста.

Query.arraysize

(r/w). Число записей по умолчанию обрабатываемых с помощью fetchmany().

Query.rowcount

Число записей, возвращённых в последнем поиске.

Query.rownumber

Следующий индекс, который будет получен из результатов. Обычно плюсуется после каждого вызова fetchone(), но может быть задан/сброшен перед вызовом, чтобы оказать влияние на поиск (аналогично использованию scroll()). Отсчёт начинается с 0.

Класс Doc

Объект Doc содержит данные индекса для текущего документа. Данные извлекаются из индекса в процессе поиска или задаются программой-индексатором при обновлении. Объект Doc имеет много атрибутов, считываемых или задаваемых пользователем. Чаще всего он совпадат с объектом С++ Rcl::Doc. Некоторые атрибуты установлены предварительно, но другие могут быть заданы (особенно в процессе индексирования) с именами, которые в конфигурации индекса будут обрабатываться как имена полей. Ввод может быть задан в виде Юникода или обычных строк. Для вывода используются объекты в Юникоде. Все даты указываются в формате меток времени Unix и выводятся в виде строк. См. полное описание предустановленных атрибутов в файле С++ rcldb/rcldoc.cpp. Здесь приводится лишь краткий их перечень.

  • url URL-адрес документа, но см. также getbinurl()

  • ipath параметр ipath для вложенных документов.

  • fbytes, dbytes размеры файла и текста документа.

  • fmtime, dmtime параметры времени файла и документа.

  • xdocid идентификатор данного документа в Xapian. Может использоваться для доступа к документу напрямую через операцию Xapian.

  • mtype MIME-тип документа.

  • text содержит обрабатываемый текст документа, если параметры конфигурации самого индекса обеспечивают его хранение (настройка по умолчанию), а также если параметр fetchtext в методе execute() при выполнении запроса содержал значение True. См. также модуль rclextract для доступа к содержимому документа.

  • Другие сохраняемые по умолчанию поля: author, filename, keywords, recipient

В процессе выполнения запроса только те поля, которые определены как сохраняемые, либо по умолчанию, либо в конфигурационном файле fields будут иметь смысл в объекте Doc.

get(key), оператор []

Получает именованный атрибут документа. Можно также использовать getattr(doc, key) или doc.key.

doc.key = значение

Задаёт именованный атрибут документа. Можно также использовать setattr(doc, key, value).

getbinurl()

Получает URL-адрес в формате массива байтов (без перекодирования) для использования в качестве параметра системного вызова. Может использоваться для URL-адресов file:// индексатора файловой системы, которые хранятся незакодированными в виде двоичных данных.

setbinurl(url)

Задаёт URL-адрес в формате массива байтов (без перекодирования).

items()

Возвращает словарь ключей/значений объекта doc

keys()

Список ключей объекта doc (имена атрибутов).

Класс SearchData

Объект SearchData позволяет построить запрос путём объединения условий и выполнить его с помощью Query.executesd(). Может использоваться в качестве замены для языка запросов. Интерфейс ещё не принял окончательную форму, поэтому на данный момент подробную документацию создавать преждевременно…

addclause(type='and'|'or'|'excl'|'phrase'|'near'|'sub', qstring=string, slack=0, field='', stemming=1, subSearch=SearchData)

Модуль rclextract

До Recoll версии 1.25, запросы к индексу не могли получить содержимое документа, потому что он не сохранялся. Но начиная с Recoll 1.25 и позднее, текст документа сохраняется и может быть частично получен при обработке запроса (см. query.execute() выше — результат всегда возвращается в виде простого текста).

Независимо от этого, модуль rclextract может предоставлять доступ как к исходному документу, так и к его текстовому содержимому, а возможно и в виде HTML-версии. Доступ к исходному документу особенно важен в том случае, если это вложенный документ (например, вложение эл. почты).

Модуль recoll необходимо импортировать прежде модуля rclextract.

Класс Extractor
Extractor(doc)

Объект Extractor собирается из объекта Doc при выводе результата запроса.

Extractor.textextract(ipath)

Извлекает документ, определённый с помощью ipath, и возвращает объект Doc. Поле doc.text содержит текст документа, преобразованный в text/plain или text/html в соответствии с doc.mimetype. Обычно используется следующим образом:

from recoll import recoll, rclextract

qdoc = query.fetchone()
extractor = rclextract.Extractor(qdoc)
doc = extractor.textextract(qdoc.ipath)
# используйте doc.text, например, для просмотра

Сама по себе передача параметра qdoc.ipath в textextract() избыточна, но отражает фактическую способность объекта Extractor получать доступ к другим элементам составного документа.

Extractor.idoctofile(ipath, targetmtype, outfile='')

Извлекает документ в файл вывода, который может быть задан в явном виде или создан как временный файл, удаляемый вызывающей стороной. Обычное применение:

from recoll import recoll, rclextract

qdoc = query.fetchone()
extractor = rclextract.Extractor(qdoc)
filename = extractor.idoctofile(qdoc.ipath, qdoc.mimetype)

В любом случае вывод осуществляется путём создания копии, даже если заданный документ является обычным системным файлом, что иногда может быть расточительно. Избежать этого можно с помощью следующего способа проверки является ли файл обычным документом:

not doc.ipath and (not "rclbes" in doc.keys() or doc["rclbes"] == "FS")

Пример поиска с помощью API

В следующем примере выполняется запрос к индексу в виде строки на языке пользователя. См. каталог python/samples в исходном коде Recoll для ознакомления с другими примерами. Подкаталог recollgui имеет зачаточный интерфейс, демонстрирующий выделение в виде подсветки и функции извлечения данных.

#!/usr/bin/python3

from recoll import recoll

db = recoll.connect()
db.setAbstractParams(maxchars=80, contextwords=4)

query = db.query()
nres = query.execute("some user question")
print("Result count: %d" % nres)
if nres > 5:
    nres = 5
for i in range(nres):
    doc = query.fetchone()
    print("Result #%d" % (query.rownumber))
    for k in ("title", "size"):
        print("%s : %s" % (k, getattr(doc, k)))
    print("%s\n" % db.makeDocAbstract(doc, query))

4.3.5. Интерфейс индексирования на Python

Внешние индексаторы Recoll

Индексатор Recoll способен обрабатывать множество различных форматов документов. Однако некоторые формы хранения данных трудно использовать для стандартной обработки в связи со значительной их вариативностью. В качестве канонического примера можно привести хранение данных в базе данных SQL. Не смотря на то, что можно было бы создать настраиваемый фильтр для обработки данных из этой БД, большое количество вариантов в организации хранения данных и наличие различных диалектов SQL усложняет всё дело.

Вместо этого Recoll способен обеспечить поддержку внешних индексаторов, где вся ответственность за работу с форматами данных поручается внешнему сценарию. В качестве языка сценария в данный момент можно использовать только Python 3, потому что это единственный язык, для которого существует API-интерфейс.

Вплоть до Recoll 1.35, такой индексатор должен был работать на отдельном индексе Recoll, который добавлялся в качестве внешнего индекса для выполнения запросов из главного индекса, и для этого индекса необходимо было вести отдельное расписание индексирования. Причина для использования именно такой схемы заключалась в том, что в процессе очистки (очистка удалённых документов) основной индексатор документов удалял в том числе и данные всех документов, принадлежащих внешнему индексатору, поскольку не видел эти документы при обходе файловой системы (и наоборот, внешний индексатор в процессе очистки удалял все элементы обычных документов).

Но начиная с версии Recoll 1.36, ситуация была исправлена. Новый вызов API позволяет внешним индексаторам полностью интегрироваться и работать на основном индексе с обновлениями, получаемыми штатно из программы recollindex.

Внешний индексатор выполняет ту же работу, что и индексатор файловой системы Recoll: поиск модифицированных документов, извлечение текста, вызов API для их индексирования, а также очистка индекса от данных удалённых документов.

Описание метода API приводится ниже, но можно перейти немного вперёд для ознакомления с рядом примеров на псевдокоде, а также изучить несколько настоящих реализаций, одна из которых выполняет полезные действия.

API индексирования на Python

Интерфейс индексирования состоит из двух частей:

  • Методы в модуле recoll позволяют внешнему индексатору обновлять индекс.

  • Интерфейс, основанный на выполнении сценариев, позволяет запускать индексатор (из recollindex), чтобы с помощью графического интерфейса или модуля rclextract обеспечить доступ к исходным данным документа для просмотра или изменения.

Два образца сценариев включены в исходный код Recoll и подробно описаны чуть ниже.

Методы интерфейса индексирования на Python

Методы обновления входят в состав модуля recoll. Метод connect() используется с параметром writable=true для получения изменяемого объекта Db. В этом случае обеспечивается доступ к следующим методам объекта Db.

addOrUpdate(udi, doc, parent_udi=None)

Добавляет или обновляет данные индекса для текущего документа. Строка udi должна определять уникальный идентификатор документа. Это непрозрачный элемент интерфейса, который не интерпретируется внутри Recoll. doc является объектом Doc, который создаётся из индексируемых данных (основной текст должен находится в doc.text). Параметр parent_udi (если задан) является уникальным идентфикатором контейнера верхнего уровня, документом, для которого вызывается needUpdate() (например, для индексатора файловой системы таковым будет являться сам файл). Поля doc, url и, вероятно, ipath также должны быть заданы для обеспечения доступа к самому документу после выполнения запроса. Другие поля требуется указать для обеспечения последующего доступа к данным, см. ниже описание полей: rclbes, sig, mimetype. Конечно же, к этому списку можно добавить любое стандартное или настраиваемое поле Recoll.

delete(udi)

Очищает индекс от всех данных заданного udi, а также от данных всех документов, для которых udi задан в качестве parent_udi (при наличии таковых).

needUpdate(udi, sig)

Проверяет необходимость обновления индекса документа, идентификатором которого является udi. Использование этого вызова предполагает, что поле doc.sig содержит значение подписи при выполнении addOrUpdate(). В таком случае вызов needUpdate() выполняет сравнение этого параметра с сохранённым значением sig для данного udi. Параметр sig содержит непрозрачное значение, сравниваемое в виде строки.

Индексатор файловой системы применяет конкатенацию строк, содержащих десятичные числа размера файла и времени изменения, но может использовать и хеш содержимого.

В качестве побочного эффекта при возвращении значения false (индекс в актуальном состоянии) вызов установит флаг существования для документа (и любого поддокумента, определяемого по его parent_udi), чтобы при последующем вызове purge() они не были удалены.

Использовать needUpdate() и purge() необязательно, а индексатор может использовать другой метод для проверки необходимости повторного индексирования или удаления устаревших записей.

preparePurge(имя_индексатора)

Отмечает все документы, которые *не* принадлежат к указанному индексатору. имя_индексатора представляет собой значение, выбранное для поля rclbes, которое предназначается для идентификации индексаторов документов (например, «MBOX», «JOPLIN»…). Этот вызов обязателен перед началом обновления, если индекс используется совместно с другими индексаторами, и после обновления планируется обращение к purge(). В противном случае все документы для других индексаторов будут удалены из индекса при выполнении операции очистки.

purge()

Удаляет все документы, которые не были затронуты во время только что завершённого прохода индексирования (со времени preparePurge()). Это такие документы, для которых не осуществлялся вызов needUpdate(), что указывает на их отсутствие в системе хранения.

createStemDbs(язык|перечень языков)

Создаёт словари словоформ для расширения запроса по словоформам. Обратите внимание на то, что при выполнении индексирования из программы recollindex необходимость в этой операции отсутствует, поскольку она выполняет это действие после вызова всех внешних индексаторов. Вызов осуществляется при завершении обновления индекса. Доступна только в Recoll 1.34.3 и более поздних версиях. В качестве альтернативы можно закрыть индекс и выполнить:

recollindex -c <confdir> -s <язык(и)>

Модуль Python на данный момент не имеет интерфейса для функций приложения проверки орфографии Aspell, поэтому тот же подход может быть использован для создания словаря проверки орфографии (с параметром -S) (опять же, действие необязательно при выполнении индексирования с помощью recollindex).

Доступ к данным запроса для внешних индексаторов

Recoll обладает внутренними методами доступа к данным документа для своего внутреннего индексатора (файловой системы). Внешний индексатор должен предоставлять свои методы доступа к данным при необходимости интеграции с графическим интерфейсом (например, с функцией просмотра) или для поддержки модуля rclextract.

Внешний индексатор должен предоставлять две команды: для получения данных (обычно для просмотра) и для вычисления сигнатуры документа (для проверки актуальности при открытии или просмотре). В примерах для MBOX и JOPLIN выполнение обеих операций осуществляется одним и тем же сценарием с различными параметрами, что является всего лишь одним из вариантов реализации. Третья команда необходима для правильного выполнения индексирования.

Сценарии «fetch» и «makesig» вызываются с тремя дополнительными аргументами: udi, url, ipath. Это те самые параметры, которые задаются индексатором и хранятся вместе с документом при вызове addOrUpdate() в описании выше. В каждом конкретном случае могут использоваться не все аргументы, а сценарий будет использовать только те из них, которые необходимы для выполнения поставленной задачи. Вызывающая сторона ожидает вывода итоговых данных на stdout.

recollindex в процессе выполнения сценариев устанавливает переменную окружения RECOLL_CONFDIR, чтобы при необходимости можно было создать конфигурацию с помощью

rclconf = rclconfig.RclConfig()

а получение значения конфигурационного каталога осуществляется по примеру, представленному ниже

confdir = rclconf.getConfDir()

Конфигурация внешних индексаторов

Данные индекса и метод доступа связываются посредством значения поля rclbes (хранилище индексатора recoll) объекта Doc. В качестве значения необходимо задать для него короткую строку с указанием индексатора (например, для индексатора файловой системы используется либо FS, либо пустое значение, для индексатора веб-поиска используется BGL, для индексатора приложения ведения заметок Joplin используется JOPLIN).

Связь фактически устанавливается в конфигурационном файле backends (находится в конфигурационном каталоге). Здесь задаются команды, выполняемые для получения данных от заданного индексатора. Например, в исходном коде Recoll можно найти образец значения для индексирования mbox (задаётся параметром rclbes="MBOX"):

[MBOX]
fetch = /path/to/recoll/src/python/samples/rclmbox.py fetch
makesig = /path/to/recoll/src/python/samples/rclmbox.py makesig
index = /path/to/recoll/src/python/samples/rclmbox.py index

Во время обновления индекса recollindex исполняет значение параметра index при его наличии (может отсутствовать, если относится к внешнему индексу).

Если внешнему индексатору необходимо хранить дополнительные параметры конфигурации, например, путь к особому экземпляру индексируемого приложения, и т.д., то я бы предложил хранить их внутри recoll.conf с префиксом, соответствующим конкретному индексатору (например, joplin_db, mbox_directory), и для доступа к ним использовать методы из модуля rclconfig.

Примеры внешних индексаторов

Сначала небольшое знакомство с основой частью индексатора в виде псевдокода Python3:

    # Соединение с индексом recoll. Здесь используется переменная RECOLL_CONFDIR, устанавливаемая
    # родительским процессом recollindex для использования соответствующего индекса.
    rcldb = recoll.connect(writable=1)

    # Важный момент: сообщаем БД Recoll, что будем обновлять документы для индексатора
    # MYBACK. Все прочие документы будут отмечены как текущие, чтобы не удалить их
    # во время предстоящего очищения.
    rcldb.preparePurge("MYBACK")

    # Проход по набору данных (без сомнения ваш код будет выглядеть иначе)
    for mydoc in mydoclist:
        # Вычисление уникального идентификатора doc и сигнатуры, соответствующей состоянию его обновления
        # (например, mtime и размер для файла).
        udi = mydoc.udi()
        sig = mydoc.sig()
        # Проверка необходимости обновления файла, выполняемая с помощью recoll. Имеет побочный эффект в
        # виде отметки о существовании документа.
        if not rcldb.needUpdate(udi, sig):
            continue
        # Данные документа отсутствуют в индексе или требуют обновления. Создаётся и добавляется объект Doc
        # в Recoll
        doc = recoll.Doc()
        doc.mimetype = "some/type"
        # Укажите индексатор, которому принадлежит данный документ
        doc.rclbes = "MYBACK"
        # Url-адрес будет передан обратно вместе с udi, если метод fetch
        # вызван позднее (для просмотра), либо он может быть использован для открытия документа
        # его собственным приложением из Recoll. Udi ограничен максимальным размером, поскольку используется в качестве
        # элемента поиска Xapian. Url-адрес таких ограничений не имеет.
        doc.url = "someurl"
        doc.sig = sig
        # Конечно, здесь можно добавить другие поля, такие как «text» (duh), «author» и т.д. См. примеры.
        doc.text = mydoc.text()
        # [...]
        # Затем нужно добавить или обновить данные в индексе.
        self.db.addOrUpdate(udi, doc)

    # Наконец, вызывается purge для удаления данных отсутствующих документов.
    db.purge()

В дереве исходного кода Recoll имеется два образца внешних индексаторов.

  • rclmbox.py индексирует каталог, содержащий папку файлов mbox. Конечно, целесообразность такого сценария невелика, поскольку Recoll умеет делать это сам. Однако здесь применяется много функций по интерфейсу обновления как с документами верхнего уровня, так и с вложенными документами, что позволяет продемонстрировать использование значений ipath.
  • rcljoplin.py индексирует таблицу SQL главных заметок приложения Joplin. Joplin задаёт атрибут даты обновления каждой записи в таблице, чтобы заметку из этой записи можно было обрабатывать в качестве отдельного документа (в ipath здесь необходимости нет). Пример содержит полную поддержку просмотра и открытия записи (в последнем случае используется URL-адрес обратного вызова Joplin, который позволяет отобразить целевую заметку в собственном приложении), что могло бы быть полезно для унифицированного поиска как данных Joplin, так и обычных данных Recoll. Начиная с Recoll версии 1.37.0, индексатор Joplin является частью установки по умолчанию (см. раздел функций на веб-сайте для получения более подробной информации).

См. комментарии внутри сценария для получения более подробной информации.

Использование индекса внешнего индексатора вместе с обычным индексом

При добавлении внешнего индексатора к обычному для выполнения унифицированных запросов некоторые элементы конфигурации внешнего индекса необходимо скопировать или объединить с конфигурацией основного индекса. Как минимум, необходимо скопировать или объединить файл backends, а также, по-возможности, данные из файлов mimeconf и mimeview. См. образец rcljoplin.py для примера.

Глава 5. Установка и настройка конфигурации

5.1. Установка бинарной версии

Бинарные версии Recoll всегда распространяется в виде обычных пакетов для установки в системе. Их можно получить либо по обычной схеме распространения программного обеспечения для данной системы (например, Debian/Ubuntu apt, портированные версии для FreeBSD, и т.д.), либо с одного из репозиториев «backports», содержащих более новые версии ПО, а в некоторых случаях можно использовать и пакеты, расположенные на веб-сайте Recoll. Самая актуальная информация о пакетах Recoll обычно находится на странице загрузки веб-сайта Recoll

Версия Recoll для Windows поставляется в отдельном установочном файле, больше ничего устанавливать не нужно.

На Unix-подобных системах, инструменты управления пакетами автоматически установят необходимые зависимости в виде пакетов, полученных из соответствующих репозиториев. После загрузки установку пакетов необходимо будет выполнить вручную (например, когда dpkg сообщает об отсутствующих зависимостях).

Во всех случаях необходимо будет проверить или установить поддерживающие приложения для тех типов файлов, которые предполагается индексировать, за исключением стандартно обрабатываемых в Recoll (текст, HTML-файлы, файлы эл.почты и некоторые другие).

Также может потребоваться заглянуть в раздел конфигурации (но в этом может и не возникнуть необходимости после быстрой проверки с параметрами по умолчанию). Большая часть параметров может быть установлена более удобно через графический интерфейс.

5.2. Поддерживающие пакеты

Примечание

Установка Recoll на Windows содержит все необходимые элементы. Пользователи Windows могут пропустить этот раздел.

Recoll использует внешние приложения для индексирования некоторых типов файлов. Установить эти приложения необходимо для тех типов файлов, которые предполагается индексировать (это необязательные зависимости, использующиеся на этапе выполнения программы, которые требуются не для сборки или работы Recoll, а только для индексирования файлов соответствующего типа).

После прохода индексирования список отсутствующих команд можно вывести с помощью меню Файл приложения recoll. Список хранится в текстовом файле missing внутри конфигурационного каталога.

Практика показывает, что поддержка актуального списка программного обеспечения в этом руководстве мне не по силам. Зайдите на страницу https://www.recoll.org/pages/features.html для получения полного списка вместе со ссылками на домашние страницы или наиболее актуальные страницы с исходным текстом/патчами и различными подсказками. Ниже следует очень краткая выдержка, содержащая стабильный базовый минимум таких программ.

  • Для PDF-файлов потребуется pdftotext, являющийся частью Poppler (обычно поставляется в пакете poppler-utils). Не используйте оригинальную версию от Xpdf.

  • Для документов MS Word необходимо установить antiword. Также нелишним будет установить wvWare в качестве резервного варианта для некоторых файлов, которые не поддерживает antiword.

  • Для файлов RTF потребуется unrtf, который в более старых версиях создавал немало проблем при работе с кодировками незападноевропейских языков. При этом многие дистрибутивы Linux до сих пор включают устаревшие версии unrtf. См. более подробную информацию на https://www.recoll.org/pages/features.html.

  • Изображения: для извлечения информации из тегов изображений Recoll использует пакет Exiftool от Perl. Поддерживает большую часть форматов файлов изображений.

  • Вплоть до Recoll версии 1.24 многие форматы на основе XML требовали наличия команды xsltproc, которая обычно поставляется в пакете libxslt. Эти форматы включают: abiword, fb2 ebooks, kword, openoffice, opendocument svg. Начиная с Recoll версии 1.25 и более поздних, обработка этих форматов выполняется самостоятельно (с помощью libxslt).

5.3. Сборка из исходного кода

5.3.1. Необходимые условия

Следующие условия описаны в общих словах с применением наименований пакетов Debian. Зависимости должны быть доступны в виде пакетов наиболее распространённых Unix-подобных систем, в связи с чем необходимость сборки какого-нибудь из этих пакетов будет выглядеть в данном контексте крайне необычно. Определение правильного имени пакета для других систем оставляем догадливости проницательного читателя.

Если графический интерфейс не требуется, то все зависимости, связанные с графическим интерфейсом, отключаются путём отмены его сборки. (См. раздел конфигурации ниже: --disable-qtgui).

Далее следует список необходимых аксессуаров:

  • Если начать с кода git, то потребуется команда git (git), а также триада autoconf, automake и libtool (autoconf, automake, libtool). Однако для сборки из дистрибутивов tar они не потребуются.

  • Команда pkg-config и пакет gettext нужны для настройки конфигурации сборки (pkg-config, gettext).

  • Команда make (make, которая фактически выполняет установку GNU make на Linux). Если выводятся сообщения о странной ошибке по отслеживанию зависимостей от configure, то скорее всего вы забыли установить make.

  • Компилятор C++, как минимум, должен быть совместим с C++14 (g++ или clang). Для версии 1.33.4 и более старых достаточно c++11.

  • Команда bison обычно не нужна, но может и пригодиться, если время изменения какого-нибудь файла указано неверно.

  • При необходимости обработки файлов CHM потребуется libchm (libchm-dev), либо задаётся параметр --disable-python-chm для команды configure.

  • Для сборки документации: команда xsltproc, а также файлы Docbook XML и файлы стилей. Можно исключить эту зависимость путём отключения сборки документации установкой параметра --disable-userdoc для configure.

  • Файлы разработки ядра Xapian (libxapian-dev).

    Важно

    При сборке Xapian для более ранних ЦП (до Pentium 4 или Athlon 64) необходимо применять параметр --disable-sse с командой configure. В противном случае произойдёт сбой приложения Xapian с ошибкой недопустимая инструкция.

  • Файлы разработки libxslt (libxslt1-dev).

  • Файлы разработки zlib (zlib1g-dev).

  • Файлы разработки libaspell (libaspell-dev). Можно отключить с помощью параметра --disable-aspell с командой configure.

  • Для построения графического интерфейса: файлы разработки Qt 5. В противном случае задаётся параметр --disable-qtgui с командой configure. Могут потребоваться qtbase5-dev и qttools5-dev-tools, а также другие пакеты, которые я никак не могу запомнить, но при установке Qt5 Webkit (или Qt5 Webengine, если задан параметр --enable-webengine) они обычно добавляются в состав зависимостей (libqt5webkit5-dev или qtwebengine5dev). Графический интерфейс Recoll для отображения результатов может использовать либо Webkit, либо Webengines.

  • Файлы разработки Python3 (python3-all-dev, python3-setuptools). Можно использовать параметр --disable-python-module для отключения сборки расширения Python. На более старых системах, всё ещё поддерживающих Python2, также можно установить python2-dev и python-setuptools. Сборка проверит наличие команд python2 и/или python3 и скорректирует свои действия.

  • Также может потребоваться libiconv. На Linux-системах интерфейс iconv является частью libc и никаких специальных действий выполнять не потребуется.

Проверьте страницу загрузки Recoll для получения информации по актуальной версии.

5.3.2. Сборка

Recoll собирался на Linux, FreeBSD, MacOS и Solaris. На большинстве версий после 2005 г. всё должно работать нормально, и даже на некоторых более древних из них (на Solaris 8 обычно всё работало без замечаний). Текущие версии Recoll (1.34 и более поздние) требуют наличия компилятора c++14 и Qt5, в связи с чем не могут быть собраны на старых системах, но при необходимости можно попробовать найти более старую версию, которая будет соответствовать заданным параметрам. Если сборка выполняется на другой системе, и что-то приходится менять, то очень хотелось бы увидеть ваши патчи.

Параметры конфигурации:

--without-aspell отключает код фонетического совпадения элементов поиска.

--with-fam или --with-inotify включает код индексирования в режиме реального времени. На системах Linux поддержка inotify включена по умолчанию.

--with-qzeitgeist включает отправку событий Zeitgeist о просмотре результатов поиска и требует наличия пакета qzeitgeist.

--disable-qtgui отключает графический интерфейс Qt, который позволяет собрать индексатор и программу поиска в командной строке в отсутствии среды Qt.

--disable-webkit реализует вывод списка результатов с помощью QTextBrowser Qt, вместо виджета WebKit, если вы не зависите или не можете от него зависеть.

--enable-webengine включает использование Qt Webengine (имеет смысл только при включении графического интерфейса Qt) вместо Qt Webkit.

--enable-guidebug собирает графический интерфейс программы recoll с отладочными символами. Это значительно увеличивает его размер (~50МБ), в связи с чем параметр отключён по умолчанию.

--disable-idxthreads доступен начиная с версии 1.19 для подавления многопоточности в процессе индексирования. Ограничить recollindex использованием одного потока можно и с помощью параметров рабочей конфигурации, но при компилировании этот параметр может отключить ещё несколько неиспользующихся блокировок. Применимо только к использованию многопоточности на уровне ядра для обработки индекса (ввод данных). При работе в режиме монитора Recoll всегда использует не менее двух потоков.

--disable-python-module отключает сборку модуля Python.

--disable-python-chm отключает сборку интерфейса Python libchm, который используется при индексировании файлов CHM.

--enable-camelcase включает функцию разделения слов, написанных в верблюжьемРегистре. Эта функция по умолчанию отключена в связи с неприятным побочным эффектом, при котором поиск по фразе в некоторых случаях может привести к путанице: т.е., "MySQL manual" совпадает с "MySQL manual" и "my sql manual", но не совпадает с "mysql manual" (происходит только при поиске по фразам).

--with-file-command указывает применяемую версию команды «file» (например: --with-file-command=/usr/local/bin/file). Может быть полезно при использовании GNU-версии на системах, где собственная версия работает некорректно.

--disable-x11mon отключает контроль связи с X11 в recollindex. При использовании совместно с --disable-qtgui позволяет построить recoll без Qt и X11.

--disable-userdoc отключает сборку руководства пользователя. При этом исключается необходимость установки XML/XSL-файлов Docbook и набора инструментов TeX, применяющихся для конвертирования руководства в PDF.

--enable-recollq включает сборку инструмента ввода запросов в командной строке recollq (recoll -t без необходимости использования Qt). Это же действие выполняется по умолчанию при указании параметра --disable-qtgui, но при указании данного параметра это происходит принудительно.

--disable-pic (только версии Recoll до 1.21) выполняет компилирование Recoll с позиционно-зависимым программным кодом. Данный параметр несовместим со сборкой KIO, а также расширениями на Python или PHP, но поможет собрать чуть более быстрый код.

--without-systemd отменяет автоматическую установку юнит-файлов systemd. Обычно юнит-файлы устанавливаются, когда можно обнаружить пути установки.

--with-system-unit-dir=DIR указывает путь установки шаблона системного юнит-файла systemd.

--with-user-unit-dir=DIR указывает путь установки юнит-файла systemd для пользователя.

И конечно же здесь применимы стандартные параметры autoconf configure, такие как --prefix.

Обычная процедура для исходного кода из tar-дистрибутива KIO slave

cd recoll-xxx
./configure [параметры]
make
(практикует вызовы, минимально подверженные возникновению проблем)

Сборка из исходного кода на git

При сборке из исходного кода, клонированного с репозитория git, необходимо установить autoconf, automake и libtool, а также выполнить сценарий sh autogen.sh в каталоге верхнего уровня исходного кода перед запуском configure.

Также потребуется запустить configure с параметром --disable-userdoc, либо установить XML/XSL-файлы Docbook, которые необходимы для преобразования XML-руководства Docbook в формат HTML.

5.3.3. Установка

Запустите make install в корневом каталоге дерева исходного кода. При этом исполняемые файлы копируются в prefix/bin, а образцы конфигурационных файлов, сценариев и других разделяемых данных — в prefix/share/recoll.

5.3.4. Пакет API для Python

Интерфейс для Python находится в дереве исходного кода в каталоге python/recoll.

Обычная процедура сборки Recoll (см. выше) устанавливает пакет API как для Python2, так и для Python3. Хотя версия Python2, вероятно, канет в лету уже в ближайшем будущем.

Каталог python/recoll/ содержит стандартный файл setup.py. После настройки конфигурации и сборки основного кода Recoll можно использовать сценарий сборки и установки модуля Python для нестандартной версии Python.

          cd recoll-xxx/python/recoll
          pythonX setup.py build
          sudo pythonX setup.py install
        

5.4. Обзор настройки конфигурации

Большая часть параметров, предназначенных для графического интерфейса recoll, настраивается в меню Настройки и стандартно для Qt хранится в ($HOME/.config/Recoll.org/recoll.conf). Вряд ли кому-то понравится идея редактировать этот файл вручную.

Параметры индексирования Recoll задаются внутри текстовых конфигурационных файлов, размещённых в конфигурационном каталоге. Там может быть несколько каталогов, каждый из которых определяет параметры для одного индекса.

Конфигурационные файлы можно изменять вручную или в диалоговом окне Настройка индекса (в меню Настройки). Инструмент графического интерфейса, насколько это возможно, старается сохранить заданный стиль форматирования и комментарии, что позволяет использовать оба подхода на одной конфигурации.

Для каждого индекса имеется по крайней мере два набора конфигурационных файлов. Общесистемные конфигурационные файлы, хранящиеся в каталоге с названиеим /usr/share/recoll/examples, содержат значения по умолчанию, использующиеся всеми индексами (значения в этих файлах часто бывают закомментированы, и присутствуют лишь для указания значений по умолчанию, заданных в коде программы). Для каждого индекса существует параллельный набор файлов, определяющих настраиваемые параметры.

На Unix-подобных системах, настраиваемая конфигурация по умолчанию располагается в каталоге .recoll, размещённом в домашнем каталоге. На Windows этот каталог располагается в C:/Users/[you]/AppData/Local/Recoll. Этот каталог будет использоваться подавляющим большинством пользователей.

Стандартное расположение конфигурационного каталога можно изменить, либо добавить другие конфигурационные каталоги для отдельных индексов с помощью переменной окружения RECOLL_CONFDIR или параметра -c команды recoll и recollindex.

В дополнение (для Recoll версии 1.19.7), можно указать два дополнительных конфигурационных каталога, которые будут заданы до и после пользовательского конфигурационного каталога. Они устанавливаются с помощью переменных окружения RECOLL_CONFTOP и RECOLL_CONFMID. Значения конфигурационных файлов в каталоге верхнего уровня будут переопределять значения пользовательских файлов, значения конфигурационных файлов в каталоге среднего уровня будут переопределять общесистемные значения и переопределяться пользовательскими. Обе эти переменные могут использоваться в приложениях, дополняющих функционал Recoll, когда необходимо добавить данные конфигурации без внесения изменений в пользовательские файлы. Обратите внимание, в будущем эти два одиночных значения, по всей вероятности, будут представлены списком значений, разделённых двоеточиями — поэтому не стоит использовать символы двоеточий в путях каталогов.

Если при запуске recoll или recollindex конфигурационный каталог по умолчанию отсутствует, он создаётся в виде набора пустых конфигурационных файлов. Перед запуском индексирования recoll предложит внести изменения в конфигурационный файл, после чего сразу же запускается recollindex. Во избежание путаницы, автоматическое создание каталогов выполняется только для расположения по умолчанию без использования параметра -c или RECOLL_CONFDIR (при использовании этих параметров каталог будет необходимо создать самостоятельно).

Все файлы конфигурации имеют один формат. Например, короткая выдержка из главного конфигурационного файла может выглядеть следующим образом:

        # Space-separated list of files and directories to index.
        topdirs =  ~/docs /usr/share/doc

        [~/somedirectory-with-utf8-txt-files]
        defaultcharset = utf-8
      

Существует три вида строк:

  • Комментарий (начинается с #) или пустая строка.

  • Присвоение значения параметру (имя = значение).

  • Определение раздела ([некое_имя_раздела]).

Длинные строки могут иметь разрывы в виде завершения каждой неполной части строки обратной косой чертой (\).

В зависимости от типа конфигурационного файла определения разделов либо делят параметры на группы, либо позволяют переопределить параметры для поддерева каталога. Они действуют либо до определения следующего раздела, либо до завершения файла. Некоторые параметры, применяемые для индексирования, просматриваются иерархически с места расположения текущего каталога вверх. Не каждый параметр имеет смысл переопределять, и в следующем разделе эта возможность последовательно расписывается для каждого параметра.

Важно

Глобальные параметры не должны определяться в подразделе каталога, в противном случае Recoll не сможет их обнаружить, так как он ищет их на верхнем уровне (например, skippedPaths).

Если в начале пути файла находится символ тильды (~), то он расширяется до имени домашнего каталога пользователя, так же как это происходит в командной оболочке.

Некоторые параметры представляют собой список строк с пробелом в качестве разделителя. Список элементов с вложенными пробелами может заключаться в двойные кавычки. Двойные кавычки внутри таких элементов можно экранировать с помощью символа обратной косой черты.

Значения внутри конфигурационного файла не могут содержать символ перевода строки. Длинные строки можно продлить путём экранирования физического перевода строки символом обратной косой черты даже внутри строк, заключённых в кавычки.

        astringlist =  "некая строка \
        с пробелами"
        thesame = "некая строка с пробелами"        
      

Параметры, не являющиеся частью списка строк, не могут заключаться в кавычки, а ведущие и завершающие пробелы удаляются до использования значения переменной.

Важно

Кавычки обрабатываются ТОЛЬКО применительно к значениям параметров, которые являются списками. Заключение в двойные кавычки единичных значений, например, dbdir, приведёт к неверному значению переменной. Вероятно, всему виной изначально некорректная реализация программы, но исправлять эту ошибку сейчас уже слишком поздно.

Проблемы кодировки. Большая часть параметров конфигурации состоит из обычного ASCII-текста. Проблемы с кодировками могут вызвать лишь два конкретных набора значений:

  • Параметры пути файла могут содержать не-ascii символы и должны использовать точно такой же набор байтов, который используется в каталоге файловой системы. Обычно это означает, что файл конфигурации должен использовать кодировку системной локали по умолчанию.

  • Параметр unac_except_trans должен иметь кодировку UTF-8. Если же локаль конкретной системы не использует UTF-8, и при этом необходимо указывать не-ascii пути файлов, то это создаёт определённые сложности, поскольку общепринятые текстовые редакторы не поддерживают наличие нескольких кодировок в одном файле. В таком сравнительно маловероятном случае конфигурационный файл можно составить из двух отдельных текстовых файлов с соответствующими кодировками для последующего объединения их в единый конфигурационный файл.

5.4.1. Переменные окружения

RECOLL_CONFDIR

Определяет главный конфигурационный каталог.

RECOLL_TMPDIR, TMPDIR

Места расположения временных файлов в порядке приоритета. Если ни одна из этих переменных не задана, каталог временных файлов по умолчанию будет располагаться в /tmp. Большие временные фалйы могут быть созданы в процессе индексирования, главным образом, для распаковки архивов, а также для обработки, например, вложенных файлов эл. почты.

RECOLL_CONFTOP, RECOLL_CONFMID

Разршить добавление конфигурационных каталогов с приоритетом ниже и выше каталога пользователя (см. более подробную информацию выше в разделе «Обзор настройки конфигурации»).

RECOLL_EXTRA_DBS, RECOLL_ACTIVE_EXTRA_DBS

Вспомогательные переменные для установки внешних индексов. См. подробные разъяснения в соответствующем параграфе.

RECOLL_DATADIR

Определяет альтернативное место расположения файлов данных Recoll по умолчанию (обычно помещаются в /usr/share/recoll).

RECOLL_FILTERSDIR

Определяет альтернативное место расположения фильтров Recoll по умолчанию (обычно помещаются в /usr/share/recoll/filters).

ASPELL_PROG

Программа для создания орфографического словаря aspell. Результат должен быть совместим с библиотекой libaspell, которая используется в Recoll.

5.4.2. Главный конфигурационный файл Recoll — recoll.conf

Параметры, формирующие состав индексируемых документов

topdirs

Список разделённых пробелами файлов или каталогов, подлежащих рекурсивному индексированию. Значение по умолчанию ~ (индексирование каталога $HOME). В списке можно использовать символические ссылки, переход по которым выполняется независимо от значения переменной followLinks.

monitordirs

Список разделённых пробелами файлов или каталогов, подлежащих отслеживанию для обновления. При запуске индексатора в режиме реального времени позволяет отслеживать только поднабор индексируемой области. Элементы необходимо включать в дерево, определённое каталогами, заданными в «topdirs».

skippedNames

Файлы и каталоги, которые будут проигнорированы. Разделённый пробелами список шаблонов с символами подстановки (простые шаблоны без путей, не должны содержать символов «/»), которые будут проверяться по именам файлов и каталогов.

Взгляните на конфигурацию по умолчанию для исходного значения, так как в данной ситуации некоторые элементы могут не подойти. Проще всего это проверяется на вкладке «Локальные параметры» диалога настройки индекса.

Согласно конфигурации по умолчанию данный список не включает скрытые каталоги (имена, начинающиеся на точку), в связи с чем возможна индексация значительного числа нежелательных элементов. С другой стороны, такие почтовые клиенты, как Thunderbird, обычно хранят сообщения в скрытых каталогах, которые в большинстве случаев нуждаются в индексации. Одним из возможных решений этой проблемы может быть включение «.*» в «skippedNames», а таких каталогов как «~/.thunderbird» и «~/.evolution» в «topdirs».

Имена файлов по шаблонам в списке не индексируются, см. переменную «noContentSuffixes» для изучения альтернативного подхода по индексированию имён файлов. Можно переопределить для любого поддерева.

skippedNames-

Список завершений имён для удаления из списка skippedNames по умолчанию.

skippedNames+

Список завершений имён для добавления в список skippedNames по умолчанию.

onlyNames

Обычные шаблоны фильтра по именам файлов. Если заданы, то индексируются только имена файлов, которые отсутствуют в skippedNames и совпадают с одним из шаблонов. Можно переопределить для поддерева. Не применяется к каталогам.

noContentSuffixes

Список завершений файлов (необязательно в виде отделяемых точками расширений), для которых не проводится идентификация MIME-типа, а также не сжимается и не индексируется содержимое. Индексируются только имена. Это дополняет теперь уже устаревший список recoll_noindex из файла mimemap, который в будущем релизе будет окончательно ликвидирован (перемещение из mimemap в recoll.conf позволяет редактировать список в графическом интерфейсе). Отличается от skippedNames тем, что здесь сопоставляются только завершения имени (не шаблоны символов подстановки), а само имя файла индексируется обычным способом. Можно переопределить для подкаталогов.

noContentSuffixes-

Список завершений имён для удаления из списка noContentSuffixes по умолчанию.

noContentSuffixes+

Список завершений имён для добавления в список noContentSuffixes по умолчанию.

skippedPaths

Абсолютные пути, не подлежащие индексации. Разделённый пробелами список выражений с символами подстановки для абсолютных путей файловой системы (файлов и каталогов). Эта переменная должна быть определена на верхнем уровне конфигурационного файла, а не в подразделе.

Любое значение в списке должно быть точно согласовано со значениями в topdirs, разрешение символических ссылок не производится. На практике, если /home является ссылкой на /usr/home, что бывает нередко, значение по умолчанию в topdirs будет содержать единственную запись «~», которая преобразуется в «/home/ваш_логин». В таком случае любой элемент skippedPaths должен начинаться с «/home/ваш_логин», а *не* с «/usr/home/ваш_логин».

Каталоги индекса и конфигурации добавляются к списку автоматически.

Выражения сравниваются с помощью «fnmatch(3)» с заданным по умолчанию флагом FNM_PATHNAME, предполагающим точное совпадение символов «/». При установке значения 0 для «skippedPathsFnmPathname» использование FNM_PATHNAME отключается («/*/dir3» при этом будет совпадать с «/dir1/dir2/dir3»).

Значение по умолчанию содержит стандартную точку монтирования съёмных носителей, как напоминание пользователю о том, что в большинстве случаев работа с ними в Recoll не предвещает ничего хорошего. Переопределить это поведение можно непосредственной вставкой «/media/xxx» в переменную «topdirs».

skippedPathsFnmPathname

Установить значение 0, чтобы не использовать флаг FNM_PATHNAME при проверке совпадения игнорируемых путей.

nowalkfn

Имя файла, при наличии которого отключается индексация каталога. Любой каталог, содержащий файл с указанным именем будет пропущен, как если бы он являлся частью списка skippedPaths. Пример: .recoll-noindex

daemSkippedPaths

Аналог skippedPaths, предназначенный для индексирования в режиме реального времени. Активирует части дерева, которые изначально индексировались, но не отслеживались. Если daemSkippedPaths не задан, то данная служба будет использовать skippedPaths.

zipUseSkippedNames

Использование skippedNames внутри Zip-архивов. Используется непосредственно обработчиком rclzip.py. Игнорирует элементы в Zip-архивах по шаблонам, заданным в skippedNames. Можно переопределить для подкаталогов. См. https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html

zipSkippedNames

Разделённый пробелами список выражений с символами подстановки для имён, которые не должны индексироваться внутри zip-архивов. Используется непосредственно обработчиком zip. Если zipUseSkippedNames не задан, то игнорируемые шаблоны внутри архивов определяются по zipSkippedNames. Если же zipUseSkippedNames определён, то два списка объединяются и используются вместе. Можно переопределить для подкаталогов. См. https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html

followLinks

Переход по символической ссылке в процессе индексирования. По умолчанию символические ссылки игнорируются во избежание многократного индексирования связанных файлов. При установке параметра в значение true не предпринимается никаких попыток избежать дублирования. Данный параметр можно установить индивидуально для каждого элемента «topdirs» при использовании разделов. Ниже уровня «topdirs» применение невозможно. Переход по ссылкам в самом списке «topdirs» выполняется всегда.

indexedmimetypes

Ограничительный список индексируемых mime-типов. Обычно не задан (в этом случае все поддерживаемые типы индексируются). Если же параметр задан, то индексируется содержание только тех mime-типов, которые включены в список. При установке параметра indexallfilenames (задан по умолчанию) имена файлов индексируются в любом случае. Имена MIME-типов необходимо брать из файла mimemap (значения в некоторых случаях могут отличаться от xdg-mime или вывода «file -i»). Можно переопределять для поддеревьев.

excludedmimetypes

Список исключаемых MIME-типов. Позволяет не включать некоторые типы в индекс. Имена MIME-типов необходимо брать из файла mimemap (значения в некоторых случаях могут отличаться от xdg-mime или вывода «file -i»). Можно переопределять для поддеревьев.

nomd5types

Не вычислять md5 для указанных типов. Контрольные суммы md5 используются только для результатов дедупликации, могут быть очень затратными для вычисления мультимедиа и других больших файлов. Данный список позволяет отключать вычисление md5 для указанных типов. Параметр глобальный (отсутствуют переопределения для поддеревьев). В настоящий момент оказывает влияние только на внешние обработчики (exec и execm). Типы файлов могут быть указаны либо в виде списка MIME-типов (например, audio/mpeg), либо в виде имён обработчиков (например, rclaudio.py).

compressedfilemaxkbs

Ограничение размера сжатых файлов. Эти файлы распаковываются во временный каталог для идентификации, что в некоторых случаях может быть затратно. Поэтому, данные затраты необходимо ограничить. Отрицательное значение означает отсутствие ограничений. 0 отключает обработку любых сжатых файлов. Значение по умолчанию 100 МБ.

textfilemaxmbs

Ограничение размера текстовых файлов. Главным образом, позволяет игнорировать огромные журналы. Значение по умолчанию 20 МБ. При значении -1 ограничение отключается.

textunknownasplain

Обработка неизвестных фалов text/xxx как text/plain. Позволяет индексировать различные текстовые файлы, которые идентифицируются с помощью команды «file» или «xdg-mime» как text/??? без необходимости строгого указания параметров конфигурации для каждого из них. Это прекрасно работает при индексировании (хоть и может привести к обработке огромного количества мусора), но индексированные таким образом документы будут открываться с помощью просмотрщика рабочего стола, даже если для просмотра файлов типа text/plain задан особый редактор.

indexallfilenames

Индексирование имён необработанных файлов. Обеспечивает индексацию имён файлов, содержимое которых не индексируется, поскольку они принадлежат к неподдерживаемому или исключённому MIME-типу

usesystemfilecommand

Использование системного механизма в качестве крайнего средства для определния MIME-типа. В зависимости от платформы и версии, вопрос о том, будет ли программа запускать соответствующую команду или использовать libmagic, решается на этапе компиляции. Действие, как правило, не бесполезное, но часто приводит к индексированию массы бесполезных текстовых файлов без расширения. См. «systemfilecommand» для определения используемой команды.

systemfilecommand

Команда, применяемая для определения MIME-типа, когда внутренними методами определить его не удалось. Данный параметр игнорируется в Windows или Recoll 1.38+, если при компилировании использовался параметр --enable-libmagic (по умолчанию). В противном случае, в качестве команды будет использоваться аналог «file -i». Путь к определяемому файлу будет добавлен в качестве последнего параметра командной строки. «xdg-mime» работает лучше, чем традиционная команда «file», и в данный момент используется в конфигурации по умолчанию (параллельно с использующимся в коде резервным вариантом в виде команды «file»)

processwebqueue

Определяет необходимость обработки очереди веб-страниц. Очередь представляет собой каталог, в котором модули веб-браузера Recoll создают копии посещённых страниц.

textfilepagekbs

Размер страницы для текстовых файлов. При установке данного параметра файлы типа text/plain будут разделены на документы, примерно равные заданному размеру. Это позволит уменьшить использование памяти в процессе индексирования, а также поможет загрузить данные в окно просмотра при выполнении запроса. Особенно полезно с очень большими файлами, такими как приложения или системные журналы. См. также textfilemaxmbs и compressedfilemaxkbs.

membermaxkbs

Ограничение размера для элементов архива. Параметр передаётся в окружение для фильтров в виде параметра RECOLL_FILTER_MAXMEMBERKB.

Параметры, оказывающие влияние на формирование элементов запроса и организацию индекса

indexStripChars

Определяет необходимость учёта в индексе регистра и диакритических знаков. При необходимости учёта поиск может быть выполнен с учётом регистра и диакритики, но в этом случае индекс получает большие размеры и возникает склонность к появлению некоторых странностей в результатах поиска. По умолчанию используется урезанный индекс. При использовании для поиска нескольких индексов данный параметр применяется одинаково ко всем. Изменение значения подразумевает сброс индекса.

indexStoreDocText

Определяет необходимость сохранения содержимого текста в индексе. Хранение текста позволяет извлекать из него фрагменты во время запроса вместо построения их на основе позиционирования данных в индексе.

Применение списка позиционирования в новых форматах индекса Xapian в ряде случаев выполняется непростительно медленно. Chert является последним форматом индекса Xapian, который показывает неплохую производительность при использовании этого устаревшего метода. Он применяется по умолчанию в версии 1.2, продолжает, хоть и не по умолчанию, поддерживаться в версии 1.4 и прекращает поддерживаться в версии 1.6.

Сохраняемый текст документа преобразуется из исходного формата в простой текст UTF-8, но сохраняет верхний регистр, диакритику и знаки пунктуации. Хранение текста обычно увеличивает размер индекса на 10-20%, но фрагменты при этом становятся более красивыми. Поэтому включение данного параметра, даже при отсутствии проблем с производительностью, может иметь смысл только при наличии необходимого количества дискового пространства.

Переменная оказывает влияние только при создании индекса, и каталог xapiandb при этом ещё не должен существовать. Однако фактическое влияние переменной зависит от версии Xapian.

Так, использование Xapian 1.4 при значении переменной 0 ранее обычно означало применение формата Chert без сохранения текста. При значении 1 использовался формат Glass с сохранением текста. Сейчас всё происходит иначе: сохранение текста было признано более предпочтительным вариантом, но отключение этой возможности упрощает код.

Поэтому в настоящее время формат для нового индекса всегда задаётся по умолчанию, однако переменная всё ещё контролирует необходимость сохранения текста, а также метод формирования краткого описания. С Xapian 1.4 и более поздними версиями, а также при присвоении переменной значения 0, формирование краткого описания может выполняться очень медленно, но такая конфигурация все ещё может быть полезна для сохранения дискового пространства, если вообще не использовать формирование краткого описания при соответствующей настройке графического интерфейса и/или без использования параметров Python API или recollq, которые обычно приводят к её запуску.

nonumbers

Определяет необходимость формирования элементов поиска для чисел. Например, «123», «1.5e6», 192.168.1.4, не будут индексироваться, если задан параметр nonumbers (однако индексирование будет выполняться для слов в виде «value123»). Числа часто могут представлять интерес для поиска и вряд ли есть смысл отключать их индексацию, за исключением особых ситуаций, например, научных документов с большим количеством чисел, в которых установка параметра nonumbers позволяет уменьшить размер индекса. Может быть задан только для целого индекса, но не для его поддерева.

notermpositions

Позволяет не сохранять позицию элемента поиска. Позиции элемента поиска позволяют выполнять поиск по фразам и близости, но значительно увеличивают размер индекса. В некоторых особых ситуациях может возникнуть необходимость обходиться без них.

dehyphenate

Определяет будет ли индексироваться вариант «coworker» при вводе «co-worker». Параметр появился в версии 1.22 и включен по умолчанию. Отключение переменной позволяет восстановить предыдущее поведение.

backslashasletter

Позволяет обрабатывать обратную косую черту как обычный символ. Может иметь смысл для тех, кто хочет индексировать команды TeX в их обычном виде, но в целом имеет мало применений для практического использования.

underscoreasletter

Позволяет обрабатывать символ подчёркивания как обычную букву. Это настройка используется так часто, что невольно возникает мысль включить её по умолчанию.

maxtermlength

Максимальная длина элемента поиска в байтах. Слова длиннее этого размера будут отклонены. По умолчанию длина равна 40 и изначально жёстко задавалась в коде программы, но теперь её можно настраивать. При изменении значения может потребоваться сброс индекса.

nocjk

Определяет необходимость отключить отделение друг от друга особых восточноазиатских (китайских, корейских, японских) символов/слов. Это позволит лишь немного ослабить загруженность ЦП при отсутствии документов CJK. Если же такие тексты присутствуют в базе документов, но нет необходимости в организации по ним поиска, то включение параметра nocjk приведёт к заметной экономии времени и дискового пространства.

cjkngramlen

Этот параметр позволяет настроить размер n-грамм, используемых для индексирования текста CJK. Значение по умолчанию 2 в большинстве случаев будет вполне разумно. Значение 3 обеспечит большую точность и эффективность в случае длинных слов, но приведёт к увеличению индекса примерно в два раза.

hangultagger

Внешний токенизатор для корейского хангыля. Позволяет использовать специальный процессор для корейского языка при извлечении элементов поиска из корейского текста вместо обычного генератора слов на основе n-грамм. См. более подробное описание на https://www.recoll.org/pages/recoll-korean.html.

chinesetagger

Внешний токенизатор для китайского языка. Позволяет использовать специальный токенизатор Jieba для извлечении осмысленных элементов поиска из китайского текста вместо обычного генератора слов на основе n-грамм. См. более подробное описание на https://www.recoll.org/pages/recoll-chinese.html.

indexstemminglanguages

Языки, для которых создаются данные расширений по словоформам. Имена языков с расширениями по словоформам можно найти при запуске «recollindex -l», а также можно задать их в виде списка в графическом интерфейсе. В качестве значений используются полные наименования языков, например, english, french…

defaultcharset

Кодировка по умолчанию. Используется для файлов, в которых не заданы сведения о кодировке (например: text/plain). При обнаружении таких указаний внутри файлов, например, тег «charset» в документах HTML, данный параметр будет переопределён. Если параметр не задан, то кодировка по умолчанию будет определяться окружением NLS ($LC_ALL, $LC_CTYPE, $LANG), а в самом крайнем случае получит значение iso-8859-1 (по факту cp-1252). Если по какой-то причине по умолчанию необходимо задать кодировку, которая не совпадает с текущим значением LANG и 8859-1, то можно смело использовать этот параметр. Может переопределяться для каждого подкаталога.

unac_except_trans

Список символов в кодировке UTF-8, которые требуют специальной обработки при преобразовании текста в нижний регистр без диакритических знаков. Например, в шведском языке буква с диарезисом используется во всех случаях жизни и не должна превращаться в a. Каждый элемент в разделённом пробелами списке начинается со специального символа, за которым следует значение для его замены. Необходимо указать варианты для обработки обеих версий символа как в нижнем, так и в верхнем регистре, поскольку принадлежность к списку отключает стандартную обработку диакритики и регистра. Значение глобально и затрагивает как индексирование, так и выполнение запроса. Также устраняется путаница с несколькими символами Unicode (кавычки, дефис) путём преобразования в их ASCII-аналоги во избежание «неочевидных» сбоев поиска.

Примеры: шведский язык: unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl åå Åå ’' ❜' ʼ' ‐- . Немецкий язык: unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- . Французский язык: совершенно естественно возникает желание разложить oe и ae и очень маловероятно использование немецкой буквы ß unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- . Далее следуют значения по умолчанию для всех языков пока не будут выявлены несоответствия. Указанные разложения не выполняются в unac, но шансы, что кто-то будет вводить сложные формы в поисковом запросе однозначно стремятся к нулю. unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐-

maildefcharset

Переопределение кодировки по умолчанию для сообщений эл.почты, в которых она не указана. Главным образом, используется для дампов readpst (libpst) с кодировкой utf-8, которая нигде не указана.

localfields

Установка полей для всех файлов (обычно в заданной области файловой системы). Используется стандартный синтаксис: имя = значение ; attr1 = val1 ; [...] означает пустое значение, поэтому в начале должна стоять точка с запятой. Может применяться, например, чтобы задать значение поля rclaptg для выбора приложения в mimeview.

testmodifusemtime

Позволяет использовать mtime вместо ctime при проверке факта внесения изменений в файл. Время используется в дополнение к стандартно используемому размеру. Включение этого параметра может снизить нагрузку от переиндексирования на системах, где используются расширенные атрибуты (каким-то другим приложением), но индексация их изменения может не выполняться, так как изменение расширенных атрибутов влияет только на ctime. Примечания: — В некоторых отдельных случаях это может привести к неспособности обнаружения изменений при переименовании файла (целевой файл при этом должен сохранить размер и mtime). — Также может потребоваться установить значение 1 для noxattrfields, если индексация xattr не входит в число предпочтений пользователя. Например, такая индексация может использоваться локальным шаблоном обновления файла (как обычно, существует риск обновления только расширенных атрибутов, при котором изменения файла могут остаться незамеченными). После изменения параметра необходимо выполнить полное обновление индекса.

noxattrfields

Отключение преобразования расширенных атрибутов в поля метаданных. Этот параметр может потребоваться при установке параметра testmodifusemtime.

metadatacmds

Определение команд для сборки внешних метаданных, например, тегов tmsu. Может включать несколько элементов, разделённых точками с запятой, каждый из которых определяет имя поля, в которое поступают данные, а также используемую команду. Не забудьте про начальный символ точки с запятой. Все имена полей должны отличаться. При необходимости в файле «field» можно использовать псевдонимы. Для удобства пользователей была сделана довольно-таки топорная доработка: любое имя поля, начинающееся с «rclmulti», указывает на то, что команда возвращает несколько значений полей внутри блока текста, отформатированного как конфигурационный файл recoll (со строками «имя_поля = значение_поля»). При этом само имя rclmultixx будет проигнорировано, а имена и значения полей будут извлекаться из его данных. Например: metadatacmds = ; tags = tmsu tags %f; rclmulti1 = cmdOutputsConf %f

Параметры, влияющие на место и способ хранения данных

cachedir

Каталог верхнего уровня данных Recoll. Каталоги данных Recoll обычно размещаются относительно конфигурационного каталога (например, ~/.recoll/xapiandb, ~/.recoll/mboxcache). Если же установлен параметр «cachedir», то каталоги будут размещены ниже заданного значения (например, если «cachedir» имеет значение «~/.cache/recoll», то «dbdir» по умолчанию будет иметь значение «~/.cache/recoll/xapiandb»). Этот параметр оказывает влияние на dbdir, webcachedir, mboxcachedir, aspellDicDir, которые могут заданы индивидуально, чтобы не зависеть от cachedir. Важно отметить, что при наличии нескольких конфигураций каждая из них должна иметь свой параметр «cachedir», так как подпути «cachedir» автоматически не вычисляются.

maxfsoccuppc

Максимальный объём файловой системы, который может быть занят до прекращения индексирования. Значение выражено в процентах, относительно которого отображается вывод df в столбце «Объём». Значение по умолчанию 0, при котором проверка не производится.

dbdir

Расположение каталога базы данных Xapian. Создаётся при первом индексировании. Если в значении указан не абсолютный путь, то при наличии значения у этого параметра предполагается путь относительно «cachedir», либо относительно конфигурационного каталога (параметр -c или $RECOLL_CONFDIR). Если значение не указано, то в качестве значения по умолчанию используется ~/.recoll/xapiandb/

idxstatusfile

Имя временного файла, в котором процесс индексатора обновляет свой статус. По умолчанию: idxstatus.txt в конфигурационном каталоге.

mboxcachedir

Расположение каталога для хранения файлов кеширования смещений у сообщений mbox. Обычно это «mboxcache» в каталоге «cachedir» при наличии значения у этого параметра, либо в конфигурационном каталоге. При этом удобнее использовать единый каталог для различных конфигураций.

mboxcacheminmbs

Минимальный размер файла mbox выше которого начинается кеширование смещений. Очевидно, нет никакого смысла в кешировании маленьких файлов. Значение по умолчанию 5 МБ.

mboxmaxmsgmbs

Максимальный размер сообщения внутри mbox в мегабайтах. Размер, выше которого формат mbox будет считаться недопустимым или неверно интерпретированным. Обработка файла при этом прекращается.

webcachedir

Каталог для хранения архивных веб-страниц. Используется только в коде индексатора истории веб-поиска. По умолчанию: cachedir/webcache, если задано значение парметра «cachedir», в противном случае — $RECOLL_CONFDIR/webcache

webcachemaxmbs

Максимальный размер веб-архива в МБ. Используется только в коде индексатора истории веб-поиска. По умолчанию: 40 МБ. Уменьшение размера не приведёт к физической обрезке файла.

webqueuedir

Путь к очереди индексатора веб-поиска. Изначально задавался в коде старого модуля как ~/.recollweb/ToIndex, чем благополучно устранялась как необходимость, так и возможности его изменения. Однако теперь модуль WebExtensions загружает файлы в каталог пользователя «Загрузки», а затем сценарий перемещает их в webqueuedir. Сценарий считывает данное значение из конфигурации, в результате чего появилась возможность его изменения.

webdownloadsdir

Путь к каталогу загрузки браузера. Здесь добавляемое расширение браузера должно создавать файлы. Затем с помощью сценария они перемещаются в webqueuedir.

webcachekeepinterval

Интервал сохранения страницы. По умолчанию в кеше хранится только один экземпляр страницы на URL-адрес. Это можно изменить путём установки значения для определения частоты сохранения нескольких экземпляров («день», «неделя», «месяц», «год»). Здесь важно понять, что при увеличении интервала существующие записи не удаляются.

aspellDicDir

Место расположения каталога для хранения словаря Aspell. Словарь aspell (aspdict.(lang).rws) обычно хранится в каталоге, указанном в «cachedir» (если значение этого параметра задано), либо в конфигурационном каталоге.

filtersdir

Место расположения каталога для исполняемых файлов обработчиков ввода. Если в окружении задана переменная RECOLL_FILTERSDIR, то она будет использоваться вместо данного параметра. Значение по умолчанию: $prefix/share/recoll/filters. Может переопределяться для подкаталогов.

iconsdir

Место расположения каталога для значков. Единственная причина для изменения значения этого параметра может заключаться в изменении значков, которые отображаются в списке результатов. Значение по умолчанию: $prefix/share/recoll/images

Параметры, влияющие на производительность индексирования и использование ресурсов

idxflushmb

Порог (в мегабайтах новых данных), при котором данные из памяти сбрасываются в индекс диска. Установка этого параметра позволяет осуществлять некоторый контроль над использованием памяти процессом индексатора. При значении 0 память не очищается, что позволяет Xapian работать в штатном режиме, при котором сброс памяти происходит через такое число созданных, изменённых и удалённых документов, которое задано в переменной $XAPIAN_FLUSH_THRESHOLD: но поскольку использование памяти зависит не только от числа документов, но и от их среднего размера, то подход Xapian нельзя признать очень эффективным. Поэтому бразды управления памятью лучше передать Recoll. В коде программы задано значение 0. Конфигурация по умолчанию (в соответствующем файле конфигурации) теперь имеет значение 50 МБ, что должно подойти для большинства ситуаций. Можно снизить его до 10 для экономии памяти, но для достижения максимальной скорости придётся поэксперементировать со значениями от 20 до 200. Согласно моему опыту, значения за пределами указанных величин всегда контрпродуктивны. Если у вас другие данные, дайте мне знать.

filtermaxseconds

Максимальное время работы внешнего фильтра в секундах. По умолчанию 1200 (20mn). Для снятия ограничений задайте значение 0. Большей частью служит для предотвращения бесконечных циклов в файлах postscript (loop.ps)

filtermaxmbytes

Максимальный объём виртуальной памяти для процессов фильтрации (setrlimit(RLIMIT_AS)) в мегабайтах. Важно понимать, что это включает любые разделяемые библиотеки (в Linux не существует надёжного способа установки ограничения только на объём данных), в связи с чем здесь приходится проявлять несколько большую щедрость. На 32-разрядных машинах будет игнорироваться всё, что превышает 2000. Большое значение по умолчанию необходимо при использовании обработчиков на базе java (pdftk), которые требуют значительного объёма виртуальной памяти (в основном, текст), а в особенности pdftk при запуске из сценария Python rclpdf.py. Если не использовать Java, то значение может быть намного ниже.

thrQSizes

Глубина очереди задач на каждом этапе и управление конфигурацией потоковой модели. Существует три внутренних очереди на этапах конвейера индексирования (извлечение данных из файлов, формирование элементов поиска, обновление индекса). Этот параметр определяет глубину очереди для каждого этапа (три целочисленных значения). На практике глубокие очереди не показали увеличения производительности. Первое значение также использовалось для управления автоматической конфигурацией потоковой модели или для отключения многопоточности. Если в качестве глубины первой очереди задать 0, то Recoll задаст глубину очередей и число потоков согласно обнаруженному числу ЦП. Произвольно выбранные значения указаны ниже (глубина, число потоков). 1 ЦП -> без многопоточности. Менее 4 ЦП: (2, 2) (2, 2) (2, 1). Менее 6: (2, 4), (2, 2), (2, 1). Либо (2, 5), (2, 3), (2, 1). Если в качестве глубины первой очереди указать -1, многопоточность полностью отключается. Второе и третье значения игнорируются в обоих указанных случаях.

thrTCounts

Число потоков, использующееся на каждом этапе индексирования. Если первый элемент значения thrQSizes не равен 0 или -1, то эти три величины определяют число потоков, использующихся на каждлом этапе (извлечение данных файлов, формирование элементов поиска, обновление индекса). Для последнего этапа нет смысла использовать значение, отличное от 1, потому что обновление индекса Xapian должно быть однопоточным (и защищается с помощью mutex).

thrTmpDbCnt

Число временных индексов, использующихся при инкрементальном или полном индексировании. Если значение не равно нулю, то оно определяет сколько временных индексов мы используем в процессе индексирования. Эти временные индексы объединяются в основной индекс в конце выполнения операции. Использование нескольких индексов и заключительное объединение может значительно улучшить производительность индексирования, когда обновление однопоточного индекса Xapian становится узким местом. Эффективность зависит от типа ввода и ЦП. См. более подробную информацию в руководстве.

Прочие параметры

loglevel

Уровень детализации файла журнала 1-6. Значение 2 — выводятся только ошибки и предупреждения, 3 — выводится информация, например, по обновлению документов, 4 — высокий уровень детализации и 6 — очень высокий уровень детализации.

logfilename

Местонахождение файла журнала. Введите «stderr» (default) для вывода в консоль.

idxloglevel

Переопределение уровня журнала для индексатора.

idxlogfilename

Переопределение имени файла журнала для индексатора.

helperlogfilename

Файл для стандартного вывода ошибок от внешних вспомогательных программ. Вывод ошибок внешних программ по умолчанию не контролируется, например, выводится в консоль при выполнении программы recoll[index] из командной строки. Для полного отключения вывода можно использовать /dev/null или файл в несуществующем каталоге.

daemloglevel

Переопределение уровня журнала для индексатора в режиме реального времени. По умолчанию используются значения idx…, если заданы, в противном случае — значения log….

daemlogfilename

Переопределение имени файла журнала для индексатора в режиме реального времени. По умолчанию используются значения idx…, если заданы, в противном случае — значения log….

pyloglevel

Переопределение уровня журнала для модуля python.

pylogfilename

Переопределение имени файла журнала для модуля python.

idxnoautopurge

Позволяет не удалять данные для удалённых или недоступных файлов. Может переопределяться параметрами командой строки recollindex и очень помогает в случае временной, но предсказуемой недоступности части общего набора документов, чтобы очистку можно было запускать только при наличии всех необходимых документов.

orgidxconfdir

Исходное расположение конфигурационного каталога. Используется только для перемещаемых наборов данных. Размещение конфигурационного каталога внутри дерева каталогов позволяет автоматически преобразовывать пути при выполнении запроса как только набор данных будет перемещён (например, по причине монтирования в другом месте).

curidxconfdir

Текущее расположение конфигурационного каталога. Дополняет orgidxconfdir для перемещаемых наборов данных. Используется при копировании конфигурационного каталога из набора данных в другое место расположения либо в связи с тем, что набор данных доступен только для чтения, когда нужен доступ с правами чтения/записи, либо по причинам проблем с производительностью. Здесь задаётся место расположения перемещённого оригинала перед копированием для выполнения операций по преобразованию пути. Например, если набор данных изначально проиндексированный на «/home/me/mydata/config» был смонтирован на «/media/me/mydata», и графический интерфейс работает из скопированной конфигурации, то orgidxconfdir будет иметь значение «/home/me/mydata/config», а curidxconfdir (как задано в скопированной конфигурации) — «/media/me/mydata/config».

idxrundir

Текущий каталог процесса индексирования. Обработчики ввода иногда оставляют временные файлы в текущем каталоге, поэтому имеет смысл выполнить recollindex chdir для перехода в какой-нибудь временный каталог. Пустое значение приводит к сохранению текущего каталога. Если указано значение tmp (буквально), то будет использоваться временный каталог в соответствии с установками окружения (RECOLL_TMPDIR, TMPDIR или /tmp). Если же указан абсолютный путь к каталогу, то будет использоваться этой абсолютный путь.

checkneedretryindexscript

Сценарий для эвристической проверки необходимости переиндексации файлов, предыдущая индексация которых завершилась с ошибкой. Сценарий по умолчанию проверяет даты изменения каталогов /usr/bin и /usr/local/bin. Сначала просматривает относительный путь в каталогах фильтров, а затем и в пути основного каталога. Избежать этой процедуры можно при указании абсолютного пути.

recollhelperpath

Дополнительные пути для поиска исполняемых файлов вспомогательных программ. Может применяться, например, на Windows в коде Python, и на Mac OS с помощью упакованного recoll.app (потому что у меня так и не получилось найти надёжный метод передачи в launchd значения для установки PATH). Пример внизу предназначен для Windows. Для Mac и Ux-подобных систем в качестве разделителя элементов используется «:», для Windows необходимо использовать только «;».

idxabsmlen

Длина описаний, сохраняемых в процессе индексирования. Recoll хранит описание для каждого индексируемого файла. Текст описания может быть взят либо из настоящего раздела «abstract» в документе, либо просто из начала документа. Он хранится в индексе для возможности отображения описания в составе списка результатов без декодирования исходного файла. Параметр idxabsmlen определяет размер этого описания. Значение по умолчанию составляет 250 байт. Интерфейс поиска позволяет отображать либо этот сохраняемый текст описания, либо синтетическое описание, построенное путём извлечения текста вокруг элемента поиска. Если предполагается использовать синтетическое описание, то значение можно уменьшить для экономии дискового пространства.

idxmetastoredlen

Обрезка длины сохраняемых полей метаданных. Параметр влияет не на индексирование (в любом случае обрабатывается всё поле), а лишь на размер данных, хранящихся в индексе для отображения полей внутри списка результатов или при просмотре. Значение по умолчанию (150 байт) может оказаться слишком низким при наличии пользовательских полей.

idxtexttruncatelen

Обрезка длины текстов всех документов. Индексируется только начало документа. Не рекомендуется, кроме случаев полной уверенности в том, что интересующие ключевые слова находятся в начале документа, а также при серьёзной нехватке дискового пространства.

idxsynonyms

Имя файла синонимов, используемого при индексировании. Используется при индексировании синонимов, состоящих из нескольких слов, составляющих единый элемент поиска. Может быть полезен только при выполнении поиска по близости с указанными элементами.

idxniceprio

«Правильный» приоритет для процессов индексирования. По умолчанию: 19 (наименьшее) Появилось начиная с версии 1.26.5. В предыдущих версиях значение 19 было фиксированным.

noaspell

Отключение aspell. Формирование словаря aspell занимает время, причём некоторые комбинации версии aspell, языка и используемых элементов поиска приводят к сбою aspell. Поэтому иногда имеет смысл просто отключить эту функцию.

aspellLanguage

Определение языка, используемого при создании словаря aspell. Значение должно совпадать с набором файлов определения языка aspell. Для просмотра списка можно ввести «aspell dicts». Если значение не задано, то по умолчанию для определения значения используется окружение NLS. Значения задаются в виде двухбуквенных кодов языка (например, «en», «fr»…)

aspellAddCreateParam

Дополнительный аргумент и параметр для команды создания словаря aspell. Для некоторых пакетов aspell может потребоваться дополнительный параметр (например, на Debian Jessie: --local-data-dir=/usr/lib/aspell). См. баг Debian 772415.

aspellKeepStderr

Устанавливается для просмотра ошибок при создании словаря aspell. Их всегда много и данный параметр используется для отладки.

monauxinterval

Интервал обновления вспомогательной базы данных. Индексатор режима реального времени только периодически обновляет вспомогательные базы данных (stemdb, aspell), потому что было бы слишком дорого делать это при каждом изменении документа. Период по умолчанию составляет один час.

monixinterval

Минимальный интервал (в секундах) при обработке файлов в очереди индексирования. В режиме реального времени индексатор не обрабатывает каждый процесс по мере его поступления, но накапливает очередь с уменьшением верх и группирует вместе несколько событий, воздействующих на один файл. По умолчанию 30 с.

mondelaypatterns

Временные параметры для индексирования в режиме реального времени. Можно использовать определения для файлов с более длительной задержкой до получения возможности повторного индексирования. Данный параметр предназначен для быстро меняющихся файлов, переиндексирование которых выполняется лишь время от времени. Состоит из списка пар шаблон_с_символами_замещения:секунды. Совпадение шаблонов проверяется с помощью fnmatch(шаблон, путь, 0). Элементы с пробелами можно заключать в двойные кавычки (в кавычки заключается весь элемент целиком, а не только шаблон). По умолчанию имеет пустое значение. Пример: mondelaypatterns = *.log:20 "*с пробелами.*:30"

monioniceclass

Класс ionice для процесса индексирования. Не смотря на обманчивое имя, на поддерживающих платформах данный класс влияет на все процессы индексирования, а не только на те, которые происходят в режиме реального времени/мониторинга. По умолчанию имеет значение 3 (использовать самый низкий приоритет «Idle»).

monioniceclassdata

Уровень класса ionice, если он поддерживается классом. По умолчанию имеет пустое значение, поскольку класс по умолчанию «Idle» не имеет уровня.

Параметры времени запроса (не оказывают влияния на индекс)

autodiacsens

Автоматическое включение чувствительности к диакритическим знакам (только в случае неурезанного индекса). Если индекс не урезан, то активировать чувствительность к диакритическим знакам можно автоматически при наличии таких знаков в составе поискового запроса (не в unac_except_trans). В противном случае для указания чувствительности к диакритике необходимо использовать язык запросов с модификатором «D». Значение по умолчанию: no.

autocasesens

Автоматическое включение чувствительности к регистру (только в случае неурезанного индекса). Если индекс не урезан (см. indexStripChars), то активировать чувствительность к регистру можно автоматически при наличии символов в верхнем регистре в составе поискового запроса в любой позиции в слове, кроме первой. В противном случае для включения чувствительности к регистру необходимо использовать язык запросов с модификатором «C». Значение по умолчанию: yes.

maxTermExpand

Предел расширения запросов для одного элемента поиска (например: при использовании символов подстановки). Влияет только на запросы, а не на индексирование. Ранее такой предел не устанавливался (за исключением предела на имена файлов, где ограничение имело слишком малый размер: 1000), но с большим индексом использовать такое значение нецелесообразно. Значение по умолчанию 10000.

maxXapianClauses

Максимальное число выражений в одном запросе Xapian. Влияет только на запросы, а не на индексирование. Во многих случаях результат расширения элементов поиска может иметь мультипликативный эффект, при котором необходимо избежать поглощения всего объёма памяти. Значение по умолчанию 50000.

snippetMaxPosWalk

Максимальное число позиций для обхода в процессе составления фрагмента для списка результатов. Значение по умолчанию в размере 1,000,000 может оказаться недостаточным для очень больших документов, что может привести к получению фрагментов, не содержащих слова, которые могут изменить смысл отрывка.

thumbnailercmd

Команда для создания миниатюр. При использовании параметра значение должно представлять собой путь к команде или сценарию, за которым следуют её постоянные аргументы. Четыре аргумента присоединяются перед выполнением: URL-адрес документа, MIME-тип, размер (SIZE) целевого значка (например, 128), и путь (PATH) файла вывода. Команда должна формировать миниатюру из этих значений. Например, если MIME-тип представляет собой видео, то сценарий может использовать параметр: ffmpegthumbnailer -iURL -oPATH -sSIZE.

stemexpandphrases

Значение по умолчанию для применения расширения по словоформам к элементам поиска в составе фразы. Recoll обычно не применяет расширение по словоформам к словам в составе фразы. Установка этого параметра изменит поведение по умолчанию, после чего расширение по словоформам будет применяться и для слов в составе фразы. Если параметр включен, то отключить его можно с помощью модификатора «l», чтобы поиск по словоформам в составе фразы не применялся для конкретного экземпляра поиска.

autoSpellRarityThreshold

Инверсия отношения частотности элемента поиска к общему количеству элементов поиска в базе данных, по которым выполняется поиск орфографически близких слов для автоматического расширения запроса. Когда элемент поиска встречается очень редко, можно (на выбор пользователя) просмотреть более распространённые варианты орфографии и, возможно, добавить их в запрос.

autoSpellSelectionThreshold

Пороговое значение отношения частотности орфографически близких слов к частотности элемента поиска во вводе пользователя, при превышении которого орфографический вариант добавляется в запрос. При выборе элементов для расширения по словоформам учитывается редкость его использования, в связи с чем включаются только такие орфографически близкие слова, которые являются более общеупотребительными согласно указанному соотношению.

kioshowsubdocs

Отображение результата поиска вложенных документов в KDE dolphin/kio и krunner. Вложенные документы могут привести к беспорядочному отображению результатов поиска и не всегда легко применяются из окружения kio или krunner. Установка этой переменной приведёт к отображению результатов только для отдельных (не-вложенных) документов.

Параметры для сценария ввода PDF

pdfocr

Попытка выполнить распознание текста (OCR) для файлов PDF, не имеющих текстового содержимого. Можно определить для подкаталогов. По умолчанию отключено по причине медленной работы OCR.

pdfattach

Активация извлечения вложения PDF с помощью pdftk (при его наличии). Обычно этот параметр отключен в связи с тем, что приводит к некоторому замедлению процесса индексирования PDF даже при отсутсвии каких-либо вложений.

pdfextrameta

Извлечение текста из выбранных тегов метаданных XMP. Это разделённый пробелами список классифицированных имён тегов XMP. Каждый элемент списка может содержать второе имя, отделённое символом «|», для преобразования имени тега в имя поля Recoll. В случае отсутствия второго элемента, в качестве имени поля Recoll будет использоваться имя тега. При этом также придётся добавить спецификации полей в файл «fields» для непосредственной обработки извлеченных данных.

pdfextrametafix

Имя сценария обработки полей XMP. В данном параметре указывается имя загружаемого сценария для изменения значений поля XMP. Сценарий должен включать определение класса «MetaFixer» и использовать метод metafix(), который вызывается с указанием классифицированного имени тега и его значения для каждого выбранного поля с целью его изменения или удаления. Для каждого документа создаётся новый экземпляр, чтобы объект мог сохранять его состояние, например, для устранения дублирующих значений.

Параметры для обработки OCR

ocrprogs

Используемые модули OCR. Сценарий OCR верхнего уровня будет пытаться загружать модули по порядку и применит первый, позволяющий выполнять распознавание текста в индексируемом файле. Модули для tesseract (tesseract) и ABBYY FineReader (abbyy) имеются в наличии в стандартном дистрибутиве. Для совместимости с предыдущей версией при отсутствии значения у данного параметра по умолчанию используется значение «tesseract». При необходимости можно использовать преднамеренно пустое значение, а при указании «abbyy tesseract» программа будет пытаться загружать модули из списка.

ocrcachedir

Место расположения данных кеширования OCR. Если указано пустое или неопределённое значение, то по умолчанию данные кеша OCR будут размещаться в $RECOLL_CONFDIR/ocrcache.

tesseractlang

Язык для распознавания текста в tesseract. Увеличивает точность распознавания. Может быть также задан через содержимое файла в обрабатываемом каталоге. См. сценарий rclocrtesseract.py. Примеры значений: eng, fra… См. документацию к tesseract.

tesseractcmd

Путь для команды tesseract. Без кавычек. Главным образом, используется в Windows, либо для указания нестандартной команды tesseract. Пример использования в ОС Windows: tesseractcmd = C:/ProgramFiles(x86)/Tesseract-OCR/tesseract.exe

abbyylang

Язык для распознавания текста в abbyy. Увеличивает точность распознавания. Может быть также задан через содержимое файла в обрабатываемом каталоге. См. сценарий rclocrabbyy.py. Примеры значений: English, French… См. документацию к ABBYY.

abbyyocrcmd

Путь для команды abbyy. Каталог ABBY обычно не включается в стандартный путь, и поэтому нуждается в указании.

Параметры для распознавания речи

speechtotext

Включить распознавание речи. На данный момент единственно возможным значением является «whisper» для использования с программой OpenAI whisper.

sttmodel

Имя модели whisper

sttdevice

Имя устройства, используемого для whisper

Параметры для прочих специальных обработчиков

orgmodesubdocs

Индексирование разделов первого уровня в файлах org-mode в качестве отдельных поддокументов. Установлено по умолчанию. Если задано значение false, файлы org-mode будут индексироваться как простой текст

Параметры для особых мест размещения

mhmboxquirks

Использование особенностей формата mbox thunderbird/mozilla-seamonkey. Устанавливается для каталога расположения файлов mbox электронной почты.

5.4.3. Файл fields

Данный файл содержит информацию о динамической обработке полей в Recoll. Значения отдельных самых основных полей заданы в коде программы, и в целом изменение исходного содержимого в файле fields не приветствуется. Но при этом можно создавать пользовательские поля, размещать в них свои данные и обрабатывать их точно также, как исходные.

Файл fields имеет несколько разделов, каждый из которых определяет какой-то один аспект обработки полей. Для настройки соответствующих аспектов в работе программы довольно часто приходится изменять несколько разделов файла.

Здесь даётся лишь краткое описание. Для получения более подробной информации см. комментарии в файле по умолчанию.

Имена файлов должны содержать только буквенные ASCII-символы в нижнем регистре.

[prefixes]

Поле становится индексируемым (доступным для поиска) при определении префиксов в данном разделе. Существует более полное объяснение по префиксам, которые используются в стандартной установке recoll. Здесь укажем кратко: расширенные префиксы должны быть в верхнем регистре, начинаться с XY и иметь небольшой размер. Например, XYMFLD.

[values]

Поля, перечисленные в этом разделе, будут храниться как значения Xapian в составе индекса. Это позволяет использовать их в интервальных запросах для фильтрации результатов по значению их поля. В настоящий момент эта функция поддерживает строки и целочисленные значения. См. более подробную информацию в комментариях к файлу

[stored]

Поле становится сохраняемым (отображается в составе списка результатов) после добавления его имени в этот раздел (обычно с пустым значением).

[aliases]

В этом разделе определяются списки псевдонимов для канонических имён, используемых в разделах [prefixes] и [stored]

[queryaliases]

Данный раздел также содержит определения для псевдонимов канонических имён полей, с той разницей, что подстановка будет выполняться только в процессе запроса во избежание любой возможности получения в качестве значения случайных метаданных из документов.

Специальные разделы для программ-обработчиков

Некоторым обработчикам ввода могут быть необходимы особые параметры конфигурации для обработки полей. В настоящий момент такой специальный раздел имеет только обработчик сообщений эл. почты (с именем [mail]). Это позволяет индексировать произвольные заголовки эл.почты в дополнение к индексируемым по умолчанию. В будущем могут появиться и другие подобные разделы.

Далее следует небольшой пример пользовательского файла fields. Здесь будет извлекаться заданный заголовок эл.почты в качестве поля для поиска, а данные будут отображаться в списках результатов. (Замечание: поскольку обработчик эл.почты не декодирует значения, то индексироваться могут только простые заголовки в ascii-тексте, а для повторяющихся заголовков будет использоваться только первый экземпляр).

[prefixes]
        # Индексировать содержимое поля mailmytag (с заданным префиксом)
        mailmytag = XMTAG

        [stored]
        # Сохранять поле mailmytag в записи данных для документа (для возможности
        # отображения в виде %(mailmytag) в списке результатов).
        mailmytag = 

        [queryaliases]
        filename = fn
        containerfilename = cfn

        [mail]
        # Извлекать заголовок почты X-My-Tag и использовать его для внутренних целей
        # совместно с полем mailmytag
        x-my-tag = mailmytag
        

Расширенные атрибуты в файле fields

По умолчанию Recoll обрабатывает пользовательские расширенные атрибуты файлов как поля документов.

В Linux атрибуты обрабатываются как поля с точно таким же именем после удаления префикса user.

В разделе [xattrtofields] файла fields можно задать преобразование имён расширенных атрибутов в имена полей Recoll.

Преобразования имён задаются в виде строки имя_расш_атрибута = имя_поля. Имена чувствительны к регистру. Например, ниже показан пример преобразования расширенного атрибута «tags» в поле «keywords»: tags = keywords.

Ввод пустого сопоставления сделает использование атрибута невозможным.

Значения из расширенных атрибутов не изменяют данные из аналогичных полей внутри документа. Вместо этого происходит объединение значений.

Особый случай: расширенный атрибут с именем modificationdate задаёт поле dmtime (дата документа) только в том случае, когда оно не задано во внутреннем поле документа (например, поле Date: эл.почты).

5.4.4. Файл mimemap

Файл mimemap указывает расширение имени файла для сопоставления MIME-типов.

Для имён файлов без расширения или с неизвестным расширением современные версии Recoll будут использовать libmagic. Более старые версии воспользуются системной командой (file -i или xdg-mime) определения MIME-типа (функцию можно отключить или изменить команду в основном конфигурационном файле).

Все значения расширений в mimemap должны вводиться в нижнем регистре. Расширения имён файлов переводятся в нижний регистр для сравнения в процессе индексирования исходя из того, что в верхнем регистре совпадение с элементом mimemap невозможно.

Сопоставления могут быть представлены в виде поддерева, что иногда может быть полезно. Пример: заметки в программе okular имеют расширение .xml, но требуют специальной обработки, которую несложно реализовать, так как все они обычно находятся в одном месте. Например:

[~/.kde/share/apps/okular/docdata]
        .xml = application/x-okular-notes

Переменная recoll_noindex была перемещена из mimemap в recoll.conf и переименована там в noContentSuffixes, однако сохраняла свою функцию до версии Recoll 1.21. Для более старых версий Recoll, см. документацию по noContentSuffixes, но в mimemap необходимо использовать recoll_noindex.

5.4.5. Файл mimeconf

Основная задача файла mimeconf состоит в выдаче указаний по обработке различных MIME-типов для индексирования. Это делается в разделе [index], который не должен подвергаться случайному изменению. См. комментарии в файле.

Данный файл содержит и другие определения, оказывающие определённое влияние на язык запроса и графический интерфейс, которые, судя по всему, надо было изначально разместить в каком-то другом месте.

Раздел [icons] позволяет изменять значки, отображаемые графическим интерфейсом recoll в списке результатов (значения параметров представлены в виде базовых имён изображений png в каталоге iconsdir, который задан в файле recoll.conf).

Раздел [categories] определяет группирование MIME-типов в категории, используемые при добавлении выражения rclcat к запросу на языке запроса. Выражения rclcat также по умолчанию используются при нажатии кнопок guifilters в графическом интерфейсе (см. далее).

Элементы управления фильтрами находятся в верхней части окна графического интерфейса recoll в виде флажков непосредственно над списком результатов или в виде выпадающего списка в области инструментов.

По умолчанию они обозначаются следующими надписями: медиа, сообщение, прочее, презентация, таблица, текст, и каждая из них сопоставлена с категорией документов. Эти категории определяются в разделе [guifilters], где каждому элементу управления назначается переменная, содержащая соответствующее выражение на языке запроса.

Уверен, что простой пример ниже расставит все точки над и.

[guifilters]

Big Books = dir:"~/My Books" size>10K
My Docs = dir:"~/My Documents"
Small Books = dir:"~/My Books" size<10K
System Docs = dir:/usr/share/doc
        

Представленное выше определение приведёт к созданию четырёх флажков фильтра, с надписью Big Books, My Docs и т.д.

Текст после знака равно должен представлять собой допустимое выражение на языке запросов, и при нажатии кнопки будет объединяться с остальной частью запроса с помощью оператора AND.

Любой текст в составе имени перед символом двоеточия не отображается на экране, но применяется для сортировки. Можно использовать его для установки флажков в любом порядке. Например, представленное ниже определение практически полностью соответствует приведённому выше, но располагает флажки в обратном порядке.

[guifilters]

d:Big Books = dir:"~/My Books" size>10K
c:My Docs = dir:"~/My Documents"
b:Small Books = dir:"~/My Books" size<10K
a:System Docs = dir:/usr/share/doc
        

Как уже можно было предположить, раздел [guifilters] по умолчанию выглядит следующим образом:

[guifilters]
text = rclcat:text
spreadsheet = rclcat:spreadsheet
presentation = rclcat:presentation
media = rclcat:media
message = rclcat:message
other = rclcat:other
        

5.4.6. Файл mimeview

Файл mimeview содержит указания по запуску соответствующих программ при нажатии ссылки Открыть в списке результатов. Например: HTML обычно открывается с помощью firefox, но его можно заменить на Konqueror, программа openoffice.org на конкретной машине может иметь имя oofice вместо openoffice и т.д.

Изменения в этот файл могут быть внесены путём непосредственного редактирования или с помощью диалога настройки параметров графического интерфейса recoll.

Если в параметрах конфигурации графического интерфейса Recoll установлен флажок Использовать настройки окружения для выбора редактора документов, все записи в mimeview будут проигнорированы, за исключением одной единственной записи для элемента application/x-all (по умолчанию использует xdg-open).

При этом переменная верхнего уровня xallexcepts определяет список исключений MIME-типов, обрабатываемых в соответствии с локальной настройкой, а не согласно окружению рабочего стола. Это делается для того, чтобы специальные параметры Recoll, такие как номер страницы или строка поиска, могли быть переданы приложениям, которые их поддерживают, например, просмотрщику evince.

Что касается других конфигурационных файлов, то в конфигурационном каталоге пользователя обычно тоже содержится файл mimeview, включающий только те записи, которые не соответствуют конфигурации по умолчанию, с целью переопределения параметров основного конфигурационного файла.

Все строки определения просмотрщиков должны размещаться в разделе [view].

Ключи в данном файле обычно представлены MIME-типами. Допускается добавление тега приложения для указания выбранной области файловой системы (в виде указания localfields в mimeconf). Для записи ключа используется следующий синтаксис: mimetype|tag

Строка nouncompforviewmts (размещается на верхнем уровне за пределами раздела [view]) и содержит список MIME-типов, которые не должны разархивироваться до запуска просмотрщика (если окажутся в сжатом виде, например: mydoc.doc.gz).

С правой стороны каждой строки содержится команда, выполняемая для открытия файла. При этом производятся следующие замены:

  • %D. Дата документа

  • %f. Имя файла. Может быть представлено именем временного файла, который требовалось создать (например: для извлечения поддокумента из контейнера).

  • %i. Внутренний путь для поддокументов контейнеров. Формат зависит от типа контейнера. Если параметр используется в командной строке, Recoll не будет создавать временный файл для извлечения поддокумента, предполагая, что вызываемое приложение (возможно, сценарий) само способно справиться с этой задачей.

  • %M. MIME-тип

  • %p. Индекс страницы. Имеет значение только для подгруппы типов документов и на данный момент включает только файлы PDF, Postscript и DVI. Если параметр задан, то из запроса выбирается важный элемент поиска и %p заменяется на номер первой страницы, содержащей данный элемент. Можно использовать для того, чтобы открыть редактор на нужной странице, содержащей совпадение или фрагмент.

  • %l. Номер строки. Имеет значение только для типов документов, имеющих разрывы строк. Главным образом, text/plain и их аналоги. При установке параметра в запросе выбирается важный элемент поиска и %l заменяется на номер первой строки, содержащей данный элемент.

  • %s. Элемент поиска. Значение устанавливается только для документов с индексацией номеров страниц или строк, а также при использовании параметров %p или %l. Значение будет содержать один из совпавших элементов поиска. Позволяет передавать значения элемента в строку «Поиск» для обеспечения его подсветки, как, например, в приложении Evince.

  • %u. Url-адрес.

В дополнение к описанным выше предустановленным значениям, все строки вида %(fieldname) заменяются значениями поля с именем fieldname для данного документа, что в комбинации с настройками полей можно использовать для обеспечения открытия документа.

5.4.7. Файл ptrans

Файл ptrans задаёт варианты преобразования путей в процессе поиска. Имеет множество различных применений.

Файл содержит раздел для любого индекса, которому необходимо преобразовать пути, как главного, так и дополнительного. Разделы названы в соответствии с именами каталогов индекса Xapian. В конце путей не должно быть символов косой черты (все сравнения исключительно текстовые). Представленный ниже пример наглядно демонстрирует указанные особенности.

          [/home/me/.recoll/xapiandb]
          /this/directory/moved = /to/this/place

          [/path/to/additional/xapiandb]
          /server/volume1/docdir = /net/server/volume1/docdir
          /server/volume2/docdir = /net/server/volume2/docdir
        

5.4.8. Примеры настройки конфигурации

Добавление внешнего просмотрщика для неиндексированного типа

Представьте, что у вас имеется некий файл, в котором отсутствует индексируемое содержимое, но для него необходимо создать рабочую ссылку Открыть в списке результатов (при поиске по имени файла). Имена файлов заканчиваются на .blob и открываются в приложении blobviewer.

Для решения этой задачи в конфигурационный файл необходимо ввести две строки:

  • В $RECOLL_CONFDIR/mimemap (обычно ~/.recoll/mimemap) нужно добавить следующую строку:

                .blob = application/x-blobapp
              

    Прошу заметить, что здесь используется абсолютно вымышленный MIME-тип, который с таким же успехом можно было бы назвать diesel/oil.

  • В раздел [view] файла $RECOLL_CONFDIR/mimeview нужно добавить:

                  application/x-blobapp = blobviewer %f
                

    Здесь предполагается, что blobviewer будет получать параметр с именем файла, в качестве которого можно использовать %u, если URL-адрес окажется более предпочтительным.

Если предполагается всего лишь сменить приложение, используемое в Recoll для отображения MIME-типа, который ему уже известен, то достаточно внести изменения в файл mimeview. Строки, вводимые в файле пользовательской конфигурации, переопределяют настройку общесистемной конфигурации, менять которую нет никакой необходимости. Изменения в mimeview можно вносить и с помощью графического интерфейса.

Добавление поддержки индексирования для нового типа файлов

Теперь давайте представим, что вышеупомянутые файлы .blob на самом деле содержат индексируемый текст, который можно извлечь с помощью программы в командной строке. Настроить Recoll для индексации файлов будет несложно. Необходимо внести вышеуказанные изменения, а также добавить в файл mimeconf (обычно ~/.recoll/mimeconf) следующие строки:

  • Добавьте следующую строку в раздел [index], (более подробная информация о сценарии индексации rclblob будет представлена позже):

    application/x-blobapp = exec rclblob

    Если же файлы имеют текстовый формат и не требуют специальной обработки для индексирования:

    application/x-blobapp = internal text/plain
  • В разделе [icons] необходимо выбрать значок для отображения файлов внутри списков результатов. Обычно используются значки размером 64x64 пиксела в виде файлов PNG, которые находятся в /usr/share/recoll/images.

  • В разделе [categories] необходимо добавить данный MIME-тип в необходимые категории (либо создать собственную). Категории можно использовать для фильтрации в сложном поиске.

Обработчик rclblob должен быть исполняемой программой или сценарием, который находится в каталоге /usr/share/recoll/filters. Имя файла будет передано ему в качестве аргумента, после чего он должен выдать содержимое файла в виде текста или html в стандартный вывод.

Раздел, посвещённый программированию фильтра, содержит более подробную информацию о создании обработчика ввода.

recoll-1.43.12/doc/user/frag-sample.png0000644000175000017500000004314215121730572017102 0ustar dockesdockesPNG  IHDR~CsBIT|d IDATx{\G'%!tB*)DIXaCBCβχ>ќbsf1Vs̘3P*z׵wnuzԨdԩAA7|VqX?vLf9AATի4iDSk55(ХKCAAAe8v|jteMAAPFѿ988# ;[!&?Ҥ\=mNxRU6B&=yEP't\AAjE.]i w:AA䙙иq|AAOAAT!&YnTMZKj@GTl+jQeF9AAL&*pSkn9JMr {6:%e ׺NciݧEt  KG  «Oa /GLL ;)))<{ ###\]]ի'^˗/ɓ'Uϙ3֭[+XBg޼yJYzuUy~:◫-7\ ӣ_ƭ :hKJe4) K#B~w<1fBGG08@rr2G~Y֘1c֭ ~za;wpQwA1ÑdE實 G9izm;~/rBeL X͕_]kҭ[HOOҒ:`dd-\vMn^///tuuАdRSS'?? 5khUݻw3w\Ν]GE899Ibb"EEEܾ}LLLUVRKWWWh޼9J_̬>իX[[˥Q..IIIĠѣEOSyK_͞L&#<<ϿUKэimՖ+>>>rrRrGy  ߭hx!5*SRR"W{KEWוy1weܹr222h7U$]\\8z(.]''Ș1cpvvV8:JKK駟v999 ;;l@~[k!7^vO[~>nӨW[[[:t@ll,wАQ:wMcסO{{ZWIr,[hɊqEښ\ׇdr|Vuʛ 4m۶EKKbݻGv퀲Py˵={ MM*-_m۶eƌuʇ+ /_FMM 55ZUjիo ,ٳgҴiSPhU| BҸqc_<ȸq&,,RI&nݒK###֖tΞ=Kݥt100VJRc޺xPB'8}4[傂γv\髼?_+OCCCN:ņ (,,͍aÆI5NRKK{~PPP1nnnXXX(͇TSek|G >eغu>P}Ro߾dffrAߏ?۷Ç|wj- > h޼9-[m۶^ DBxSY/??HpppEddd@GGGUזA=/:*yԛϕ+Wx뭷M6ꢫ9;v_~\|BUR{2rZCCCTKHH򥭿6f͚_v6^;bTŋk?8Gu{y旚мRPס|xHJ*~ՋMJ222Ȑ Jݻ7vRE._L֭)..͙3GYftCCCڴiàAvJQ]vKeuc_{/֭=zq)))*[ÇfllL=WY$ j:^ۇ'&&&0k,?~,+2ˇ׈3e233UR_||<rA9qD<<<`xHHHj_I;wF]]WJΜ9C6mswwWGMzz:ׯ_An ERIMM~wVEv݉Ϝ9MqnZ677'==w2gOU^DȬY}61tP T*^v_ίJrr2K.U:C+~K'NҥK`ccÅ * M6k T&$$#F0sL<<}:444ѣTP=~\F%7.66V 찰0ܰۛwʥW_akkKǎꫯjWjjjhjjҬY3ƍGbb"3uTlllptt/cXYYѶm[}.^:%&&ӧqrr\\\Ύo7EƋ:::OKK /_;Cii),[Ν;cnnNz9R.&~g/ >|gggYpa啝<<<8wϞ=ٳL>hqs5 8qB. %Æ #99}..JӧL:vammM߾}SQPP)))Ν;kL!QuGtRF666w}u bḹ1p@Ott4۷kgϞUkPr.僺:XXX0di5]ׯ_/2aʳ(^=eeeuJneeӧZh!N<ɤIdŊ*lƍiӦ\t۷o3a„:oÏ?ݻ9vϟ?i͚5;wǏMnn.+VP;gΜ )777Ƶn N<ɢEزe 0I&!DGGΧ~ZGڵVZѤIBnllLLL GaΝDDDtRHbb"nbʔ)u,_^z-]}6mĽ{8w }Txxhٲe… ؾ};7oF]]UVq):Ľ{Xv-5SIIIL6uG͹r4]9^Q.](--(9sOOO:t 7ݝL|||6m[Ҥvիsvvv(ݞ"Z6ύ7?T鮭kҺuk;7nJ;Puc.7^GG~[f˖-DEEʪU䄱޽{yw.僲ryˇT:$&tMC}|xsqq///x 7o͛Z }}}5jNK0M7?c,YBVe޼y߿_aZR넋 W\ƕl߾:w3f 55DJKKYhWcߣݻwchh9#$$555nݺŵkXl::: m$''ӨQ#uV}&ׯ_ɓ'`ooth׮+/tttغu+K,ߟUVannXsssڵ+zzzuZO>hjj2{lr񊴴puu̙3dggNٳ4?Ã}ѥK|||͍7xGJйsgٳ<|Pv$%%I}Og}m"==8ҥ uڇtL1002Dߛ/Z^X1cl=yR>(+wZ>ұcGXr%E]EԻ׼ysie˖=ILLCCC,_u@KKL>WWW\]]󣸸*i9;;SXX9s ={DGG+++i\MRR[n->zmmm]sssRSSݎ1cƐō7wwwi=9999\b郛[Gk׮]>|ybFme:uJ?STT$u'++Kjz^cGSS6mH[DѣT񋊊UVX[[ĥK=wܣj333zzzV?dee&N(םm7n}aĉٱtRt}t_7-ZPXXȓ'OLKKKV,wtuuʃ/G%''Rmږ)wZ>|<~ǏCu\Y|xy-[J'Oٳ;w.xMׅDjw_۶my9<ϟeeecooͥg*ё_{IPhh)&Ô $--cǎU/wwwlBQSS͍-[мyslllt?s._L&#''Hwt|q-*}S@Ϟ=ٸq#Lnn.J8p騩add$u&777oe{ȈK9phkkchh (U(^Sx)..@e7K.e˖-lٲM6IoN0ŋJKKzOرC6dN8!۷Osݻݻ>޽[z MTTSXXٳgIJJڷo111b z聱}Ì3Xzm8uwA&ѼyskNeFFFro֔nCxf,Ypcĉ4k֌?W>G͗_~իW:th֥|ܩO0a޽k,j;::%pRw3EjQI?"##傳A岲8{s;wt;;j[>cBBBbѢE[Ҵ#Gү_?årݝ~6m0tP2鸹IȐ}b fϞ=z ""BѡC>|8׿5k_5'dffҭ[79stΜ9C^dҤIlܸ͛g}4h; ջwod2mۆ=|ro5d⥲K`` 7ٳg.]`eeG}D@@̟?={2p@,--;wۉ{=rssqwwg̘1Kfaa cȐ!?]JӕL~~>:uٓtůUVBppp>{:f7غuk%Iĉ5n9l2,--ٶm[64I&n:֯_  ȈC=wmܩO?| jjjՖ5]{ɐ!CwޑQ(^-jlr#Oaa!OΎMJϙdgg+gNċ /...^//At_}V6^^^Ǔ,RohhH˖-۷V%=/P{zDDDPXX!_IAW1^~}LAxթ'  EutW=AAh DOA?AABTAAQAAh DOA?AABTAAQAAh DOA?AAB7>> h޼9-[m۶^ 4"z">TV'22hѢpq<>C IDAT<|ԩSС̘1Ca:&&&H,]LիС:ub޽r|rO*\OM&$$`iiɶmС۷g޽DFFꊥ%K,ᅬ%nnnDFFJә:u*6668::_Hrrr2e VVV-n\\ܜQFM KKK{nHپMLL+++\]] l2:w9k:!!!=@ڴi+ׯ_֖t8pD`` O>eԩkkkkKnnn:JeqUXXG}ҥK9r$Bff&}P(((ÇINN^tt4۷XAϞ=?"",--o!11`N>Y'''ڴiC޽ߥt]j:7KJJ?~<666XYY1rH߿0yyybkkKǎYl%%%_q~zC׮]/erhhvZ찴{\pAᾩ->/ %Æ k4hT68qB8|0X[[p*QSlيĉ z-ŋqvvKo߾?~(;}C ooo222={6mڴݝ۷oKTAAA燓;wTYQ[eeeuJneeӧZh!N<ɤIdŊ.ƍiӦ\t۷o3a„:oÏ?ݻ9vϟ`͚5;wǏMnn.+VPysss'::7i&>̩S ʕ++$$$O<*pvIDD/&//?;wJi2n8 @bb">wߋ-b˖-$$$0`&ML&Sl]mii)~~~tڕX _jNСCܻwkҨQ#dz|yzzA;v, \v 60gju̪;FŰa $::B~~>7n >>?hii*UPW111<~Çˍߖlٲ(\]]YjU066.P֯wUM6q=Ν;;,_^z-p1ݻә2e RZeL&c\z[naff|0/z19W_}%M~ȑ#]{u^4~:!!!:u{?ҺuZ幢[|(u9^Pօbܹs;;;LJiӦϺu'-- HJJbڴi[87o.WVTn([ƍ… חQFI޽{Yr%ѯ_?x ߿\LMoPk׮u|wDGG3n8Z|WWWHJJɓ'ܼy7oj*iԨQwT5 cڴiXXXиqc>C;v`ɒ%j ]]]͛Wd2.\DSS)S`ddH0vX444]v;v[nq5-[fffH g4n N*Ç DSS>}oJӷoN@@;wFCC3fJbbeo_΃7o5G5Jj aŊN׮]ӫ!sШQ#|}}y~d}ٳTn([2epwwghiiT9O\8::Ҹqc ~/oYTV«]ns.͛7'##sssZl;.\Z( e444"//dZn]WҰ+X瓙*oŔ^yiܸt)F_勢94mڔݥiEEEۓGNNN۔ '%%qܹ*-y=ɓ'5.[YM6-- ; ^J~~>YYYX[[WvM*SE=//VǬOQ!1n8Ҙ8q"yyy;EIiVŸ eqբE WEiiir'X/W&''Rmͮ]Xf t҅˗ӵkW|WÇ ꎇٳg\C:yyy]d>}Jvvܾ 55UnҤ\+Bmϧ hxagg㏉孷bʕrS|fxXnahhHjj*III\tI@Y''ZijjҦMirCٲ&{y|:.+-˽r]kٲ%999ۙ"""ԩݻwU~{ĉ:t###ҰG&-ӸqcIJJΩRO ->%l̘1<~]O?NEyyydeeajj{&44TrʍK._ܭܸtRVԤIjcx7ʼrom۶͛rM۷o?^җEllʾnoo='77j8::믿eKg>>>JonUɓY`Liii;vLz2oműgJKKٿ?qqqxyyaoo RZZJllٲe PvG ݻw9r6|\|LFNNT鲕մo033O> .&}c„ ,^PZZիW5Ϻ1322{[ԩSܹsLFz:+mmm/^̒%K';;8&NHf?~|0zhK^СCΓρG[[CCCiq}|NNocǎ_(;7166@EFɪUx [t|jh˹s())AOO==rc߾}P\\̊+ѣx{{Exx8rYˍ!Cp 配}I}˷rCٲ)Gdd$Gm۶TrMe^RFY̋*7jK%}<<< BCCC,Ξ=\}𪣦Ν;y1;wή;?Xho4mȑ׏}2|p䖝7o۴iӆCJ'Oeu6|M~wXj4k 555BCC̤[nX[[3sL,_L郟 TWW'44͛73`/^,wgѷo_VXٳGDDDtjڷܹ .`cc̙3O֭ϧgϞ 8KKKΝ+Uj:uUcǕ+Wbڴiܿ___ eҥmۖݻwg4iT|g?A\WYL`` ˖-rVd/h|ӧOcggGӦM>dggKϞ=ş:xŅիW 4L">fr_}V6^^^Ǔ,:ohhH˖-ş[UDD/=B$CNerڵ]vNVW1~:7o~΂*">T^at ^]6DA?AABTAAQAAh DOA?AABTAAQAAh DOA?AABTAAz۷o[e#EjGĊ ҽ{:-sV^K"^vD‹Q*ym̚5m"D~={ƴi8qxyyqaCJJ ΤlXTa޽ݻW+ǯwFr999tԉQn~J~(--}!-))!((]bjj租~|||HMM:u~6m\%8  ={̙3/d;2 %^^'NH\\~-L4egK+O<'''d24ӧi33N;""bff%cǎ"r߿I̟?_:pB233yWyfΜUU֯_Ojj۽{Βa͛'qqq|lܸuLƳgƕPZZ7|Ctt4L:8)/))mۢYΎA+^Cmmmbjj酆ȑ#?`Ŋ|~Ar^^^[|ᇔYfaggWm%%%?9r$ߗ| bذatڕ7nȭSGGO?ggg0aVVV\v pv튏,^3gH֭Fܼ\rw`2e Z;J\|Yʷ[n2O~~\L$..Ni~駟prrɉv*?==Sbcc#_|m۶߯U>hH/ =Z޴icǎ[f̝;JZ,Ye˖9M4͍۷KJEePM1q!<<4:͛z*5tݻGǎ֒˘`ddĭ[jL|vѸqcicT/=b;XΝ;vX5&N4hDGGdɒ766&&&#GsN"""Xt)$11[n1eʔA[Tx7F~@Y_p75111dee1|prTSLm6߿Ϸ~˪Utv܉w}c[WWW(;;|Μ9֭[k]wFŰa $::SZZ]v%66/@\"~c̘1?%K`llǥ{RU^Ɋ_PPڵ~VZnʒ%KgժURSݻ7ZZZ3}tΞ=+ٳiٲ%xxxЫW/iܸ1Æ #::Z w-ǎ۷@Ν`ƌ'|7|Sf矣YcZZZ3&MÇ~Xe;GE֭;Ic+~yyy״iZ}V> ϯqvvfܸq4jv -[իrӧ ;88Hÿk}nڵk,[ `@YSbb"4jԈnݺk}B4X)g``ٳ#F!M722S:?7M6͚5bkk-?4btcO>ڢN׮]:t(QQQ5nWmJz={6PVFִkTvu}вeK̙/_JTJ-j۶mPn1cشiSLaϞ=ն65oޜBOe4het:*xI$55CCCLմkTԅ‚WJÕg___V^MNNE4(důYfn‚uI}>#4iBdd$Ui{ ߽{W*X**Kvĉ:t###Ұ{sV>ܹSe_~E~R&vvv$$$PPPbPIDATPxKk(bffO?pT?|F)'ǫajj*effQQQ _255eӦMd2N".\@XX=/W2tZ>^Ɋ_`` 7ٳg.]`eeG}D@@,X~2azUiӦ1l0.]J~euuu3gXZZ(\̚5N:qرZ}]uϏ+W`eeŴi`Ν\pfΜɧ~/III1@粵6*X  HH[,.dQr 5~$1kzT'd2Y;ώunPrfժRg ԣWs<c0~Oo)b8t:}Ѩe|n{s3"ffeגzUUh4j}߶[+WUUz79Ynnd~zr'$BH @"?D~!$BH Cubvq:ڮf(,V ʲ(""Պxb{IENDB`recoll-1.43.12/doc/user/00README.txt0000644000175000017500000000111715121730572016030 0ustar dockesdockes= Building the Recoll user manual The Recoll user manual used to be written in DocBook SGML and used the FreeBSD doc toolchain to produce the output formats. This had the advantage of an easy way to produce all formats including a PDF manual, but presented two problems: - Dependency on the FreeBSD platform. - No support for UTF-8 (last I looked), only latin1. The manual has been converted to docbook XML a long time ago. It uses xsltproc and the docbook style sheets to produce the single-page HTML version, dblatex for the PDF version, and webhelp for the multi-page HTML version. recoll-1.43.12/doc/user/docbook.css0000644000175000017500000000733214753312742016336 0ustar dockesdockes/* * Copyright (c) 2001, 2003, 2010 The FreeBSD Documentation Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: doc/share/misc/docbook.css,v 1.15 2010/03/20 04:15:01 hrs Exp $ */ BODY ADDRESS { line-height: 1.3; margin: .6em 0; } BODY BLOCKQUOTE { margin-top: .75em; line-height: 1.5; margin-bottom: .75em; } HTML BODY { margin: 1em 8% 1em 10%; line-height: 1.2; } .LEGALNOTICE { font-size: small; font-variant: small-caps; } BODY DIV { margin: 0; } DL { margin: .8em 0; line-height: 1.2; } BODY FORM { margin: .6em 0; } H1, H2, H3, H4, H5, H6, DIV.EXAMPLE P B, .QUESTION, DIV.TABLE P B, DIV.PROCEDURE P B { color: #990000; } BODY H1, BODY H2, BODY H3, BODY H4, BODY H5, BODY H6 { line-height: 1.3; margin-left: 0; } BODY H1, BODY H2 { margin: .8em 0 0 -4%; } BODY H3, BODY H4 { margin: .8em 0 0 -3%; } BODY H5 { margin: .8em 0 0 -2%; } BODY H6 { margin: .8em 0 0 -1%; } BODY HR { margin: .6em; border-width: 0 0 1px 0; border-style: solid; border-color: #cecece; } BODY IMG.NAVHEADER { margin: 0 0 0 -4%; } OL { margin: 0 0 0 5%; line-height: 1.2; } BODY PRE { margin: .75em 0; line-height: 1.0; font-family: monospace; } BODY TD, BODY TH { line-height: 1.2; } UL, BODY DIR, BODY MENU { margin: 0 0 0 5%; line-height: 1.2; } HTML { margin: 0; padding: 0; } BODY P B.APPLICATION { color: #000000; } .FILENAME { color: #007a00; } .GUIMENU, .GUIMENUITEM, .GUISUBMENU, .GUILABEL, .INTERFACE, .SHORTCUT, .SHORTCUT .KEYCAP { font-weight: bold; } .GUIBUTTON { background-color: #CFCFCF; padding: 2px; } .ACCEL { background-color: #F0F0F0; text-decoration: underline; } .SCREEN { padding: 1ex; } .PROGRAMLISTING { padding: 1ex; background-color: #eee; border: 1px solid #ccc; } @media screen { /* hide from IE3 */ a[href]:hover { background: #ffa } } BLOCKQUOTE.NOTE { color: #222; background: #eee; border: 1px solid #ccc; padding: 0.4em 0.4em; width: 85%; } BLOCKQUOTE.TIP { color: #004F00; background: #d8ecd6; border: 1px solid green; padding: 0.2em 2em; width: 85%; } BLOCKQUOTE.IMPORTANT { font-style:italic; border: 1px solid #a00; border-left: 12px solid #c00; padding: 0.1em 1em; } BLOCKQUOTE.WARNING { color: #9F1313; background: #f8e8e8; border: 1px solid #e59595; padding: 0.2em 2em; width: 85%; } .EXAMPLE { background: #fefde6; border: 1px solid #f1bb16; margin: 1em 0; padding: 0.2em 2em; width: 90%; } .INFORMALTABLE TABLE.CALSTABLE TR TD { padding-left: 1em; padding-right: 1em; } recoll-1.43.12/doc/man/0000755000175000017500000000000015134672441013773 5ustar dockesdockesrecoll-1.43.12/doc/man/recoll.conf.50000644000175000017500000013334515122226312016263 0ustar dockesdockes.TH RECOLL.CONF 5 "14 November 2012" .SH NAME recoll.conf \- main personal configuration file for Recoll .SH DESCRIPTION This file defines the index configuration for the Recoll full-text search system. .LP The system-wide configuration file is normally located inside /usr/[local]/share/recoll/examples. Any parameter set in the common file may be overridden by setting it in the specific index configuration file, by default: .IR $HOME/.recoll/recoll.conf .LP All recoll commands will accept a .B \-c option or use the $RECOLL_CONFDIR environment variable to specify a non-default index configuration directory. .LP A short extract of the file might look as follows: .LP .nf # Space-separated list of directories to index. topdirs = ~/docs /usr/share/doc [~/somedirectory-with-utf8-txt-files] defaultcharset = utf-8 .fi .LP There are three kinds of lines: .IP \(bu Comment or empty. .IP \(bu Parameter affectation. .IP \(bu Section definition. .LP Empty lines or lines beginning with # are ignored. .LP Affectation lines are in the form 'name = value'. In the following description, they also have a type, which is mostly indicative. The two non-obvious ones are 'fn': file path, and 'dfn': directory path. .LP Section lines allow redefining a parameter for a directory subtree. Some of the parameters used for indexing are looked up hierarchically from the more to the less specific. Not all parameters can be meaningfully redefined, this is specified for each in the next section. .LP The tilde character (~) is expanded in file names to the name of the user's home directory. .LP Some 'string' values are lists, which is only indicated by their description. In this case white space is used for separation, and elements with embedded spaces can be quoted with double-quotes. .SH OPTIONS .TP .BI "topdirs = "string Space-separated list of files or directories to recursively index. You can use symbolic links in the list, they will be followed, independently of the value of the followLinks variable. The default value is ~ : recursively index the user home folder. .TP .BI "monitordirs = "string Space-separated list of files or directories to monitor for updates. When running the real-time indexer, this allows monitoring only a subset of the whole indexed area. The elements must be included in the tree defined by the 'topdirs' members. .TP .BI "skippedNames = "string File and directory names which should be ignored. White space separated list of wildcard patterns (simple ones, not paths, must contain no '/' characters), which will be tested against file and directory names. Have a look at the default configuration for the initial value, some entries may not suit your situation. The easiest way to see it is through the GUI Index configuration "local parameters" panel. The list in the default configuration does not exclude hidden directories (names beginning with a dot), which means that it may index quite a few things that you do not want. On the other hand, email user agents like Thunderbird usually store messages in hidden directories, and you probably want this indexed. One possible solution is to have ".*" in "skippedNames", and add things like "~/.thunderbird" "~/.evolution" to "topdirs". Not even the file names are indexed for patterns in this list, see the "noContentSuffixes" variable for an alternative approach which indexes the file names. Can be redefined for any subtree. .TP .BI "skippedNames- = "string List of name patterns to remove from the default skippedNames list. Allows modifying the list in the local configuration without copying it. .TP .BI "skippedNames+ = "string List of name patterns to add to the default skippedNames list. Allows modifying the list in the local configuration without copying it. .TP .BI "onlyNames = "string Regular file name filter patterns. This is normally empty. If set, only the file names not in skippedNames and matching one of the patterns will be considered for indexing. Can be redefined per subtree. Does not apply to directories. .TP .BI "noContentSuffixes = "string List of name endings (not necessarily dot-separated suffixes) for which we don't try MIME type identification, and don't uncompress or index content. Only the names will be indexed. This complements the now obsoleted recoll_noindex list from the mimemap file, which will go away in a future release (the move from mimemap to recoll.conf allows editing the list through the GUI). This is different from skippedNames because these are name ending matches only (not wildcard patterns), and the file name itself gets indexed normally. This can be redefined for subdirectories. .TP .BI "noContentSuffixes- = "string List of name endings to remove from the default noContentSuffixes list. .TP .BI "noContentSuffixes+ = "string List of name endings to add to the default noContentSuffixes list. .TP .BI "skippedPaths = "string Absolute paths we should not go into. Space-separated list of wildcard expressions for absolute filesystem paths (for files or directories). The variable must be defined at the top level of the configuration file, not in a subsection. Any value in the list must be textually consistent with the values in topdirs, no attempts are made to resolve symbolic links. In practise, if, as is frequently the case, /home is a link to /usr/home, your default topdirs will have a single entry "~" which will be translated to "/home/yourlogin". In this case, any skippedPaths entry should start with "/home/yourlogin" *not* with "/usr/home/yourlogin". The index and configuration directories will automatically be added to the list. The expressions are matched using "fnmatch(3)" with the FNM_PATHNAME flag set by default. This means that "/" characters must be matched explicitly. You can set "skippedPathsFnmPathname" to 0 to disable the use of FNM_PATHNAME (meaning that "/*/dir3" will match "/dir1/dir2/dir3"). The default value contains the usual mount point for removable media to remind you that it is in most cases a bad idea to have Recoll work on these. Explicitly adding "/media/xxx" to the "topdirs" variable will override this. .TP .BI "skippedPathsFnmPathname = "bool Set to 0 to override use of FNM_PATHNAME for matching skipped paths. .TP .BI "nowalkfn = "string File name which will cause its parent directory to be skipped. Any directory containing a file with this name will be skipped as if it was part of the skippedPaths list. Ex: .recoll-noindex .TP .BI "daemSkippedPaths = "string skippedPaths equivalent specific to real time indexing. This enables having parts of the tree which are initially indexed but not monitored. If daemSkippedPaths is not set, the daemon uses skippedPaths. .TP .BI "followLinks = "bool Follow symbolic links during indexing. The default is to ignore symbolic links to avoid multiple indexing of linked files. No effort is made to avoid duplication when this option is set to true. This option can be set individually for each of the "topdirs" members by using sections. It can not be changed below the "topdirs" level. Links in the "topdirs" list itself are always followed. .TP .BI "indexedmimetypes = "string Restrictive list of indexed MIME types. Normally not set (in which case all supported types are indexed). If it is set, only the types from the list will have their contents indexed. The names will be indexed anyway if indexallfilenames is set (default). MIME type names should be taken from the mimemap file (the values may be different from xdg-mime or file -i output in some cases). Can be redefined for subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values. .TP .BI "excludedmimetypes = "string List of excluded MIME types. Lets you exclude some types from indexing. MIME type names should be taken from the mimemap file (the values may be different from xdg-mime or file -i output in some cases) Can be redefined for subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values. .TP .BI "nomd5types = "string MIME types for which we don't compute a md5 hash. md5 checksums are used only for deduplicating results, and can be very expensive to compute on multimedia or other big files. This list lets you turn off md5 computation for selected types. It is global (no redefinition for subtrees). At the moment, it only has an effect for external handlers (exec and execm). The file types can be specified by listing either MIME types (e.g. audio/mpeg) or handler names (e.g. rclaudio.py). .TP .BI "compressedfilemaxkbs = "int Size limit for compressed files. We need to decompress these in a temporary directory for identification, which can be wasteful in some cases. Limit the waste. Negative means no limit. 0 results in no processing of any compressed file. Default 100 MB. .TP .BI "textfilemaxmbs = "int Size limit for text files. Mostly for skipping monster logs. Also used for max mail msg body size. Default 20 MB. Use a value of -1 to disable. .TP .BI "textfilepagekbs = "int Page size for text files. If this is set, text/plain files will be divided into documents of approximately this size. This will reduce memory usage at index time and help with loading data in the preview window at query time. Particularly useful with very big files, such as application or system logs. Also see textfilemaxmbs and compressedfilemaxkbs. .TP .BI "textunknownasplain = "bool Process unknown text/xxx files as text/plain Allows indexing misc. text files identified as text/whatever by "file" or "xdg-mime" without having to explicitely set config entries for them. This works fine for indexing (also will cause processing of a lot of useless files), but the documents indexed this way will be opened by the desktop viewer, even if text/plain has a specific editor. .TP .BI "indexallfilenames = "bool Index the file names of unprocessed files. Index the names of files the contents of which we don't index because of an excluded or unsupported MIME type. .TP .BI "usesystemfilecommand = "bool Use a system mechanism as last resort to guess a MIME type. Depending on platform and version, a compile-time configuration will decide if this actually executes a command or uses libmagic. This last-resort identification (if the suffix-based one failed) is generally useful, but will cause the indexing of many bogus extension-less "text" files. Also see "systemfilecommand". .TP .BI "systemfilecommand = "string Command to use for guessing the MIME type if the internal methods fail. This is ignored on Windows or with Recoll 1.38+ if compiled with libmagic enabled (the default). Otherwise, this should be a "file -i" workalike. The file path will be added as a last parameter to the command line. "xdg-mime" works better than the traditional "file" command, and is now the configured default (with a hard-coded fallback to "file") .TP .BI "processwebqueue = "bool Decide if we process the Web queue. The queue is a directory where the Recoll Web browser plugins create the copies of visited pages. .TP .BI "membermaxkbs = "int Size limit for archive members. This is passed to the MIME handlers in the environment as RECOLL_FILTER_MAXMEMBERKB. .TP .BI "indexStripChars = "bool Decide if we store character case and diacritics in the index. If we do, searches sensitive to case and diacritics can be performed, but the index will be bigger, and some marginal weirdness may sometimes occur. The default is a stripped index. When using multiple indexes for a search, this parameter must be defined identically for all. Changing the value implies an index reset. .TP .BI "indexStoreDocText = "bool Decide if we store the documents' text content in the index. Storing the text allows extracting snippets from it at query time, instead of building them from index position data. Newer Xapian index formats have rendered our use of positions list unacceptably slow in some cases. The last Xapian index format with good performance for the old method is Chert, which is default for 1.2, still supported but not default in 1.4 and will be dropped in 1.6. The stored document text is translated from its original format to UTF-8 plain text, but not stripped of upper-case, diacritics, or punctuation signs. Storing it increases the index size by 10-20% typically, but also allows for nicer snippets, so it may be worth enabling it even if not strictly needed for performance if you can afford the space. The variable only has an effect when creating an index, meaning that the xapiandb directory must not exist yet. Its exact effect depends on the Xapian version. For Xapian 1.4, if the variable is set to 0, we used to use the Chert format and not store the text. If the variable was 1, Glass was used, and the text stored. We don't do this any more: storing the text has proved to be the much better option, and dropping this possibility simplifies the code. So now, the index format for a new index is always the default, but the variable still controls if the text is stored or not, and the abstract generation method. With Xapian 1.4 and later, and the variable set to 0, abstract generation may be very slow, but this setting may still be useful to save space if you do not use abstract generation at all, by using the appropriate setting in the GUI, and/or avoiding the Python API or recollq options which would trigger it. .TP .BI "nonumbers = "bool Decides if terms will be generated for numbers. For example "123", "1.5e6", 192.168.1.4, would not be indexed if nonumbers is set ("value123" would still be). Numbers are often quite interesting to search for, and this should probably not be set except for special situations, ie, scientific documents with huge amounts of numbers in them, where setting nonumbers will reduce the index size. This can only be set for a whole index, not for a subtree. .TP .BI "notermpositions = "bool Do not store term positions. Term positions allow for phrase and proximity searches, but make the index much bigger. In some special circumstances, you may want to dispense with them. .TP .BI "dehyphenate = "bool Determines if we index "coworker" also when the input is "co-worker". This is new in version 1.22, and on by default. Setting the variable to off allows restoring the previous behaviour. .TP .BI "indexedpunctuation = "string String of UTF-8 punctuation characters to be indexed as words. The resulting terms will then be searchable and, for example, by setting the parameter to "%€" (without the double quotes), you would be able to search separately for "100%" or "100€" Note that "100%" or "100 %" would be indexed in the same way, the characters are their own word separators. .TP .BI "backslashasletter = "bool Process backslash as a normal letter. This may make sense for people wanting to index TeX commands as such but is not of much general use. .TP .BI "underscoreasletter = "bool Process underscore as normal letter. This makes sense in so many cases that one wonders if it should not be the default. .TP .BI "maxtermlength = "int Maximum term length in Unicode characters. Words longer than this will be discarded. The default is 40 and used to be hard-coded, but it can now be adjusted. You may need an index reset if you change the value. .TP .BI "maxdbdatarecordkbs = "int Maximum binary size of a Xapian document data record. The data record holds "stored" document metadata fields. A very big size usually indicates a document parse error. Xapian has a hard limit of around 100MB for this. .TP .BI "maxdbstoredtextmbs = "int Maximum binary size of a document stored text. Xapian has a hard limit of around 100MB for the compressed value, but our limit is before compression, so there may be some wiggle room. .TP .BI "nocjk = "bool Decides if specific East Asian (Chinese Korean Japanese) characters/word splitting is turned off. This will save a small amount of CPU if you have no CJK documents. If your document base does include such text but you are not interested in searching it, setting nocjk may be a significant time and space saver. .TP .BI "cjkngramlen = "int This lets you adjust the size of n-grams used for indexing CJK text. The default value of 2 is probably appropriate in most cases. A value of 3 would allow more precision and efficiency on longer words, but the index will be approximately twice as large. .TP .BI "hangultagger = "string External tokenizer for Korean Hangul. This allows using an language specific processor for extracting terms from Korean text, instead of the generic n-gram term generator. See https://www.recoll.org/pages/recoll-korean.html for instructions. .TP .BI "chinesetagger = "string External tokenizer for Chinese. This allows using the language specific Jieba tokenizer for extracting meaningful terms from Chinese text, instead of the generic n-gram term generator. See https://www.recoll.org/pages/recoll-chinese.html for instructions. .TP .BI "indexstemminglanguages = "string Languages for which to create stemming expansion data. Stemmer names can be found by executing "recollindex -l", or this can also be set from a list in the GUI. The values are full language names, e.g. english, french... .TP .BI "defaultcharset = "string Default character set. This is used for files which do not contain a character set definition (e.g.: text/plain). Values found inside files, e.g. a "charset" tag in HTML documents, will override it. If this is not set, the default character set is the one defined by the NLS environment ($LC_ALL, $LC_CTYPE, $LANG), or ultimately iso-8859-1 (cp-1252 in fact). If for some reason you want a general default which does not match your LANG and is not 8859-1, use this variable. This can be redefined for any sub-directory. .TP .BI "unac_except_trans = "string A list of characters, encoded in UTF-8, which should be handled specially when converting text to unaccented lowercase. For example, in Swedish, the letter a with diaeresis has full alphabet citizenship and should not be turned into an a. Each element in the space-separated list has the special character as first element and the translation following. The handling of both the lowercase and upper-case versions of a character should be specified, as appartenance to the list will turn-off both standard accent and case processing. The value is global and affects both indexing and querying. We also convert a few confusing Unicode characters (quotes, hyphen) to their ASCII equivalent to avoid "invisible" search failures. Examples: Swedish: unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl åå Åå ’' ❜' ʼ' ‐- . German: unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- . French: you probably want to decompose oe and ae and nobody would type a German ß unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- . The default for all until someone protests follows. These decompositions are not performed by unac, but it is unlikely that someone would type the composed forms in a search. unac_except_trans = ßss œoe Œoe æae Æae ffff fifi flfl ’' ❜' ʼ' ‐- .TP .BI "maildefcharset = "string Overrides the default character set for email messages which don't specify one. This is mainly useful for readpst (libpst) dumps, which are utf-8 but do not say so. .TP .BI "localfields = "string Set fields on all files (usually of a specific fs area). Syntax is the usual: name = value ; attr1 = val1 ; [...] value is empty so this needs an initial semi-colon. This is useful, e.g., for setting the rclaptg field for application selection inside mimeview. .TP .BI "testmodifusemtime = "bool Use mtime instead of ctime to test if a file has been modified. The time is used in addition to the size, which is always used. Setting this can reduce re-indexing on systems where extended attributes are used (by some other application), but not indexed, because changing extended attributes only affects ctime. Notes: - This may prevent detection of change in some marginal file rename cases (the target would need to have the same size and mtime). - You should probably also set noxattrfields to 1 in this case, except if you still prefer to perform xattr indexing, for example if the local file update pattern makes it of value (as in general, there is a risk for pure extended attributes updates without file modification to go undetected). Perform a full index reset after changing this. .TP .BI "noxattrfields = "bool Disable extended attributes conversion to metadata fields. This probably needs to be set if testmodifusemtime is set. .TP .BI "metadatacmds = "string Define commands to gather external metadata, e.g. tmsu tags. There can be several entries, separated by semi-colons, each defining which field name the data goes into and the command to use. Don't forget the initial semi-colon. All the field names must be different. You can use aliases in the "field" file if necessary. As a not too pretty hack conceded to convenience, any field name beginning with "rclmulti" will be taken as an indication that the command returns multiple field values inside a text blob formatted as a recoll configuration file ("fieldname = fieldvalue" lines). The rclmultixx name will be ignored, and field names and values will be parsed from the data. Example: metadatacmds = ; tags = tmsu tags %f; rclmulti1 = cmdOutputsConf %f .TP .BI "cachedir = "dfn Top directory for Recoll data. Recoll data directories are normally located relative to the configuration directory (e.g. ~/.recoll/xapiandb, ~/.recoll/mboxcache). If "cachedir" is set, the directories are stored under the specified value instead (e.g. if cachedir is ~/.cache/recoll, the default dbdir would be ~/.cache/recoll/xapiandb). This affects dbdir, webcachedir, mboxcachedir, aspellDicDir, which can still be individually specified to override cachedir. Note that if you have multiple configurations, each must have a different cachedir, there is no automatic computation of a subpath under cachedir. .TP .BI "maxfsoccuppc = "int Maximum file system occupation over which we stop indexing. The value is a percentage, corresponding to what the "Capacity" df output column shows. The default value is 0, meaning no checking. This parameter is only checked when the indexer starts, it will not change the behaviour or a running process. .TP .BI "dbdir = "dfn Xapian database directory location. This will be created on first indexing. If the value is not an absolute path, it will be interpreted as relative to cachedir if set, or the configuration directory (-c argument or $RECOLL_CONFDIR). If nothing is specified, the default is then ~/.recoll/xapiandb/ .TP .BI "idxstatusfile = "fn Name of the scratch file where the indexer process updates its status. Default: idxstatus.txt inside the configuration directory. .TP .BI "mboxcachedir = "dfn Directory location for storing mbox message offsets cache files. This is normally "mboxcache" under cachedir if set, or else under the configuration directory, but it may be useful to share a directory between different configurations. .TP .BI "mboxcacheminmbs = "int Minimum mbox file size over which we cache the offsets. There is really no sense in caching offsets for small files. The default is 5 MB. .TP .BI "mboxmaxmsgmbs = "int Maximum mbox member message size in megabytes. Size over which we assume that the mbox format is bad or we misinterpreted it, at which point we just stop processing the file. .TP .BI "webcachedir = "dfn Directory where we store the archived web pages after they are processed. This is only used by the Web history indexing code. Note that this is different from webdownloadsdir which tells the indexer where the web pages are stored by the browser, before they are indexed and stored into webcachedir. Default: cachedir/webcache if cachedir is set, else $RECOLL_CONFDIR/webcache .TP .BI "webcachemaxmbs = "int Maximum size in MB of the Web archive. This is only used by the web history indexing code. Default: 40 MB. Reducing the size will not physically truncate the file. .TP .BI "webqueuedir = "fn The path to the Web indexing queue. This used to be hard-coded in the old plugin as ~/.recollweb/ToIndex so there would be no need or possibility to change it, but the WebExtensions plugin now downloads the files to the user Downloads directory, and a script moves them to webqueuedir. The script reads this value from the config so it has become possible to change it. .TP .BI "webdownloadsdir = "fn The path to the browser add-on download directory. This tells the indexer where the Web browser add-on stores the web page data. The data is then moved by a script to webqueuedir, then processed, and finally stored in webcachedir for future previews. .TP .BI "webcachekeepinterval = "string Page recycle interval By default, only one instance of an URL is kept in the cache. This can be changed by setting this to a value determining at what frequency we keep multiple instances ("day", "week", "month", "year"). Note that increasing the interval will not erase existing entries. .TP .BI "aspellDicDir = "dfn Aspell dictionary storage directory location. The aspell dictionary (aspdict.(lang).rws) is normally stored in the directory specified by cachedir if set, or under the configuration directory. .TP .BI "filtersdir = "dfn Directory location for executable input handlers. If RECOLL_FILTERSDIR is set in the environment, we use it instead. Defaults to $prefix/share/recoll/filters. Can be redefined for subdirectories. .TP .BI "iconsdir = "dfn Directory location for icons. The only reason to change this would be if you want to change the icons displayed in the result list. Defaults to $prefix/share/recoll/images .TP .BI "idxflushmb = "int Threshold (megabytes of new data) where we flush from memory to disk index. Setting this allows some control over memory usage by the indexer process. A value of 0 means no explicit flushing, which lets Xapian perform its own thing, meaning flushing every $XAPIAN_FLUSH_THRESHOLD documents created, modified or deleted: as memory usage depends on average document size, not only document count, the Xapian approach is is not very useful, and you should let Recoll manage the flushes. The program compiled value is 0. The configured default value (from this file) is now 50 MB, and should be ok in many cases. You can set it as low as 10 to conserve memory, but if you are looking for maximum speed, you may want to experiment with values between 20 and 200. In my experience, values beyond this are always counterproductive. If you find otherwise, please drop me a note. .TP .BI "filtermaxseconds = "int Maximum external filter execution time in seconds. Default 1200 (20mn). Set to 0 for no limit. This is mainly to avoid infinite loops in postscript files (loop.ps) .TP .BI "filtermaxmbytes = "int Maximum virtual memory space for filter processes (setrlimit(RLIMIT_AS)), in megabytes. Note that this includes any mapped libs (there is no reliable Linux way to limit the data space only), so we need to be a bit generous here. Anything over 2000 will be ignored on 32 bits machines. The high default value is needed because of java-based handlers (pdftk) which need a lot of VM (most of it text), esp. pdftk when executed from Python rclpdf.py. You can use a much lower value if you don't need Java. .TP .BI "thrQSizes = "string Task queue depths for each stage and threading configuration control. There are three internal queues in the indexing pipeline stages (file data extraction, terms generation, index update). This parameter defines the queue depths for each stage (three integer values). In practise, deep queues have not been shown to increase performance. The first value is also used to control threading autoconfiguration or disabling multithreading. If the first queue depth is set to 0 Recoll will set the queue depths and thread counts based on the detected number of CPUs. The arbitrarily chosen values are as follows (depth,nthread). 1 CPU -> no threading. Less than 4 CPUs: (2, 2) (2, 2) (2, 1). Less than 6: (2, 4), (2, 2), (2, 1). Else (2, 5), (2, 3), (2, 1). If the first queue depth is set to -1, multithreading will be disabled entirely. The second and third values are ignored in both these cases. .TP .BI "thrTCounts = "string Number of threads used for each indexing stage. If the first entry in thrQSizes is not 0 or -1, these three values define the number of threads used for each stage (file data extraction, term generation, index update). It makes no sense to use a value other than 1 for the last stage because updating the Xapian index is necessarily single-threaded (and protected by a mutex). .TP .BI "thrTmpDbCnt = "int Number of temporary indexes used during incremental or full indexing. If not set to zero, this defines how many temporary indexes we use during indexing. These temporary indexes are merged into the main one at the end of the operation. Using multiple indexes and a final merge can significantly improve indexing performance when the single-threaded Xapian index updates become a bottleneck. How useful this is depends on the type of input and CPU. See the manual for more details. .TP .BI "suspendonbattery = "bool Suspend the real time indexing when the system runs on battery. The indexer will wait for a return on AC and reexec itself when it happens. .TP .BI "loglevel = "int Log file verbosity 1-6. A value of 2 will print only errors and warnings. 3 will print information like document updates, 4 is quite verbose and 6 very verbose. .TP .BI "logfilename = "fn Log file destination. Use "stderr" (default) to write to the console. .TP .BI "logthedate = "bool Have each log line begin with the date and time. e.g.: 2025-08-21T18:58:24+0200 :3:... .TP .BI "idxloglevel = "int Override loglevel for the indexer. .TP .BI "idxlogfilename = "fn Override logfilename for the indexer. .TP .BI "idxlogthedate = "bool override logthedate for the indexer. .TP .BI "helperlogfilename = "fn Destination file for external helpers standard error output. The external program error output is left alone by default, e.g. going to the terminal when the recoll[index] program is executed from the command line. Use /dev/null or a file inside a non-existent directory to completely suppress the output. .TP .BI "daemloglevel = "int Override loglevel for the real time indexer. The default is to use the idx... values if set, else the log... values. .TP .BI "daemlogfilename = "fn Override logfilename for the real time indexer. The default is to use the idx... values if set, else the log... values. .TP .BI "daemlogthedate = "bool override logthedate for the real time indexer. .TP .BI "pyloglevel = "int Override loglevel for the Python extension. .TP .BI "pylogfilename = "fn Override logfilename for the Python extension. .TP .BI "pylogthedate = "bool override logthedate for the Python extension. .TP .BI "idxnoautopurge = "bool Do not purge data for deleted or inaccessible files This can be overridden by recollindex command line options and may be useful if some parts of the document set may predictably be inaccessible at times, so that you would only run the purge after making sure that everything is there. .TP .BI "orgidxconfdir = "dfn Original location of the configuration directory. This is used exclusively for movable datasets. Locating the configuration directory inside the directory tree makes it possible to provide automatic query time path translations once the data set has moved (for example, because it has been mounted on another location). .TP .BI "curidxconfdir = "dfn Current location of the configuration directory. Complement orgidxconfdir for movable datasets. This should be used if the configuration directory has been copied from the dataset to another location, either because the dataset is readonly and an r/w copy is desired, or for performance reasons. This records the original moved location before copy, to allow path translation computations. For example if a dataset originally indexed as "/home/me/mydata/config" has been mounted to "/media/me/mydata", and the GUI is running from a copied configuration, orgidxconfdir would be "/home/me/mydata/config", and curidxconfdir (as set in the copied configuration) would be "/media/me/mydata/config". .TP .BI "idxrundir = "dfn Indexing process current directory. The input handlers sometimes leave temporary files in the current directory, so it makes sense to have recollindex chdir to some temporary directory. If the value is empty, the current directory is not changed. If the value is (literal) tmp, we use the temporary directory as set by the environment (RECOLL_TMPDIR else TMPDIR else /tmp). If the value is an absolute path to a directory, we go there. .TP .BI "checkneedretryindexscript = "fn Script used to heuristically check if we need to retry indexing files which previously failed. The default script checks the modified dates on /usr/bin and /usr/local/bin. A relative path will be looked up in the filters dirs, then in the path. Use an absolute path to do otherwise. .TP .BI "recollhelperpath = "string Additional places to search for helper executables. This is used, e.g., on Windows by the Python code, and on Mac OS by the bundled recoll.app (because I could find no reliable way to tell launchd to set the PATH). The example below is for Windows. Use ":" as entry separator for Mac and Ux-like systems, ";" is for Windows only. .TP .BI "idxabsmlen = "int Length of abstracts we store while indexing. Recoll stores an abstract for each indexed file. The text can come from an actual "abstract" section in the document or will just be the beginning of the document. It is stored in the index so that it can be displayed inside the result lists without decoding the original file. The idxabsmlen parameter defines the size of the stored abstract. The default value is 250 bytes. The search interface gives you the choice to display this stored text or a synthetic abstract built by extracting text around the search terms. If you always prefer the synthetic abstract, you can reduce this value and save a little space. .TP .BI "idxmetastoredlen = "int Truncation length of stored metadata fields. This does not affect indexing (the whole field is processed anyway), just the amount of data stored in the index for the purpose of displaying fields inside result lists or previews. The default value is 150 bytes which may be too low if you have custom fields. .TP .BI "idxtexttruncatelen = "int Truncation length for all document texts. Only index the beginning of documents. This is not recommended except if you are sure that the interesting keywords are at the top and have severe disk space issues. .TP .BI "idxsynonyms = "fn Name of the index-time synonyms file. This is only used to issue multi-word single terms for multi-word synonyms so that phrase and proximity searches work for them (ex: applejack "apple jack"). The feature will only have an effect for querying if the query-time and index-time synonym files are the same. .TP .BI "idxniceprio = "int "nice" process priority for the indexing processes. Default: 19 (lowest) Appeared with 1.26.5. Prior versions were fixed at 19. .TP .BI "noaspell = "bool Disable aspell use. The aspell dictionary generation takes time, and some combinations of aspell version, language, and local terms, result in aspell crashing, so it sometimes makes sense to just disable the thing. .TP .BI "aspellLanguage = "string Language definitions to use when creating the aspell dictionary. The value must match a set of aspell language definition files. You can type "aspell dicts" to see a list The default if this is not set is to use the NLS environment to guess the value. The values are the 2-letter language codes (e.g. "en", "fr"...) .TP .BI "aspellAddCreateParam = "string Additional option and parameter to aspell dictionary creation command. Some aspell packages may need an additional option (e.g. on Debian Jessie: --local-data-dir=/usr/lib/aspell). See Debian bug 772415. .TP .BI "aspellKeepStderr = "bool Set this to have a look at aspell dictionary creation errors. There are always many, so this is mostly for debugging. .TP .BI "monauxinterval = "int Auxiliary database update interval. The real time indexer only updates the auxiliary databases (stemdb, aspell) periodically, because it would be too costly to do it for every document change. The default period is one hour. .TP .BI "monixinterval = "int Minimum interval (seconds) between processings of the indexing queue. The real time indexer does not process each event when it comes in, but lets the queue accumulate, to diminish overhead and to aggregate multiple events affecting the same file. Default 30 S. .TP .BI "mondelaypatterns = "string Timing parameters for the real time indexing. Definitions for files which get a longer delay before reindexing is allowed. This is for fast-changing files, that should only be reindexed once in a while. A list of wildcardPattern:seconds pairs. The patterns are matched with fnmatch(pattern, path, 0) You can quote entries containing white space with double quotes (quote the whole entry, not the pattern). The default is empty. Example: mondelaypatterns = *.log:20 "*with spaces.*:30" .TP .BI "monioniceclass = "int ionice class for the indexing process. Despite the misleading name, and on platforms where this is supported, this affects all indexing processes, not only the real time/monitoring ones. The default value is 3 (use lowest "Idle" priority). .TP .BI "monioniceclassdata = "string ionice class level parameter if the class supports it. The default is empty, as the default "Idle" class has no levels. .TP .BI "sofficecmd = "string Path to the soffice command (e.g. from libreoffice) This is used for Apple pages documents and big openoffice spreadsheets. Use double-quoting if there are spaces in the path (e.g. C:/Program Files/) *and* you want to add parameters to the default command (uncommon). If not set, recoll will try to find it in the PATH. .TP .BI "idxlocalguisettings = "bool Store some GUI parameters locally to the index. GUI settings are normally stored in a global file, valid for all indexes. Setting this parameter will make some settings, such as the result table setup, specific to the index. .TP .BI "autodiacsens = "bool auto-trigger diacritics sensitivity (raw index only). IF the index is not stripped, decide if we automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the "D" modifier to specify diacritics sensitivity. Default is no. .TP .BI "autocasesens = "bool auto-trigger case sensitivity (raw index only). IF the index is not stripped (see indexStripChars), decide if we automatically trigger character case sensitivity if the search term has upper-case characters in any but the first position. Else you need to use the query language and the "C" modifier to specify character-case sensitivity. Default is yes. .TP .BI "maxTermExpand = "int Maximum query expansion count for a single term (e.g.: when using wildcards). This only affects queries, not indexing. We used to not limit this at all (except for filenames where the limit was too low at 1000), but it is unreasonable with a big index. Default 10000. .TP .BI "maxXapianClauses = "int Maximum number of clauses we add to a single Xapian query. This only affects queries, not indexing. In some cases, the result of term expansion can be multiplicative, and we want to avoid eating all the memory. Default 50000. .TP .BI "snippetMaxPosWalk = "int Maximum number of positions we walk while populating a snippet for the result list. The default of 1,000,000 may be insufficient for very big documents, the consequence would be snippets with possibly meaning-altering missing words. .TP .BI "thumbnailercmd = "string Command to use for generating thumbnails. If set, this should be a path to a command or script followed by its constant arguments. Four arguments will be appended before execution: the document URL, MIME type, target icon SIZE (e.g. 128), and output file PATH. The command should generate a thumbnail from these values. E.g. if the MIME is video, a script could use: ffmpegthumbnailer -iURL -oPATH -sSIZE. .TP .BI "stemexpandphrases = "bool Default to applying stem expansion to phrase terms. Recoll normally does not apply stem expansion to terms inside phrase searches. Setting this parameter will change the default behaviour to expanding terms inside phrases. If set, you can use a "l" modifier to disable expansion for a specific instance. .TP .BI "autoSpellRarityThreshold = "int Inverse of the ratio of term occurrence to total db terms over which we look for spell neighbours for automatic query expansion When a term is very uncommon, we may (depending on user choice) look for spelling variations which would be more common and possibly add them to the query. .TP .BI "autoSpellSelectionThreshold = "int Ratio of spell neighbour frequency over user input term frequency beyond which we include the neighbour in the query. When a term has been selected for spelling expansion because of its rarity, we only include spelling neighbours which are more common by this ratio. .TP .BI "kioshowsubdocs = "bool Show embedded document results in KDE dolphin/kio and krunner Embedded documents may clutter the results and are not always easily usable from the kio or krunner environment. Setting this variable will restrict the results to standalone documents. .TP .BI "pdfocr = "bool Attempt OCR of PDF files with no text content. This can be defined in subdirectories. The default is off because OCR is so very slow. .TP .BI "pdfoutline = "bool Extract outlines and bookmarks from PDF documents (needs pdftohtml). This is not enabled by default because it is rarely needed, and the extra command takes a little time. .TP .BI "pdfattach = "bool Enable PDF attachment extraction by executing pdfdetach (if available). This used to be disabled by default because it used pdftk. We now use pdfdetach, which is part of poppler-utils and fast. .TP .BI "pdfextrameta = "string Extract text from selected XMP metadata tags. This is a space-separated list of qualified XMP tag names. Each element can also include a translation to a Recoll field name, separated by a "|" character. If the second element is absent, the tag name is used as the Recoll field names. You will also need to add specifications to the "fields" file to direct processing of the extracted data. .TP .BI "pdfextrametafix = "fn Define name of XMP field editing script. This defines the name of a script to be loaded for editing XMP field values. The script should define a "MetaFixer" class with a metafix() method which will be called with the qualified tag name and value of each selected field, for editing or erasing. A new instance is created for each document, so that the object can keep state for, e.g. eliminating duplicate values. .TP .BI "zipUseSkippedNames = "bool Use skippedNames inside Zip archives. Fetched directly by the rclzip.py handler. Skip the patterns defined by skippedNames inside Zip archives. Can be redefined for subdirectories. See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html .TP .BI "zipSkippedNames = "string Space-separated list of wildcard expressions for names that should be ignored inside zip archives. This is used directly by the zip handler. If zipUseSkippedNames is not set, zipSkippedNames defines the patterns to be skipped inside archives. If zipUseSkippedNames is set, the two lists are concatenated and used. Can be redefined for subdirectories. See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html .TP .BI "zipMetaEncoding = "string File path encoding. Needs Python 3.11+. Set to "detect" for using chardet. This is useful for non-standard zip files where the metadata is neither UTF-8 (indicated by a file flag), nor CP437 (default). The parameter can be set for specific subtrees. You need to install the Python3 "chardet" package if the value is set to "detect". .TP .BI "orgmodesubdocs = "bool Index org-mode level 1 sections as separate sub-documents This is the default. If set to false, org-mode files will be indexed as plain text .TP .BI "mhmboxquirks = "string Enable thunderbird/mozilla-seamonkey mbox format quirks Set this for the directory(ies) where the email mbox files are stored. .TP .BI "imgocr = "bool Tell the non-default Python image handler to run OCR. See the PDF section for PDF OCR. The image OCR also needs mimeconf changes. See the manual. imgocr can be defined for subdirectories. .TP .BI "ocrprogs = "string OCR modules to try. The top OCR script will try to load the corresponding modules in order and use the first which reports being capable of performing OCR on the input file. Modules for tesseract (tesseract) and ABBYY FineReader (abbyy) are present in the standard distribution. For compatibility with the previous version, if this is not defined at all, the default value is "tesseract". Use an explicit empty value if needed. The value be redefined in subtrees. .TP .BI "ocrcachedir = "dfn Location for caching OCR data. The default if this is empty or undefined is to store the cached OCR data under $RECOLL_CONFDIR/ocrcache. .TP .BI "tesseractlang = "string Language to assume for tesseract OCR. Important for improving the OCR accuracy. This can also be set through the contents of a file in the currently processed directory. See the rclocrtesseract.py script. Example values: eng, fra... See the tesseract Web sitedocumentation for language codes and how to download additional language packs. When specifying multiple languages, use a '+' separator and no spaces, e.g. eng+fra. The value be redefined in subtrees. .TP .BI "tesseractcmd = "fn Path for the tesseract command. Do not quote. This is mostly useful on Windows, or for specifying a non-default tesseract command. E.g. on Windows. tesseractcmd = C:/ProgramFiles/Tesseract-OCR/tesseract.exe .TP .BI "abbyylang = "string Language to assume for abbyy OCR. Important for improving the OCR accuracy. This can also be set through the contents of a file in the currently processed directory. See the rclocrabbyy.py script. Typical values: English, French... See the ABBYY documentation. .TP .BI "abbyyocrcmd = "fn Path for the abbyy command The ABBY directory is usually not in the path, so you should set this. .TP .BI "speechtotext = "string Activate speech to text conversion The only possible value at the moment is "whisper" for using the OpenAI whisper program. .TP .BI "sttmodel = "string Name of the whisper model .TP .BI "sttdevice = "string Name of the device to be used by for whisper .SH SEE ALSO .PP recollindex(1) recoll(1) recoll-1.43.12/doc/man/Makefile0000644000175000017500000000045515121730572015433 0ustar dockesdockes # Note: confxml.cpp is in src/utils. You can build it with: # c++ -std=c++17 -I. confxml.cpp -o confxml -lrecoll recoll.conf.5: recoll.conf.5-header ../../sampleconf/recoll.conf (cat recoll.conf.5-header && confxml --man ../../sampleconf/recoll.conf; cat recoll.conf.5-trailer) > recoll.conf.5 recoll-1.43.12/doc/man/recollindex.10000644000175000017500000002245415121730572016370 0ustar dockesdockes.\" $Id: recollindex.1,v 1.7 2008-09-05 10:25:54 dockes Exp $ (C) 2005 J.F.Dockes\$ .TH RECOLLINDEX 1 "8 January 2006" .SH NAME recollindex \- indexing command for the Recoll full text search system .SH SYNOPSIS .B recollindex \-h .br .B recollindex [ .B \-z|\-Z ] [ .B \-k ] [ .B \--nopurge ] [ .B \-P ] [ .B \--diagsfile ] .br .B recollindex .B \-m [ .B \-w ] [ .B \-D ] [ .B \-O ] [ .B \-x ] [ .B \-C ] [ .B \-n|-k ] .br .B recollindex .B \-i [ .B \-Z \-k \-f \-P ] [] .br .B recollindex .B \-r [ .B \-Z \-K \-e \-f ] [ .B \-p pattern ] .br .B recollindex .B \-e [] .br .B recollindex .B \-l|-S|-E .br .B recollindex .B \-s .br .B recollindex .B \--webcache-compact .br .B recollindex .B \--webcache-burst .br .B recollindex .B \--notindexed [path [path ...]] .SH DESCRIPTION Create or update a Recoll index. .PP There are several modes of operation. All modes support an optional .B \-c option to specify the configuration directory name, overriding the default or $RECOLL_CONFDIR (or $HOME/.recoll by default). .PP The normal mode will index the set of files described in the configuration. This will incrementally update the index with files that changed since the last run. If option .B \-z is given, the index will be erased before starting. If option .B \-Z is given, the index will not be reset, but all files will be considered as needing reindexing (in place reset). .PP .B recollindex does not process again files which previously failed to index (for example because of a missing helper program). If option .B \-k is given, .B recollindex will try again to process all failed files. Please note that .B recollindex may also decide to retry failed files if the auxiliary checking script defined by the "checkneedretryindexscript" configuration variable indicates that this should happen. .PP The .B \--nopurge option will disable the normal erasure of deleted documents from the index. This can be useful in special cases (when it is known that part of the document set is temporarily not accessible). .PP The .B \-P option will force the purge pass. This is useful only if the .B idxnoautopurge parameter is set in the configuration file. .PP If the option .B \--diagsfile is given, the path given as parameter will be truncated and indexing diagnostics will be written to it. Each line in the file will have a diagnostic type (reason for the file not to be indexed), the file path, and a possible additional piece of information, which can be the MIME type or the archive internal path depending on the issue. The following diagnostic types are currently defined: .IP .B Skipped : the path matches an element of .B skippedPaths or .B skippedNames. .IP .B NoContentSuffix : the file name suffix is found in the .B noContentSuffixes list. .IP .B MissingHelper : a helper program is missing. .IP .B Error : general error (see the log). .IP .B NoHandler: no handler is defined for the MIME type. .IP .B ExcludedMime : the MIME type is part of the .B excludedmimetypes list. .IP .B NotIncludedMime : the .B onlymimetypes list is not empty and the the MIME type is not in it. .PP Option .B -R allows specifying a temporary file for writing error messages in case indexing fails. The same messages go to stderr, and the option is mostly of use to the GUI, for displaying an error popup. .PP If option .B \-m is given, recollindex is started for real time monitoring, using the file system monitoring package it was configured for (inotify on linux, gamin on xBSD, fsevents on MacOS and ReadDirectoryChanges on Windows). The program will normally detach from the controlling terminal and become a daemon. If option .B \-D is given, it will stay in the foreground. Option .B \-w can be used to specify that the program should sleep for the specified time before indexing begins. The default value is 60. The daemon normally monitors the X11 session and exits when it is reset. This can be disabled with option .B \-x \ . You can use option .B \-n to skip the initial incrementing pass which is normally performed before monitoring starts. Once monitoring is started, the daemon monitors the configuration and restarts from scratch if a change is made. You can disable this with option .B \-C \ . Option .B \-O also keeps the process in foreground and in addition will have the process exit if its parent process disappears. .PP .B recollindex \-i will index individual files into the index. The stem expansion and aspell databases will not be updated. The skippedPaths and skippedNames configuration variables will be used, so that some files may be skipped. You can tell recollindex to ignore skippedPaths and skippedNames by setting the .B \-f option. This allows fully custom file selection for a given subtree, for which you would add the top directory to skippedPaths, and use any custom tool to generate the file list (ie: a tool from a source code control system). When run this way, the indexer normally does not perform the deleted files purge pass, because it cannot be sure to have seen all the existing files. You can force a purge pass with .B \-P. .PP .B recollindex \-e will erase data for individual files from the index. The stem expansion databases will not be updated. .PP Options .B \-i and .B \-e can be combined. This will first perform the purge, then the indexing. .PP With options .B \-i or .B \-e , if no file names are given on the command line, they will be read from stdin, so that you could for example run: .PP find /path/to/dir \-print | recollindex \-e \-i .PP to force the reindexing of a directory tree (which has to exist inside the file system area defined by .I topdirs in recoll.conf). You could mostly accomplish the same thing with .PP find /path/to/dir \-print | recollindex \-Z \-i .PP The latter will perform a less thorough job of purging stale sub-documents though. .PP .B recollindex \-r mostly works like .B \-i , but the parameter is a single directory, which will be recursively updated. This mostly does nothing more than .B find topdir | recollindex \-i but it may be more convenient to use when started from another program. This retries failed files by default, use option .B \-K to change. One or multiple .B \-p options can be used to set shell-type selection patterns (e.g.: *.pdf). .PP .B recollindex \-l will list the names of available language stemmers. .PP .B recollindex \-s will build the stem expansion database for a given language, which may or may not be part of the list in the configuration file. If the language is not part of the configuration, the stem expansion database will be deleted at the end of the next normal indexing run. You can get the list of stemmer names from the .B recollindex \-l command. Note that this is mostly for experimental use, the normal way to add a stemming language is to set it in the configuration, either by editing "recoll.conf" or by using the GUI indexing configuration dialog. .br At the time of this writing, the following languages are recognized (out of Xapian's stem.h): .IP \(bu danish .IP \(bu dutch .IP \(bu english Martin Porter's 2002 revision of his stemmer .IP \(bu english_lovins Lovin's stemmer .IP \(bu english_porter Porter's stemmer as described in his 1980 paper .IP \(bu finnish .IP \(bu french .IP \(bu german .IP \(bu italian .IP \(bu norwegian .IP \(bu portuguese .IP \(bu russian .IP \(bu spanish .IP \(bu swedish .PP .B recollindex \-S will rebuild the phonetic/orthographic index. This feature uses the .B aspell package, which must be installed on the system. .PP .B recollindex \-E will check the configuration file for topdirs and other relevant paths existence (to help catch typos). .PP .B recollindex \--webcache-compact will recover the space wasted by erased page instances inside the Web cache. It may temporarily need to use twice the disk space used by the Web cache. .PP .B recollindex \--webcache-burst will extract all entries from the Web cache to files created inside . Each cache entry is extracted as two files, for the data and metadata. .PP .B recollindex \--notindexed [path [path ...]] will check each path and print out those which are absent from the index (with an "ABSENT" prefix), or caused an indexing error (with an "ERROR" prefix). If no paths are given on the command line, the command will read them, one per line, from stdin. The paths must be absolute and consistent with those in the index, there is no attempt to be clever about them. .PP Interrupting the command: as indexing can sometimes take a long time, the command can be interrupted by sending an interrupt (Ctrl-C, SIGINT) or terminate (SIGTERM) signal. Some time may elapse before the process exits, because it needs to properly flush and close the index. This can also be done from the recoll GUI (menu entry: File/Stop_Indexing). After such an interruption, the index will be somewhat inconsistent because some operations which are normally performed at the end of the indexing pass will have been skipped (for example, the stemming and spelling databases will be inexistent or out of date). You just need to restart indexing at a later time to restore consistency. The indexing will restart at the interruption point (the full file tree will be traversed, but files that were indexed up to the interruption and for which the index is still up to date will not need to be reindexed). .SH SEE ALSO .PP recoll(1) recoll.conf(5) recoll-1.43.12/doc/man/xadump.10000644000175000017500000000375514753313623015365 0ustar dockesdockes.TH XADUMP 1 "18 November 2017" .SH NAME xadump \- low level access to a Recoll Xapian index. .SH SYNOPSIS .B xadump [ .B \-d ] [ .B \-e ] .B \-i .B \-D .br .B xadump [ .B \-d ] [ .B \-e ] .B \-i .B \-X .br .B xadump [ .B \-d ] [ .B \-e ] .B \-i [ .B \-x ] .B \-T .br .B xadump [ .B \-d ] [ .B \-e ] .B \-i [ .B \-x ] .B \-r .br .B xadump [ .B \-d ] [ .B \-e ] .B \-t .B \-E .br .B xadump [ .B \-d ] [ .B \-e ] .B \-t .B \-F .br .B xadump [ .B \-d ] [ .B \-e ] .B \-t .B \-P .br .B xadump .B \-T [ .B \-f ] [ .B \-n ] [ .B \-l ] .br .B xadump .B \-q term [term ...] .SH DESCRIPTION The .B xadump command is a low-level access and diagnostic tool for a Xapian index as organized by the Recoll indexer. The index directory to be used is specified with option .B \-d. .PP Options -D, -X, -T and -r take a single .B docid argument specified with option .B \-i. .B \-D displays the document data record. .B \-X deletes all index data for the document. .B \-T prints the term list for the document. Without a docid argument, this option will list the whole index term list. .B \-f can be set to precede each term with its occurrence count (only if no docid is specified). .B \-n can be set to omit the enclosing brackets. .B \-l can be set to skip prefixed terms. .B \-r prints the document text as reconstructed from index data. When option .B \-x is set, terms are printed with each character separated by a space, which can be useful to check some encoding issues. .PP Options -E, -F and -P all need a term argument, specified with .B \-t . .B \-E performs a term existence test. .B \-F retrieves the term frequency for the given term. .B \-P displays the postings for the given term. .PP With option .B \-q, xadump performs a simple AND query on the index, using the given term arguments. recoll-1.43.12/doc/man/recollq.10000644000175000017500000000722515121730572015520 0ustar dockesdockes.\" $Id: recollq.1,v 1.1 2007-11-13 10:07:35 dockes Exp $ (C) 2005 J.F.Dockes\$ .TH RECOLLQ 1 "13 November 2007" .SH NAME recollq \- command line / standard output Recoll query command. .SH SYNOPSIS .B recollq [ .B \-c ] [ .B \-o | .B \-f | .B \-a ] [ .B \-b ] [ .B \-d ] [ .B \-A ] [ .B \-p | .B \-q ] [ .B \-e ] [ .B \-m ] [ .B \-n <[first-]cnt> ] [ .B \-Q ] [ .B \-s ] [ .B \-S ] [ .B \-D ] [ .B \-i ] [ .B \-F ] [ .B \--extract-to ] .B recollq \-P .SH DESCRIPTION The .B recollq command will execute the Recoll query specified on the command line and print the results to the standard output. It is primarily designed for diagnostics, or piping the data to some other program. The basic format and its variations can be useful for command line querying. The \-F option should exclusively be used for using the output data in another program, as it is the only one for which output is guaranteed to be fully parseable. .PP The .B \-c option specifies the configuration directory name, overriding the default or $RECOLL_CONFDIR. .PP The query string is built by concatenating all arguments found at the end of the command line (after the options). It will be interpreted by default as a query language string. Quoting should be used as needed to escape characters that might be interpreted by the shell (ie: wildcards). .B \-a is specified, the query string will be interpreted as an .I all words simple search query. If .B \-o is specified, the query string will be interpreted as an .I any word simple search query. If .B \-f is specified, the query string will be interpreted as a .I file name simple search query. .PP .B \-b (basic) can be specified to only print the result urls in the output stream. .PP If .B \-d is set, the text for the result files contents will be dumped to stdout. .PP If .B \-m is set, the whole metadata array will be dumped for each document. .PP If .B \-A is set, the document abstracts will be printed. With an additional .B \-p (or .B \-q ) option, snippets with page numbers, (or line numbers), will be shown instead, if available. .PP .B \-S sorts the results according to the specified field. Use .B \-D for descending order. .PP .B \-n <[first-]cnt> can be used to set the maximum number of results that should be printed. The default is 2000. Use a value of 0 for no limit. If the argument is of the form first-cnt, it also defines the first result to output (from 0). .PP .B \-s selects the word stemming language. The value should match an existing stemming database (as set in the configuration or added with recollindex \-s). .PP .B \-i adds the specified Xapian index to the set used for the query. Can be specified multiple times. .PP .B \-F (one argument, e.g. "author title") should be used for piping the data to another program. After 2 initial lines showing the actual query and the estimated result counts, it will print one line for each result document. Each line will have exactly the fields requested on the command line. Fields are encoded in base64 and separated by one space character. Empty fields are indicated by consecutive space characters. There is one additional space character at the end of each line. .PP .B \--extract-to Will extract the first result document of the query to the argument path, which must not exist. Use -n first-cnt to select the document. .PP .B recollq \-P (Period) will print the minimum and maximum modification years for documents in the index. .SH SEE ALSO .PP recollindex(1) recollq(1) recoll.conf(5) recoll-1.43.12/doc/man/recoll.conf.5-header0000644000175000017500000000340615121730572017512 0ustar dockesdockes.TH RECOLL.CONF 5 "14 November 2012" .SH NAME recoll.conf \- main personal configuration file for Recoll .SH DESCRIPTION This file defines the index configuration for the Recoll full-text search system. .LP The system-wide configuration file is normally located inside /usr/[local]/share/recoll/examples. Any parameter set in the common file may be overridden by setting it in the specific index configuration file, by default: .IR $HOME/.recoll/recoll.conf .LP All recoll commands will accept a .B \-c option or use the $RECOLL_CONFDIR environment variable to specify a non-default index configuration directory. .LP A short extract of the file might look as follows: .LP .nf # Space-separated list of directories to index. topdirs = ~/docs /usr/share/doc [~/somedirectory-with-utf8-txt-files] defaultcharset = utf-8 .fi .LP There are three kinds of lines: .IP \(bu Comment or empty. .IP \(bu Parameter affectation. .IP \(bu Section definition. .LP Empty lines or lines beginning with # are ignored. .LP Affectation lines are in the form 'name = value'. In the following description, they also have a type, which is mostly indicative. The two non-obvious ones are 'fn': file path, and 'dfn': directory path. .LP Section lines allow redefining a parameter for a directory subtree. Some of the parameters used for indexing are looked up hierarchically from the more to the less specific. Not all parameters can be meaningfully redefined, this is specified for each in the next section. .LP The tilde character (~) is expanded in file names to the name of the user's home directory. .LP Some 'string' values are lists, which is only indicated by their description. In this case white space is used for separation, and elements with embedded spaces can be quoted with double-quotes. .SH OPTIONS recoll-1.43.12/doc/man/rclgrep.10000644000175000017500000000413615132124660015510 0ustar dockesdockes.TH RCLGREP 1 "20 September 2022" .SH NAME rclgrep \- Print lines that match of patterns . .SH SYNOPSIS .B rclgrep \-h .br .B rclgrep [\fI\,OPTION\/\fR ...] \fI\,PATTERNS\/\fR [\fI\,FILE\/\fR ...] .br .B rclgrep [\fI\,OPTION\/\fR ...] .B \-e .I PATTERNS \&.\|.\|.\& [\fI\,FILE\/\fR ...] .br .B rclgrep [\fI\,OPTION\/\fR ...] .B \-f .I PATTERNS_FILE \&.\|.\|.\& [\fI\,FILE\/\fR ...] . .SH DESCRIPTION .B rclgrep mimicks the interface and output of the .B grep(1) command while using the .B recoll data extraction subsystem, which enables it to look for matches not only in text files, but in mostly any type of document, including nested ones (email attachments, archives, etc.). .PP The program is mostly an experiment in checking how an index-less pattern search program could be useful. In practise it is slow, and maybe not quite finished. .PP Some of the options which are shared with .B grep(1) will not be documented here. .SH OPTIONS .TP .BR \-h ", " \-\^\-help Print usage string. .TP .BR \-e ", " \-\^\-regexp= PATTERNS Patterns to search for. Can be given multiple times. if \-e is used, all non-option arguments will be used as paths (no [pattern] argument). .TP .BR \-f ", " \-\^\-file= FILE Get patterns from the file argument, one per line. .TP .BR \-r ", " \-\^\-recurse Operate recursively on directories. This is the default except if no paths are given in which case rclgrep searches stdin. \-r is needed to cause recursing on the current directory in the absence of a file argument. .TP .BR \-\^\-include= FN File name pattern for files to be searched. Can be given multiple times. .TP .BR \-\^\-exclude= FN File name pattern for files not to be searched. Can be given multiple times. .TP .BR \-\^\-exclude-from= FN Take file name exclusion patterns from FILE. .TP .BR \-\^\-config= CONFIGDIR Specify configuration directory (default ~/.config/rclgrep). This allows getting data extraction options from an existing .B recoll configuration directory or from the dedicated .B rclgrep one. .TP .B \-v,\-w,\-x,\-c,\-L,\-l,\-H,\-n,\-A,\-B,\-C,\-q,\-s,\-R See grep manual. .SH "SEE ALSO" .BR grep (1), .BR recollindex (1), recoll-1.43.12/doc/man/recoll.10000644000175000017500000000562415133364141015336 0ustar dockesdockes.\" $Id: recoll.1,v 1.3 2007-11-13 18:42:18 dockes Exp $ (C) 2005 J.F.Dockes\$ .TH RECOLL 1 "8 January 2006" .SH NAME recoll \- user interface for the Recoll full text search system .SH SYNOPSIS .B recoll [ .B \-h ] [ .B \-c ] [ .B \-L ] [ .B \-w ] [ .B \-W ] [ .B \-o | .B \-l | .B \-f | .B \-a ] [ .B \-q ] .B recoll -t [ .B \-h ] [ .B \-c ] [ .B \-o | .B \-l | .B \-f | .B \-a ] [ .B \-q ] .B recoll [ .B \-c ] .SH DESCRIPTION In the first form, the .B recoll command will start the index query graphical user interface. On the first run, this will create the user configuration which can be customized before starting the index creation. .PP In the second form (with a .B \-t option), .B recoll will behave like the .B recollq command. It will not start a GUI, but will run the query and output the results to the terminal (standard output). This will also be the case if .B recoll is called as .B recollq through a link. Additional options understood by the .B recollq command may be specified in this case. These can control the output format and the maximum number of results to be printed. Please refer to the command help obtained through the .B \-t \-h options, or to the .B recollq manual page for a full description. .B \-t must be set separately, it can't be concatenated with other single-letter options. .PP The .B \-c option specifies the configuration directory name, overriding the default or $RECOLL_CONFDIR. .PP With the .B \-w option, the GUI starts minimized, which can be useful for starting it automatically with the desktop. .B \-W is similar, but will only show a system tray icon. It can only be used if the system tray option is set in the preferences. .PP The .B \-q option can be used to specify an initial query on the command line. This query will be interpreted by default as a query language string. If .B \-a is specified, the query string will be interpreted as an .I all words simple search query. If .B \-o is specified, the query string will be interpreted as an .I any word simple search query. If .B \-f is specified, the query string will be interpreted as a .I file name simple search query. If .B \-l is specified (or, by default, without any option), the query string will be interpreted as a .I query language simple search query. .PP In the third form, the .B recoll command can be used to start a native viewer for a document indexed by Recoll. It will understand a final URL fragment (separated by a '#' character) to indicate an .I ipath , the specifier for the part of the Recoll document access path which is internal to a container such as a mbox folder or a zip archive, and will, if needed, create a temporary file to let a normal system utility display the document. This form is mostly used for opening embedded documents from an external desktop search interface. .SH SEE ALSO .PP recollindex(1) recollq(1) recoll.conf(5) recoll-1.43.12/doc/man/recoll.conf.5-trailer0000644000175000017500000000005315121730572017717 0ustar dockesdockes .SH SEE ALSO .PP recollindex(1) recoll(1) recoll-1.43.12/RECOLL-VERSION.txt0000644000175000017500000000001015134720410015274 0ustar dockesdockes1.43.12 recoll-1.43.12/testmains/0000755000175000017500000000000015121730573014457 5ustar dockesdockesrecoll-1.43.12/testmains/meson.build0000644000175000017500000001374515121730573016633 0ustar dockesdockestmain_incdirs = [librecoll_incdir, '..', '../query',] trappformime_sources = [ 'trappformime.cpp', ] trappformime = executable( 'trappformime', trappformime_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) traspell_sources = [ 'traspell.cpp', ] traspell = executable( 'traspell', traspell_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trbase64_sources = [ 'trbase64.cpp', ] trbase64 = executable( 'trbase64', trbase64_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trcircache_sources = [ 'trcircache.cpp', ] trcircache = executable( 'trcircache', trcircache_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trclosefrom_sources = [ 'trclosefrom.cpp', ] trclosefrom = executable( 'trclosefrom', trclosefrom_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trcopyfile_sources = [ 'trcopyfile.cpp', ] trcopyfile = executable( 'trcopyfile', trcopyfile_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trcpuconf_sources = [ 'trcpuconf.cpp', ] trcpuconf = executable( 'trcpuconf', trcpuconf_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trecrontab_sources = [ 'trecrontab.cpp', ] trecrontab = executable( 'trecrontab', trecrontab_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trfileudi_sources = [ 'trfileudi.cpp', ] trfileudi = executable( 'trfileudi', trfileudi_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trfstreewalk_sources = [ 'trfstreewalk.cpp', ] trfstreewalk = executable( 'trfstreewalk', trfstreewalk_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trhldata_sources = [ 'trhldata.cpp', ] trhldata = executable( 'trhldata', trhldata_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) tridfile_sources = [ 'tridfile.cpp', ] tridfile = executable( 'tridfile', tridfile_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) #trinternfile_sources = [ # 'trinternfile.cpp', #] #trinternfile = executable( # 'trinternfile', # trinternfile_sources, # include_directories: tmain_incdirs, # link_with: librecoll, # install: false, #) trmbox_sources = [ 'trmbox.cpp', ] trmbox = executable( 'trmbox', trmbox_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trmimeparse_sources = [ 'trmimeparse.cpp', ] trmimeparse = executable( 'trmimeparse', trmimeparse_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trmimetype_sources = [ 'trmimetype.cpp', ] trmimetype = executable( 'trmimetype', trmimetype_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trplaintorich_sources = [ 'trplaintorich.cpp', ] trplaintorich = executable( 'trplaintorich', trplaintorich_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trqrstore_sources = [ 'trqrstore.cpp', ] trqrstore = executable( 'trqrstore', trqrstore_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trrclconfig_sources = [ 'trrclconfig.cpp', ] trrclconfig = executable( 'trrclconfig', trrclconfig_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trrcldb_sources = [ 'trrcldb.cpp', ] trrcldb = executable( 'trrcldb', trrcldb_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trrclutil_sources = [ 'trrclutil.cpp', ] trrclutil = executable( 'trrclutil', trrclutil_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trstoplist_sources = [ 'trstoplist.cpp', ] trstoplist = executable( 'trstoplist', trstoplist_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trsubtreelist_sources = [ 'trsubtreelist.cpp', ] trsubtreelist = executable( 'trsubtreelist', trsubtreelist_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trsynfamily_sources = [ 'trsynfamily.cpp', ] trsynfamily = executable( 'trsynfamily', trsynfamily_sources, include_directories: tmain_incdirs, dependencies: xapian, link_with: librecoll, install: false, ) trsyngroups_sources = [ 'trsyngroups.cpp', ] trsyngroups = executable( 'trsyngroups', trsyngroups_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trtextsplit_sources = [ 'trtextsplit.cpp', ] trtextsplit = executable( 'trtextsplit', trtextsplit_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trtranscode_sources = [ 'trtranscode.cpp', ] trtranscode = executable( 'trtranscode', trtranscode_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trunac_sources = [ 'trunac.cpp', ] trunac = executable( 'trunac', trunac_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trwipedir_sources = [ 'trwipedir.cpp', ] trwipedir = executable( 'trwipedir', trwipedir_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) trx11mon_sources = [ 'trx11mon.cpp', ] trx11mon = executable( 'trx11mon', trx11mon_sources, include_directories: tmain_incdirs, link_with: librecoll, install: false, ) recoll-1.43.12/RECOLL-SOVERSION.txt0000644000175000017500000000000315121730572015546 0ustar dockesdockes39 recoll-1.43.12/rcldb/0000755000175000017500000000000015134672441013541 5ustar dockesdockesrecoll-1.43.12/rcldb/stoplist.cpp0000644000175000017500000000342615121730573016130 0ustar dockesdockes/* Copyright (C) 2007 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "log.h" #include "readfile.h" #include "unacpp.h" #include "smallut.h" #include "stoplist.h" using std::string; using std::set; namespace Rcl { bool StopList::setFile(const string &filename) { m_stops.clear(); string stoptext, reason; if (!file_to_string(filename, stoptext, &reason)) { LOGDEB0("StopList::StopList: file_to_string(" << filename << ") failed: " << reason << "\n"); return false; } set stops; stringToStrings(stoptext, stops); for (set::iterator it = stops.begin(); it != stops.end(); it++) { string dterm; unacmaybefold(*it, dterm, UNACOP_UNACFOLD); m_stops.insert(dterm); } return true; } // Most sites will have an empty stop list. We try to optimize the // empty set case as much as possible. empty() is probably sligtly // faster than find() in this case. bool StopList::isStop(const string &term) const { return !m_stops.empty() && m_stops.find(term) != m_stops.end(); } } recoll-1.43.12/rcldb/searchdata.cpp0000644000175000017500000002306615130147271016345 0ustar dockesdockes/* Copyright (C) 2006-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // Handle translation from rcl's SearchData structures to Xapian Queries #include "autoconfig.h" #include #include #include #include #include #include using namespace std; #include "xapian.h" #include "cstr.h" #include "rcldb.h" #include "rcldb_p.h" #include "searchdata.h" #include "log.h" #include "smallut.h" #include "textsplit.h" #include "unacpp.h" #include "utf8iter.h" #include "stoplist.h" #include "rclconfig.h" #include "termproc.h" #include "synfamily.h" #include "stemdb.h" #include "expansiondbs.h" #include "base64.h" #include "daterange.h" namespace Rcl { SearchData::~SearchData() { LOGDEB0("SearchData::~SearchData\n"); for (auto& clausep : m_query) delete clausep; } // This is called by the GUI simple search if the option is set: add // (OR) phrase to a query (if it is simple enough) so that results // where the search terms are close and in order will come up on top. // We remove very common terms from the query to avoid performance issues. bool SearchData::maybeAddAutoPhrase(Rcl::Db& db, double freqThreshold) { LOGDEB0("SearchData::maybeAddAutoPhrase()\n"); simplify(); if (m_query.empty()) { LOGDEB2("SearchData::maybeAddAutoPhrase: empty query\n"); return false; } string field; auto clp0 = dynamic_cast(*m_query.begin()); if (clp0) field = clp0->getfield(); vector words; // Walk the clause list. If this is not an AND list, we find any // non simple clause or different field names, bail out. for (auto& clausep : m_query) { SClType tp = clausep->m_tp; if (tp != SCLT_AND) { LOGDEB2("SearchData::maybeAddAutoPhrase: wrong tp " << tp << "\n"); return false; } auto clp = dynamic_cast(clausep); if (clp == nullptr) { LOGDEB2("SearchData::maybeAddAutoPhrase: other than clauseSimple in query.\n"); return false; } if (clp->getfield().compare(field)) { LOGDEB2("SearchData::maybeAddAutoPhrase: diff. fields\n"); return false; } // If there are wildcards or quotes in there, bail out if (clp->gettext().find_first_of("\"*[?") != string::npos) { LOGDEB2("SearchData::maybeAddAutoPhrase: wildcards\n"); return false; } // Do a simple word-split here, not the full-blown // textsplit. Spans of stopwords should not be trimmed later // in this function, they will be properly split when the // phrase gets processed by toNativeQuery() later on. vector wl; stringToStrings(clp->gettext(), wl); words.insert(words.end(), wl.begin(), wl.end()); } // Trim the word list by eliminating very frequent terms // (increasing the slack as we do it): int slack = 0; int doccnt = db.docCnt(); if (!doccnt) doccnt = 1; string swords; for (const auto& word : words) { double freq = double(db.termDocCnt(word)) / doccnt; if (freq < freqThreshold) { if (!swords.empty()) swords.append(1, ' '); swords += word; } else { LOGDEB0("SearchData::Autophrase: [" << word << "] too frequent (" << 100 * freq << " %" << ")\n"); slack++; } } // We can't make a phrase with a single word :) int nwords = TextSplit::countWords(swords); if (nwords <= 1) { LOGDEB2("SearchData::maybeAddAutoPhrase: ended with 1 word\n"); return false; } // Increase the slack: we want to be a little more laxist than for // an actual user-entered phrase slack += 1 + nwords / 3; m_autophrase = make_shared(SCLT_PHRASE, swords, slack, field); m_autophrase->setParent(this); return true; } // Add clause to current list. OR lists cant have EXCL clauses. bool SearchData::addClause(SearchDataClause* cl) { if (m_tp == SCLT_OR && cl->getexclude()) { LOGERR("SearchData::addClause: cant add EXCL to OR list\n"); m_reason = "No Negative (AND_NOT) clauses allowed in OR queries"; return false; } cl->setParent(this); m_haveWildCards = m_haveWildCards || cl->m_haveWildCards; m_query.push_back(cl); return true; } // Am I a file name only search ? This is to turn off term highlighting. // There can't be a subclause in a filename search: no possible need to recurse bool SearchData::fileNameOnly() { for (const auto& clausep : m_query) { if (!clausep->isFileName()) return false; } return true; } // The query language creates a lot of subqueries. See if we can merge them. void SearchData::simplify() { LOGDEB0("SearchData::simplify()\n"); //std::cerr << "SIMPLIFY BEFORE: "; dump(std::cerr); for (unsigned int i = 0; i < m_query.size(); i++) { if (m_query[i]->m_tp != SCLT_SUB) continue; auto clsubp = dynamic_cast(m_query[i]); if (nullptr == clsubp) { // ?? continue; } if (clsubp->getSub()->m_tp != m_tp) { LOGDEB0("Not simplifying because sub has differing m_tp\n"); continue; } clsubp->getSub()->simplify(); // If this subquery has special attributes, it's not a // candidate for collapsing, except if it has no clauses, because // then, we just pick the attributes. if (!clsubp->getSub()->m_filetypes.empty() || !clsubp->getSub()->m_nfiletypes.empty() || clsubp->getSub()->m_haveDates || #ifdef EXT4_BIRTH_TIME clsubp->getSub()->m_haveBrDates || #endif clsubp->getSub()->m_maxSize != -1 || clsubp->getSub()->m_minSize != -1 || clsubp->getSub()->m_subspec != SUBDOC_ANY || clsubp->getSub()->m_haveWildCards) { if (!clsubp->getSub()->m_query.empty()) { LOGDEB0("Not simplifying because sub has special attributes and non-empty query\n"); continue; } m_filetypes.insert(m_filetypes.end(), clsubp->getSub()->m_filetypes.begin(), clsubp->getSub()->m_filetypes.end()); m_nfiletypes.insert(m_nfiletypes.end(), clsubp->getSub()->m_nfiletypes.begin(), clsubp->getSub()->m_nfiletypes.end()); if (clsubp->getSub()->m_haveDates && !m_haveDates) { m_dates = clsubp->getSub()->m_dates; m_haveDates = 1; } #ifdef EXT4_BIRTH_TIME if (clsubp->getSub()->m_haveBrDates && !m_haveBrDates) { m_brdates = clsubp->getSub()->m_brdates; m_haveBrDates = 1; } #endif if (m_maxSize == -1) m_maxSize = clsubp->getSub()->m_maxSize; if (m_minSize == -1) m_minSize = clsubp->getSub()->m_minSize; if (m_subspec == SUBDOC_ANY) m_subspec = clsubp->getSub()->m_subspec; m_haveWildCards = m_haveWildCards || clsubp->getSub()->m_haveWildCards; // And then let the clauses processing go on, there are // none anyway, we will just delete the subquery. } // Delete the clause_sub, and insert the queries from its searchdata in its place m_query.erase(m_query.begin() + i); for (unsigned int j = 0; j < clsubp->getSub()->m_query.size(); j++) { m_query.insert(m_query.begin() + i + j, clsubp->getSub()->m_query[j]->clone()); m_query[i+j]->setParent(this); } i += int(clsubp->getSub()->m_query.size()) - 1; } //std::cerr << "SIMPLIFY AFTER: "; dump(std::cerr); } // Extract terms and groups for highlighting void SearchData::getTerms(HighlightData &hld) const { for (const auto& clausep : m_query) { if (!(clausep->getModifiers() & SearchDataClause::SDCM_NOTERMS) && !clausep->getexclude()) { clausep->getTerms(hld); } } sort(hld.spellexpands.begin(), hld.spellexpands.end()); hld.spellexpands.erase( unique(hld.spellexpands.begin(), hld.spellexpands.end()), hld.spellexpands.end()); return; } bool sdataWalk(SearchData* top, SdataWalker& walker) { if (!walker.sdata(top, true)) { return false; } for (auto& clausep : top->m_query) { if (!walker.clause(clausep)) return false; auto clp = dynamic_cast(clausep); if (clp) { if (!sdataWalk(clp->getSub().get(), walker)) return false; } } if (!walker.sdata(top, false)) { return false; } return true; } } // Namespace Rcl recoll-1.43.12/rcldb/rcldups.cpp0000644000175000017500000000570315121730573015723 0ustar dockesdockes/* Copyright (C) 2013-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ //////////////////////////////////////////////////////////////////// #include "autoconfig.h" #include using namespace std; #include #include "log.h" #include "rcldb.h" #include "rcldb_p.h" #include "xmacros.h" #include "md5ut.h" #include "searchdata.h" #include "rclquery.h" #include "rcldoc.h" namespace Rcl { /** Retrieve the dups of a given document. The input has to be a query result * because we use the xdocid. We get the md5 from this, then the dups */ bool Db::docDups(const Doc& idoc, vector& odocs) { if (nullptr == m_ndb) { LOGERR("Db::docDups: no db\n"); return false; } if (idoc.xdocid == 0) { LOGERR("Db::docDups: null xdocid in input doc\n"); return false; } // Get the xapian doc Xapian::Document xdoc; XAPTRY(xdoc = m_ndb->xrdb.get_document(Xapian::docid(idoc.xdocid)), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::docDups: xapian error: " << m_reason << "\n"); return false; } // Get the md5 string digest; XAPTRY(digest = xdoc.get_value(VALUE_MD5), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::docDups: xapian error: " << m_reason << "\n"); return false; } if (digest.empty()) { LOGDEB("Db::docDups: doc has no md5\n"); return false; } string md5; MD5HexPrint(digest, md5); SearchData *sdp = new SearchData(); std::shared_ptr sd(sdp); SearchDataClauseSimple *sdc = new SearchDataClauseSimple(SCLT_AND, md5, "rclmd5"); sdc->addModifier(SearchDataClause::SDCM_CASESENS); sdc->addModifier(SearchDataClause::SDCM_DIACSENS); sd->addClause(sdc); Query query(this); query.setCollapseDuplicates(0); if (!query.setQuery(sd)) { LOGERR("Db::docDups: setQuery failed\n"); return false; } int cnt = query.getResCnt(); for (int i = 0; i < cnt; i++) { Doc doc; if (!query.getDoc(i, doc)) { LOGERR("Db::docDups: getDoc failed at " << i << " (cnt " << cnt << ")\n"); return false; } odocs.push_back(doc); } return true; } } recoll-1.43.12/rcldb/rclquery.cpp0000644000175000017500000004162415121730573016117 0ustar dockesdockes/* Copyright (C) 2008-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include "xapian.h" #include "cstr.h" #include "rclconfig.h" #include "log.h" #include "rcldb.h" #include "rcldb_p.h" #include "rclquery.h" #include "rclquery_p.h" #include "smallut.h" #include "chrono.h" #include "searchdata.h" #include "unacpp.h" #include "rcldoc.h" #include "plaintorich.h" using namespace std; namespace Rcl { // This is used as a marker inside the abstract frag lists, but // normally doesn't remain in final output (which is built with a // custom sep. by our caller). static const string cstr_ellipsis("..."); // Field names inside the index data record may differ from the rcldoc ones // (esp.: caption / title) static const string& docfToDatf(const string& df) { if (!df.compare(Doc::keytt)) { return cstr_caption; } else if (!df.compare(Doc::keymt)) { return cstr_dmtime; } else { return df; } } // Sort helper class. As Xapian sorting is lexicographic, we do some // special processing for special fields like dates and sizes. User // custom field data will have to be processed before insertion to // achieve equivalent results. #if XAPIAN_MAJOR_VERSION == 1 && XAPIAN_MINOR_VERSION < 2 class QSorter : public Xapian::Sorter #else class QSorter : public Xapian::KeyMaker #endif { public: QSorter(const string& f) : m_fld(docfToDatf(f) + "=") { if (m_fld == "dmtime=") { m_ismtime = true; } else if (m_fld == "fbytes=" || m_fld == "dbytes=" || m_fld == "pcbytes=") { m_issize = true; } else if (m_fld == "mtype=") { m_ismtype = true; } } virtual std::string operator()(const Xapian::Document& xdoc) const { string data = xdoc.get_data(); // It would be simpler to do the record->Rcl::Doc thing, but // hand-doing this will be faster. It makes more assumptions // about the format than a ConfTree though: string::size_type i1, i2; i1 = data.find(m_fld); if (i1 == string::npos) { if (m_ismtime) { // Ugly: specialcase mtime as it's either dmtime or fmtime i1 = data.find("fmtime="); if (i1 == string::npos) { return string(); } } else { return string(); } } i1 += m_fld.length(); if (i1 >= data.length()) return string(); i2 = data.find_first_of("\n\r", i1); if (i2 == string::npos) return string(); string term = data.substr(i1, i2-i1); if (m_ismtime) { return term; } else if (m_issize) { // Left zeropad values for appropriate numeric sorting leftzeropad(term, 12); return term; } else if (m_ismtype) { // Arrange for directories to always sort first if (term == "inode/directory" || term == "application/x-fsdirectory") { term.insert(0, 1, ' '); } // No further processing needed for mtype return term; } // Process data for better sorting. We should actually do the // unicode thing // (http://unicode.org/reports/tr10/#Introduction), but just // removing accents and majuscules will remove the most // glaring weirdnesses (or not, depending on your national // approach to collating...) string sortterm; // We're not even sure the term is utf8 here (ie: url) if (!unacmaybefold(term, sortterm, UNACOP_UNACFOLD)) { sortterm = term; } // Also remove some common uninteresting starting characters i1 = sortterm.find_first_not_of(" \t\\\"'([*+,.#/"); if (i1 != 0 && i1 != string::npos) { sortterm = sortterm.substr(i1, sortterm.size()-i1); } LOGDEB2("QSorter: [" << term << "] -> [" << sortterm << "]\n"); return sortterm; } private: string m_fld; bool m_ismtime{false}; bool m_issize{false}; bool m_ismtype{false}; }; Query::Query(Db *db) : m_nq(new Native(this)), m_db(db) { if (db) db->getConf()->getConfParam("snippetMaxPosWalk", &m_snipMaxPosWalk); } Query::~Query() { deleteZ(m_nq); if (m_sorter) { delete (QSorter*)m_sorter; m_sorter = nullptr; } } void Query::setSortBy(const string& fld, bool ascending) { if (fld.empty()) { m_sortField.erase(); } else { m_sortField = m_db->getConf()->fieldQCanon(fld); m_sortAscending = ascending; } LOGDEB0("RclQuery::setSortBy: [" << m_sortField << "] " << (m_sortAscending ? "ascending" : "descending") << "\n"); } class SubdocDecider : public Xapian::MatchDecider { public: SubdocDecider(bool sel) : MatchDecider(), m_select(sel) {} virtual ~SubdocDecider() {} virtual bool operator()(const Xapian::Document &doc) const { bool hasparent{false}; try { Xapian::TermIterator xit = doc.termlist_begin(); xit.skip_to(wrap_prefix(parent_prefix)); hasparent = (xit != doc.termlist_end()) && (get_prefix(*xit) == parent_prefix); } catch (...) { } return hasparent == m_select; } bool m_select; }; // Prepare query out of user search data bool Query::setQuery(std::shared_ptr sdata) { LOGDEB("Query::setQuery:\n"); if (!m_db || !m_nq) { LOGERR("Query::setQuery: not initialised!\n"); return false; } m_resCnt = -1; m_reason.erase(); m_nq->clear(); m_sd = sdata; Xapian::Query xq; if (!sdata->toNativeQuery(*m_db, &xq)) { m_reason += sdata->getReason(); return false; } m_nq->xquery = xq; if (sdata->getSubSpec() == SearchData::SUBDOC_NO) { m_nq->subdecider = new SubdocDecider(false); } else if (sdata->getSubSpec() == SearchData::SUBDOC_YES) { m_nq->subdecider = new SubdocDecider(true); } string d; for (int tries = 0; tries < 2; tries++) { try { m_nq->xenquire = new Xapian::Enquire(m_db->m_ndb->xrdb); if (m_collapseDuplicates) { m_nq->xenquire->set_collapse_key(Rcl::VALUE_MD5); } else { m_nq->xenquire->set_collapse_key(Xapian::BAD_VALUENO); } m_nq->xenquire->set_docid_order(Xapian::Enquire::DONT_CARE); if (!m_sortField.empty() && stringlowercmp("relevancyrating", m_sortField)) { if (m_sorter) { delete (QSorter*)m_sorter; m_sorter = nullptr; } m_sorter = new QSorter(m_sortField); // It really seems there is a xapian bug about sort order, we invert here. m_nq->xenquire->set_sort_by_key((QSorter*)m_sorter, !m_sortAscending); } m_nq->xenquire->set_query(m_nq->xquery); m_nq->xmset = Xapian::MSet(); // Get the query description and trim the "Xapian::Query" d = m_nq->xquery.get_description(); m_reason.erase(); break; } catch (const Xapian::DatabaseModifiedError &e) { m_reason = e.get_msg(); m_db->m_ndb->xrdb.reopen(); continue; } XCATCHERROR(m_reason); break; } if (!m_reason.empty()) { LOGDEB("Query::SetQuery: xapian error " << m_reason << "\n"); return false; } if (d.find("Xapian::Query") == 0) d.erase(0, strlen("Xapian::Query")); sdata->setDescription(d); m_sd = sdata; LOGDEB("Query::SetQuery: Q: " << sdata->getDescription() << "\n"); return true; } bool Query::getQueryTerms(vector& terms) { if (!m_nq) return false; terms.clear(); Xapian::TermIterator it; string ermsg; try { for (it = m_nq->xquery.get_terms_begin(); it != m_nq->xquery.get_terms_end(); it++) { terms.push_back(*it); } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("getQueryTerms: xapian error: " << ermsg << "\n"); return false; } return true; } bool Query::getDocTerms(const Doc& doc, vector>& oterms) { if (!m_db || !m_db->m_ndb || !m_db->m_ndb->m_isopen || !m_nq) { return false; } oterms.clear(); auto docid = doc.xdocid; vector matchterms; m_nq->getMatchTerms(docid, matchterms); if (matchterms.empty()) { LOGDEB("getDocTerms: empty match term list (field match?)\n"); return false; } multimap > byQ; m_nq->qualityTerms(docid, matchterms, byQ); if (byQ.empty()) { LOGDEB("qualityTerms returned no terms for docid " << docid << " input terms " << stringsToString(matchterms) << "\n"); return -1; } for (auto mit = byQ.rbegin(); mit != byQ.rend(); mit++) { oterms.push_back(mit->second); } return true; } int Query::makeDocAbstract(const Doc &doc, PlainToRich *plaintorich, vector& abstract, int maxoccs, int ctxwords, bool sortbypage) { LOGDEB("makeDocAbstract: maxoccs " << maxoccs << " ctxwords " << ctxwords << "\n"); if (!m_db || !m_db->m_ndb || !m_db->m_ndb->m_isopen || !m_nq) { LOGERR("Query::makeDocAbstract: no db or no nq\n"); return ABSRES_ERROR; } int ret = ABSRES_ERROR; vector abs1; XAPTRY(ret = m_nq->makeAbstract(doc.xdocid, abs1, maxoccs, ctxwords, sortbypage), m_db->m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGDEB("makeDocAbstract: makeAbstract: reason: " << m_reason << "\n"); return ABSRES_ERROR; } HighlightData hldata; auto sd = getSD(); sd->getTerms(hldata); for (auto& snip : abs1) { list ls; if (plaintorich->plaintorich(snip.snippet, ls, hldata)) { snip.snippet = ls.front(); abstract.push_back(snip); } } return ret; } bool Query::makeDocAbstract(const Doc &doc, PlainToRich *plaintorich, vector& abstract) { vector vpabs; if (!makeDocAbstract(doc, plaintorich, vpabs)) return false; for (const auto& snippet : vpabs) { string chunk; if (snippet.page > 0) { chunk += string(" [P. ") + std::to_string(snippet.page) + "] "; } else if (snippet.line > 0) { chunk += string(" [L. ") + std::to_string(snippet.line) + "] "; } chunk += snippet.snippet; abstract.push_back(chunk); } return true; } int Query::getFirstMatchPage(const Doc &doc, string& term) { LOGDEB1("Db::getFirstMatchPage\n");; if (!m_nq) { LOGERR("Query::getFirstMatchPage: no nq\n"); return false; } int pagenum = -1; XAPTRY(pagenum = m_nq->getFirstMatchPage(Xapian::docid(doc.xdocid), term), m_db->m_ndb->xrdb, m_reason); return m_reason.empty() ? pagenum : -1; } // Get estimated result count for query. Xapian actually does most of // the search job in there, this can be long int Query::getResCnt(int checkatleast, bool useestimate) { if (!m_db || !m_nq || !m_nq->xenquire) { LOGERR("Query::getResCnt: no query opened\n"); return -1; } LOGDEB0("Query::getResCnt: checkatleast " << checkatleast << " estimate " << useestimate << "\n"); if (m_resCnt >= 0) return m_resCnt; if (m_nq->xmset.size() <= 0) { Chrono chron; XAPTRY(if (checkatleast == -1) checkatleast = m_db->docCnt(); m_nq->xmset = m_nq->xenquire->get_mset( 0, m_qquantum, checkatleast, nullptr, m_nq->subdecider), m_db->m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("xenquire->get_mset: exception: " << m_reason << "\n"); return -1; } LOGDEB("Query::getResCnt: get_mset: " << chron.millis() << " mS\n"); } if (useestimate) { m_resCnt = m_nq->xmset.get_matches_estimated(); } else { m_resCnt = m_nq->xmset.get_matches_lower_bound(); } LOGDEB("Query::getResCnt: " << m_resCnt << "\n"); return m_resCnt; } // Get document at rank xapi in query results. We check if the // current mset has the doc, else ask for an other one. We use msets // of m_qquantum documents. // // Note that as stated by a Xapian developer, Enquire searches from // scratch each time get_mset() is called. So the better performance // on subsequent calls is probably only due to disk caching. bool Query::getDoc(int xapi, Doc &doc, bool fetchtext) { LOGDEB1("Query::getDoc: xapian enquire index " << xapi << "\n"); if (!m_nq || !m_nq->xenquire) { LOGERR("Query::getDoc: no query opened\n"); return false; } int first = m_nq->xmset.get_firstitem(); if (!(xapi >= first && xapi <= first + int(m_nq->xmset.size()) -1)) { LOGDEB("Fetching for first " << xapi << ", count " << m_qquantum << "\n"); XAPTRY(m_nq->xmset = m_nq->xenquire->get_mset(xapi, m_qquantum, nullptr, m_nq->subdecider), m_db->m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("enquire->get_mset: exception: " << m_reason << "\n"); return false; } if (m_nq->xmset.empty()) { LOGDEB("enquire->get_mset: got empty result\n"); return false; } first = m_nq->xmset.get_firstitem(); } Xapian::Document xdoc; Xapian::docid docid = 0; int pc = 0; int collapsecount = 0; string data; m_reason.erase(); for (int xaptries = 0; xaptries < 2; xaptries++) { try { xdoc = m_nq->xmset[xapi-first].get_document(); collapsecount = m_nq->xmset[xapi-first].get_collapse_count(); docid = *(m_nq->xmset[xapi-first]); pc = m_nq->xmset.convert_to_percent(m_nq->xmset[xapi-first]); data = xdoc.get_data(); m_reason.erase(); break; } catch (Xapian::DatabaseModifiedError &error) { // retry or end of loop m_reason = error.get_msg(); continue; } XCATCHERROR(m_reason); break; } if (!m_reason.empty()) { LOGERR("Query::getDoc: " << m_reason << "\n"); return false; } doc.pc = pc; char buf[200]; if (collapsecount > 0) { snprintf(buf, sizeof(buf), "%3d%% (%d)", pc, collapsecount + 1); } else { snprintf(buf, sizeof(buf), "%3d%%", pc); } doc.meta[Doc::keyrr] = buf; if (collapsecount > 0) { snprintf(buf, sizeof(buf), "%d", collapsecount); doc.meta[Rcl::Doc::keycc] = buf; } // Parse xapian document's data and populate doc fields return m_db->m_ndb->dbDataToRclDoc(docid, xdoc, data, doc, fetchtext); } vector Query::expand(const Doc &doc) { LOGDEB("Rcl::Query::expand()\n"); vector res; if (!m_nq || !m_nq->xenquire) { LOGERR("Query::expand: no query opened\n"); return res; } for (int tries = 0; tries < 2; tries++) { try { Xapian::RSet rset; rset.add_document(Xapian::docid(doc.xdocid)); // We don't exclude the original query terms. Xapian::ESet eset = m_nq->xenquire->get_eset(20, rset, false); LOGDEB("ESet terms:\n"); // We filter out the special terms for (Xapian::ESetIterator it = eset.begin(); it != eset.end(); it++) { LOGDEB(" [" << (*it) << "]\n"); if ((*it).empty() || has_prefix(*it)) continue; res.push_back(*it); if (res.size() >= 10) break; } m_reason.erase(); break; } catch (const Xapian::DatabaseModifiedError &e) { m_reason = e.get_msg(); m_db->m_ndb->xrdb.reopen(); continue; } XCATCHERROR(m_reason); break; } if (!m_reason.empty()) { LOGERR("Query::expand: xapian error " << m_reason << "\n"); res.clear(); } return res; } } recoll-1.43.12/rcldb/synfamily.cpp0000644000175000017500000002120214753313624016256 0ustar dockesdockes/* Copyright (C) 2012-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include "log.h" #include "cstr.h" #include "xmacros.h" #include "synfamily.h" #include "smallut.h" using namespace std; namespace Rcl { bool XapWritableSynFamily::createMember(const string& membername) { string ermsg; try { m_wdb.add_synonym(memberskey(), membername); } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("XapSynFamily::createMember: error: " << ermsg << "\n"); return false; } return true; } bool XapWritableSynFamily::deleteMember(const string& membername) { string key = entryprefix(membername); for (Xapian::TermIterator xit = m_wdb.synonym_keys_begin(key); xit != m_wdb.synonym_keys_end(key); xit++) { m_wdb.clear_synonyms(*xit); } m_wdb.remove_synonym(memberskey(), membername); return true; } bool XapSynFamily::getMembers(vector& members) { string key = memberskey(); string ermsg; try { for (Xapian::TermIterator xit = m_rdb.synonyms_begin(key); xit != m_rdb.synonyms_end(key); xit++) { members.push_back(*xit); } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("XapSynFamily::getMembers: xapian error " << ermsg << "\n"); return false; } return true; } bool XapSynFamily::listMap(const string& membername) { string key = entryprefix(membername); string ermsg; try { for (Xapian::TermIterator kit = m_rdb.synonym_keys_begin(key); kit != m_rdb.synonym_keys_end(key); kit++) { cout << "[" << *kit << "] -> "; for (Xapian::TermIterator xit = m_rdb.synonyms_begin(*kit); xit != m_rdb.synonyms_end(*kit); xit++) { cout << *xit << " "; } cout << endl; } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("XapSynFamily::listMap: xapian error " << ermsg << "\n"); return false; } vectormembers; getMembers(members); cout << "All family members: "; for (vector::const_iterator it = members.begin(); it != members.end(); it++) { cout << *it << " "; } cout << endl; return true; } bool XapSynFamily::synExpand(const string& member, const string& term, vector& result) { LOGDEB("XapSynFamily::synExpand:(" << m_prefix1 << ") " << term << " for " << member << "\n"); string key = entryprefix(member) + term; string ermsg; try { for (Xapian::TermIterator xit = m_rdb.synonyms_begin(key); xit != m_rdb.synonyms_end(key); xit++) { LOGDEB2(" Pushing " << *xit << "\n"); result.push_back(*xit); } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("synFamily::synExpand: error for member [" << member << "] term [" << term << "]\n"); result.push_back(term); return false; } // If the input term is not in the list, add it if (find(result.begin(), result.end(), term) == result.end()) { result.push_back(term); } return true; } bool XapComputableSynFamMember::synExpand(const string& term, vector& result, SynTermTrans *filtertrans) { string root = (*m_trans)(term); string filter_root; if (filtertrans) filter_root = (*filtertrans)(term); string key = m_prefix + root; LOGDEB("XapCompSynFamMbr::synExpand([" << m_prefix << "]): term [" << term << "] root [" << root << "] m_trans: " << m_trans->name() << " filter: " << (filtertrans ? filtertrans->name() : "none") << "\n"); string ermsg; try { for (Xapian::TermIterator xit = m_family.getdb().synonyms_begin(key); xit != m_family.getdb().synonyms_end(key); xit++) { LOGDEB("XapCompSynFamMbr::synExpand: testing " << *xit << endl); if (!filtertrans || (*filtertrans)(*xit) == filter_root) { LOGDEB2(" Pushing " << *xit << "\n"); result.push_back(*xit); } } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("XapSynDb::synExpand: error for term [" << term << "] (key " << key << ")\n"); result.push_back(term); return false; } // If the input term and root are not in the list, add them if (find(result.begin(), result.end(), term) == result.end()) { LOGDEB2(" Pushing " << term << "\n"); result.push_back(term); } if (root != term && find(result.begin(), result.end(), root) == result.end()) { if (!filtertrans || (*filtertrans)(root) == filter_root) { LOGDEB2(" Pushing " << root << "\n"); result.push_back(root); } } LOGDEB("XapCompSynFamMbr::synExpand([" << m_prefix << "]): term [" << term << "] -> [" << stringsToString(result) << "]\n"); return true; } bool XapComputableSynFamMember::synKeyExpand(StrMatcher* inexp, vector& result, SynTermTrans *filtertrans) { LOGDEB("XapCompSynFam::synKeyExpand: [" << inexp->exp() << "]\n"); // If set, compute filtering term (e.g.: only case-folded) std::shared_ptr filter_exp; if (filtertrans) { filter_exp = std::shared_ptr(inexp->clone()); filter_exp->setExp((*filtertrans)(inexp->exp())); } // Transform input into our key format (e.g.: case-folded + diac-stripped), // and prepend prefix inexp->setExp(m_prefix + (*m_trans)(inexp->exp())); // Find the initial section before any special chars for skipping the keys string::size_type es = inexp->baseprefixlen(); string is = inexp->exp().substr(0, es); string::size_type preflen = m_prefix.size(); LOGDEB2("XapCompSynFam::synKeyExpand: init section: [" << is << "]\n"); string ermsg; try { for (Xapian::TermIterator xit = m_family.getdb().synonym_keys_begin(is); xit != m_family.getdb().synonym_keys_end(is); xit++) { LOGDEB2(" Checking1 [" << *xit << "] against [" << inexp->exp() << "]\n"); if (!inexp->match(*xit)) continue; // Push all the synonyms if they match the secondary filter for (Xapian::TermIterator xit1 = m_family.getdb().synonyms_begin(*xit); xit1 != m_family.getdb().synonyms_end(*xit); xit1++) { string term = *xit1; if (filter_exp) { string term1 = (*filtertrans)(term); LOGDEB2(" Testing [" << term1 << "] against [" << filter_exp->exp() << "]\n"); if (!filter_exp->match(term1)) { continue; } } LOGDEB2("XapCompSynFam::keyWildExpand: [" << *xit1 << "]\n"); result.push_back(*xit1); } // Same with key itself string term = (*xit).substr(preflen); if (filter_exp) { string term1 = (*filtertrans)(term); LOGDEB2(" Testing [" << term1 << "] against [" << filter_exp->exp() << "]\n"); if (!filter_exp->match(term1)) { continue; } } LOGDEB2("XapCompSynFam::keyWildExpand: [" << term << "]\n"); result.push_back(term); } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("XapCompSynFam::synKeyExpand: xapian: [" << ermsg << "]\n"); return false; } LOGDEB1("XapCompSynFam::synKeyExpand: final: [" << stringsToString(result) << "]\n"); return true; } } // Namespace Rcl recoll-1.43.12/rcldb/rcldoc.cpp0000644000175000017500000001127115125475035015515 0ustar dockesdockes/* Copyright (C) 2007-2018 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "rcldoc.h" #include "log.h" #include "rclutil.h" using namespace std; namespace Rcl { const string Doc::keyabs("abstract"); const string Doc::keyapptg("rclaptg"); const string Doc::keyau("author"); const string Doc::keybcknd("rclbes"); const string Doc::keybght("beagleHitType"); const string Doc::keycc("collapsecount"); const string Doc::keychildurl("childurl"); const string Doc::keydmt("dmtime"); const string Doc::keyds("dbytes"); const string Doc::keyfmt("fmtime"); const string Doc::keyfn("filename"); const string Doc::keyctfn("containerfilename"); const string Doc::keyfs("fbytes"); const string Doc::keyipt("ipath"); const string Doc::keykw("keywords"); const string Doc::keymd5("md5"); const string Doc::keymt("mtime"); const string Doc::keyoc("origcharset"); const string Doc::keypcs("pcbytes"); const string Doc::keyrr("relevancyrating"); const string Doc::keysig("sig"); const string Doc::keysz("size"); const string Doc::keytp("mtype"); const string Doc::keytt("title"); const string Doc::keyudi("rcludi"); const string Doc::keyurl("url"); #ifdef EXT4_BIRTH_TIME const string Doc::keybrt("birtime"); #endif void Doc::dump(bool dotext) const { LOGDEB("Rcl::Doc::dump: url: [" << url << "]\n"); LOGDEB("Rcl::Doc::dump: idxurl: [" << idxurl << "]\n"); LOGDEB("Rcl::Doc::dump: ipath: [" << ipath << "]\n"); LOGDEB("Rcl::Doc::dump: mimetype: [" << mimetype << "]\n"); LOGDEB("Rcl::Doc::dump: fmtime: [" << fmtime << "]\n"); LOGDEB("Rcl::Doc::dump: dmtime: [" << dmtime << "]\n"); LOGDEB("Rcl::Doc::dump: origcharset: [" << origcharset << "]\n"); LOGDEB("Rcl::Doc::dump: syntabs: [" << syntabs << "]\n"); LOGDEB("Rcl::Doc::dump: pcbytes: [" << pcbytes << "]\n"); LOGDEB("Rcl::Doc::dump: fbytes: [" << fbytes << "]\n"); LOGDEB("Rcl::Doc::dump: dbytes: [" << dbytes << "]\n"); LOGDEB("Rcl::Doc::dump: sig: [" << sig << "]\n"); LOGDEB("Rcl::Doc::dump: pc: [" << pc << "]\n"); LOGDEB("Rcl::Doc::dump: xdocid: [" << (unsigned long)xdocid << "]\n"); for (const auto& e : meta) { LOGDEB("Rcl::Doc::dump: meta[" << e.first <<"]->["<< e.second << "]\n"); } if (dotext) LOGDEB("Rcl::Doc::dump: text: \n[" << text << "]\n"); } // Copy ensuring no shared string data, for threading issues. void Doc::copyto(Doc *d) const { d->url.assign(url.begin(), url.end()); d->idxurl.assign(idxurl.begin(), idxurl.end()); d->idxi = idxi; d->ipath.assign(ipath.begin(), ipath.end()); d->mimetype.assign(mimetype.begin(), mimetype.end()); d->fmtime.assign(fmtime.begin(), fmtime.end()); d->dmtime.assign(dmtime.begin(), dmtime.end()); d->origcharset.assign(origcharset.begin(), origcharset.end()); map_ss_cp_noshr(meta, &d->meta); d->syntabs = syntabs; d->pcbytes.assign(pcbytes.begin(), pcbytes.end()); d->fbytes.assign(fbytes.begin(), fbytes.end()); d->dbytes.assign(dbytes.begin(), dbytes.end()); d->sig.assign(sig.begin(), sig.end()); d->text.assign(text.begin(), text.end()); d->pc = pc; d->xdocid = xdocid; d->haspages = haspages; d->haschildren = haschildren; d->metaonly = metaonly; } bool docsToPaths(const vector &docs, vector &paths) { for (const auto& idoc : docs) { string backend; idoc.getmeta(Rcl::Doc::keybcknd, &backend); // This only makes sense for file system files: beagle docs are // always up to date because they can't be updated in the cache, // only added/removed. Same remark as made inside internfile, we // need a generic way to handle backends. if (!backend.empty() && backend.compare("FS")) continue; // Filesystem document. The url has to be like file:// if (!urlisfileurl(idoc.url)) { LOGERR("idx::docsToPaths: FS backend and non fs url: [" << idoc.url << "]\n"); continue; } paths.push_back(url_gpath(idoc.url)); } return true; } } recoll-1.43.12/rcldb/stemdb.h0000644000175000017500000000707415121730573015175 0ustar dockesdockes/* Copyright (C) 2004 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _STEMDB_H_INCLUDED_ #define _STEMDB_H_INCLUDED_ /** Stem database code * * Stem databases are key-data stores where the keys are the word stems and the data records are the * sets of index terms they expand to. * * Stem databases are stored as prefixed subtrees inside the Xapian synonyms table (other segments * in the table are used for separate term expansions, e.g. accenting and case). See synfamily.h * * It would probably be possible to store the expansions in the document term list instead (using a * prefix to distinguish the stem term). I tried this (chert, 08-2012) and the stem db creation is * very slightly slower than with the record approach, and the result is 50% bigger. * * For future reference, I also tried to store the map in a gdbm file and the result is bigger and * takes more time to create than the Xapian version. * * Stem databases are generated at the end of an indexing session by walking the whole index term * list, computing the stem for each term, and building a stem->terms map. * * Another possible approach would be to update the stem map as we index. This would probably be be * less efficient for a full index pass because each term would be seen and stemmed many times, but * it might be more efficient for an incremental pass with a limited number of updated * documents. For a small update, the stem building part often dominates the indexing time. * */ #include #include #include #include "synfamily.h" namespace Rcl { /* A stemming functor for using with XapComputableSynFamMember. * We could perform the change to lowercase in there too, as stemdb keys * must be lower case, but then the input conversion would be repeated for each * stemming language, which would be inefficient. So we let our caller make sure * that the input is lower-case */ class SynTermTransStem : public SynTermTrans { public: SynTermTransStem(const std::string& lang) : m_stemmer(lang), m_lang(lang) {} virtual ~SynTermTransStem() = default; virtual std::string operator()(const std::string& in) { std::string out = m_stemmer(in); LOGDEB2("SynTermTransStem(" << m_lang << "): in [" << in << "] out [" << out << "]\n"); return out; } Xapian::Stem m_stemmer; std::string m_lang; }; /** Stemdb is a bit special as a SynFamily as we may want to expand for one * or several members (languages) */ class StemDb : public XapSynFamily { public: StemDb(Xapian::Database& xdb) : XapSynFamily(xdb, synFamStem) {} /** Expand for a number of languages * @param langs space-separated set of languages * @param term term to expand */ bool stemExpand( const std::string& langs, const std::string& term, std::vector& result); }; } #endif /* _STEMDB_H_INCLUDED_ */ recoll-1.43.12/rcldb/stemdb.cpp0000644000175000017500000000533215121730573015523 0ustar dockesdockes/* Copyright (C) 2005-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /** * Management of the auxiliary databases listing stems and their expansion terms */ #include "autoconfig.h" #include "safeunistd.h" #include #include #include #include using namespace std; #include #include "stemdb.h" #include "log.h" #include "smallut.h" #include "synfamily.h" #include "unacpp.h" #include "rclconfig.h" namespace Rcl { /** * Expand for one or several languages */ bool StemDb::stemExpand(const std::string& langs, const std::string& _term, vector& result) { vector llangs; stringToStrings(langs, llangs); // The stemdb keys may have kept their diacritics or not but they are always lower-case. It // would be more logical for the term transformers to perform before doing the stemming, but // this would be inefficient when there are several stemming languages string term; unacmaybefold(_term, term, UNACOP_FOLD); for (const auto& lang : llangs) { SynTermTransStem stemmer(lang); XapComputableSynFamMember expander(getdb(), synFamStem, lang, &stemmer); (void)expander.synExpand(term, result); } if (!o_index_stripchars) { string unac; unacmaybefold(term, unac, UNACOP_UNAC); // Expand the unaccented stem, using the unaccented stem db. Because it's a different db, We // need to do it even if the input has no accent (unac == term) for (const auto& lang : llangs) { SynTermTransStem stemmer(lang); XapComputableSynFamMember expander(getdb(), synFamStemUnac, lang, &stemmer); (void)expander.synExpand(unac, result); } } if (result.empty()) result.push_back(term); sort(result.begin(), result.end()); auto uit = unique(result.begin(), result.end()); result.resize(uit - result.begin()); LOGDEB1("stemExpand:" << langs << ": " << term << " -> " << stringsToString(result) << "\n"); return true; } } recoll-1.43.12/rcldb/rclvalues.h0000644000175000017500000000223114753313624015711 0ustar dockesdockes#ifndef _RCLVALUES_H_INCLUDED_ #define _RCLVALUES_H_INCLUDED_ /* Copyright (C) 2004-2018 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include namespace Rcl { extern void add_field_value(Xapian::Document& xdoc, const FieldTraits& ft, const std::string& data); extern std::string convert_field_value(const FieldTraits& ft, const std::string& data); } #endif /* _RCLVALUES_H_INCLUDED_ */ recoll-1.43.12/rcldb/rclabstract.cpp0000644000175000017500000006142115121730573016552 0ustar dockesdockes/* Copyright (C) 2004-2017 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #include #include "log.h" #include "rcldb.h" #include "rcldb_p.h" #include "rclquery.h" #include "rclquery_p.h" #include "textsplit.h" #include "searchdata.h" #include "utf8iter.h" #include "hldata.h" #include "chrono.h" using namespace std; namespace Rcl { static Chrono chron; // This is used as a marker inside the abstract frag lists, but // normally doesn't remain in final output (which is built with a // custom sep. by our caller). static const string cstr_ellipsis("..."); static const string emptys; // This is used to mark positions overlapped by a multi-word match term static const string occupiedmarker("?"); #define DEBUGABSTRACT #ifdef DEBUGABSTRACT #define LOGABS LOGDEB #else #define LOGABS LOGDEB2 #endif // Unprefix terms. Actually it's not completely clear if we should // remove prefixes and keep all terms or prune the prefixed // ones. There is no good way to be sure what will provide the best // result in general. static const bool prune_prefixed_terms = true; static void noPrefixList(const vector& in, vector& out) { for (const auto& term : in) { if (prune_prefixed_terms) { if (has_prefix(term)) continue; } out.push_back(strip_prefix(term)); } sort(out.begin(), out.end()); vector::iterator it = unique(out.begin(), out.end()); out.resize(it - out.begin()); } bool Query::Native::getMatchTerms(unsigned long xdocid, vector& terms) { if (!xenquire) { LOGERR("Query::getMatchTerms: no query opened\n"); return false; } terms.clear(); Xapian::TermIterator it; Xapian::docid id = Xapian::docid(xdocid); vector iterms; XAPTRY(iterms.insert(iterms.begin(), xenquire->get_matching_terms_begin(id), xenquire->get_matching_terms_end(id)), m_q->m_db->m_ndb->xrdb, m_q->m_reason); if (!m_q->m_reason.empty()) { LOGERR("getMatchTerms: xapian error: " << m_q->m_reason << "\n"); return false; } noPrefixList(iterms, terms); return true; } // Retrieve db-wide frequencies for the query terms and store them in // the query object. This is done at most once for a query, and the data is used // while computing abstracts for the different result documents. void Query::Native::setDbWideQTermsFreqs() { // Do it once only for a given query. if (!termfreqs.empty()) return; vector qterms; { vector iqterms; m_q->getQueryTerms(iqterms); noPrefixList(iqterms, qterms); } LOGDEB("Query terms: " << stringsToString(qterms) << endl); Xapian::Database &xrdb = m_q->m_db->m_ndb->xrdb; double doccnt = xrdb.get_doccount(); if (doccnt == 0) doccnt = 1; for (const auto& term : qterms) { termfreqs[term] = xrdb.get_termfreq(term) / doccnt; LOGABS("setDbWideQTermFreqs: [" << term << "] db freq " << termfreqs[term] << "\n"); } } // Compute matched terms quality coefficients for a matched document by // retrieving the Within Document Frequencies and multiplying by // overal term frequency, then using log-based thresholds. // 2012: it's not too clear to me why exactly we do the log thresholds thing. // Preferring terms which are rare either or both in the db and the document // seems reasonable though // To avoid setting a high quality for a low frequency expansion of a // common stem, which seems wrong, we group the terms by // root, compute a frequency for the group from the sum of member // occurrences, and let the frequency for each group member be the // aggregated frequency. double Query::Native::qualityTerms(Xapian::docid docid, const vector& terms, multimap >& byQ) { LOGABS("qualityTerms: entry " << chron.millis() << "mS\n"); setDbWideQTermsFreqs(); LOGABS("qualityTerms: setDbWide..: " << chron.millis() << "mS\n"); map termQcoefs; double totalweight = 0; Xapian::Database &xrdb = m_q->m_db->m_ndb->xrdb; double doclen = xrdb.get_doclength(docid); if (doclen == 0) doclen = 1; HighlightData hld; if (m_q->m_sd) { m_q->m_sd->getTerms(hld); } LOGABS("qualityTerms: m_sd->getTerms(): " << chron.millis() << "mS\n"); // Group the input terms by the user term they were possibly // expanded from (by stemming) map > byRoot; for (const auto& term: terms) { const auto eit = hld.terms.find(term); if (eit != hld.terms.end()) { byRoot[eit->second].push_back(term); } else { LOGDEB0("qualityTerms: [" << term << "] not found in hld\n"); byRoot[term].push_back(term); } } #ifdef DEBUGABSTRACT { LOGABS("qualityTerms: hld: " << hld.toString() << "\n"); string byRootstr; for (const auto& entry : byRoot) { byRootstr.append("[").append(entry.first).append("]->"); for (const auto& term : entry.second) { byRootstr.append("[").append(term).append("] "); } byRootstr.append("\n"); } LOGABS("qualityTerms: uterms to terms: " << chron.millis() << "mS " << byRootstr << endl); } #endif // Compute in-document and global frequencies for the groups. We // used to call termlist_begin() for each term. This was very slow // on big documents and long term lists. We now compute a sorted // list of terms (with pointers back to their root through a map), // and just call skip_to repeatedly vector allterms; unordered_map toRoot; for (const auto& group : byRoot) { for (const auto& term : group.second) { allterms.push_back(term); toRoot[term] = group.first; } } sort(allterms.begin(), allterms.end()); allterms.erase(unique(allterms.begin(), allterms.end()), allterms.end()); map grpwdfs; map grptfreqs; Xapian::TermIterator xtermit = xrdb.termlist_begin(docid); for (const auto& term : allterms) { const string& root = toRoot[term]; xtermit.skip_to(term); if (xtermit != xrdb.termlist_end(docid) && *xtermit == term) { if (grpwdfs.find(root) != grpwdfs.end()) { grpwdfs[root] = xtermit.get_wdf() / doclen; grptfreqs[root] = termfreqs[term]; } else { grpwdfs[root] += xtermit.get_wdf() / doclen; grptfreqs[root] += termfreqs[term]; } } else { LOGDEB("qualityTerms: term not found in doc term list: " << term << endl); } } LOGABS("qualityTerms: freqs compute: " << chron.millis() << "mS\n"); // Build a sorted by quality container for the groups for (const auto& group : byRoot) { double q = (grpwdfs[group.first]) * grptfreqs[group.first]; q = -log10(q); if (q < 3) { q = 0.05; } else if (q < 4) { q = 0.3; } else if (q < 5) { q = 0.7; } else if (q < 6) { q = 0.8; } else { q = 1; } totalweight += q; byQ.insert(pair >(q, group.second)); } #ifdef DEBUGABSTRACT for (auto mit= byQ.rbegin(); mit != byQ.rend(); mit++) { LOGABS("qualityTerms: coef: " << mit->first << " group: " << stringsToString(mit->second) << endl); } #endif return totalweight; } // Choose most interesting term and return the page number for its first match. We are sometimes // called just for getting the term, with no actual page positions in the doc (to avoid an // additional method in the docseq classes). int Query::Native::getFirstMatchPage(Xapian::docid docid, string& term) { LOGDEB("Query::Native::getFirstMatchPage\n"); chron.restart(); if (!m_q|| !m_q->m_db || !m_q->m_db->m_ndb || !m_q->m_db->m_ndb->m_isopen) { LOGERR("Query::getFirstMatchPage: no db\n"); return -1; } Rcl::Db::Native *ndb(m_q->m_db->m_ndb); Xapian::Database& xrdb(ndb->xrdb); vector terms; getMatchTerms(docid, terms); if (terms.empty()) { LOGDEB("getFirstMatchPage: empty match term list (field match?)\n"); return -1; } vector pagepos; ndb->getPagePositions(docid, pagepos); setDbWideQTermsFreqs(); // We try to use a page which matches the "best" term. Get a sorted list multimap > byQ; qualityTerms(docid, terms, byQ); if (byQ.empty()) { LOGDEB("qualityTerms returned no terms for docid " << docid << " input terms " << stringsToString(terms) << "\n"); return -1; } if (pagepos.empty()) { // Just return the chosen term if (!byQ.begin()->second.empty()) { term = byQ.begin()->second[0]; } return -1; } // Actually look for the page, for each best term in turn, stop as soon as we find one. for (auto mit = byQ.rbegin(); mit != byQ.rend(); mit++) { for (const auto& qterm : mit->second) { Xapian::PositionIterator pos; string emptys; try { for (pos = xrdb.positionlist_begin(docid, qterm); pos != xrdb.positionlist_end(docid, qterm); pos++) { int pagenum = ndb->getPageNumberForPosition(pagepos, *pos); if (pagenum > 0) { term = qterm; return pagenum; } } } catch (...) { // Term does not occur. No problem. } } } return -1; } // Creating the abstract from index position data: populate the sparse // array with the positions for a given query term, and mark the // neighboring positions. void Query::Native::abstractPopulateQTerm( Xapian::Database& xrdb, Xapian::docid docid, const string& qterm, int qtrmwrdcnt, int ctxwords, unsigned int maxgrpoccs, unsigned int maxtotaloccs, map& sparseDoc, unordered_set& searchTermPositions, unsigned int& maxpos, unsigned int& totaloccs, unsigned int& grpoccs, int& ret ) { Xapian::PositionIterator pos; // Walk the position list for this term. for (pos = xrdb.positionlist_begin(docid, qterm); pos != xrdb.positionlist_end(docid, qterm); pos++) { int ipos = *pos; if (ipos < int(baseTextPosition)) // Not in text body continue; LOGABS("makeAbstract: [" << qterm << "] at pos " << ipos << " grpoccs " << grpoccs << " maxgrpoccs " << maxgrpoccs << "\n"); totaloccs++; grpoccs++; // Add adjacent slots to the set to populate at next // step by inserting empty strings. Special provisions // for adding ellipsis and for positions overlapped by // the match term. unsigned int sta = MAX(int(baseTextPosition), ipos - ctxwords); unsigned int sto = ipos + qtrmwrdcnt-1 + m_q->m_db->getAbsCtxLen(); for (unsigned int ii = sta; ii <= sto; ii++) { if (ii == (unsigned int)ipos) { sparseDoc[ii] = qterm; searchTermPositions.insert(ii); if (ii > maxpos) maxpos = ii; } else if (ii > (unsigned int)ipos && ii < (unsigned int)ipos + qtrmwrdcnt) { // Position for another word of the multi-word term sparseDoc[ii] = occupiedmarker; } else if (!sparseDoc[ii].compare(cstr_ellipsis)) { // For an empty slot, the test above has a side // effect of inserting an empty string which // is what we want. Do it also if it was an ellipsis sparseDoc[ii] = emptys; } } // Add ellipsis at the end. This may be replaced later by // an overlapping extract. Take care not to replace an // empty string here, we really want an empty slot, // use find() if (sparseDoc.find(sto+1) == sparseDoc.end()) { sparseDoc[sto+1] = cstr_ellipsis; } // Group done ? if (grpoccs >= maxgrpoccs) { ret |= ABSRES_TRUNC; LOGABS("Db::makeAbstract: max group occs cutoff\n"); break; } // Global done ? if (totaloccs >= maxtotaloccs) { ret |= ABSRES_TRUNC; LOGABS("Db::makeAbstract: max occurrences cutoff\n"); break; } } } // Creating the abstract from index position data: after the query // terms have been inserted at their place in the sparse array, and // the neighboring positions marked, populate the neighbours: for each // term in the document, walk its position list and populate slots // around the query terms. We arbitrarily truncate the list to avoid // taking forever. If we do cutoff, the abstract may be inconsistent // (missing words, potentially altering meaning), which is bad. void Query::Native::abstractPopulateContextTerms( Xapian::Database& xrdb, Xapian::docid docid, unsigned int maxpos, map& sparseDoc, int& ret ) { Xapian::TermIterator term; int cutoff = m_q->m_snipMaxPosWalk; for (term = xrdb.termlist_begin(docid); term != xrdb.termlist_end(docid); term++) { // Ignore prefixed terms if (has_prefix(*term)) continue; if (m_q->m_snipMaxPosWalk > 0 && cutoff-- < 0) { ret |= ABSRES_TERMMISS; LOGDEB0("makeAbstract: max term count cutoff " << m_q->m_snipMaxPosWalk << "\n"); break; } map::iterator vit; Xapian::PositionIterator pos; for (pos = xrdb.positionlist_begin(docid, *term); pos != xrdb.positionlist_end(docid, *term); pos++) { if (m_q->m_snipMaxPosWalk > 0 && cutoff-- < 0) { ret |= ABSRES_TERMMISS; LOGDEB0("makeAbstract: max term count cutoff " << m_q->m_snipMaxPosWalk << "\n"); break; } // If we are beyond the max possible position, stop // for this term if (*pos > maxpos) { break; } if ((vit = sparseDoc.find(*pos)) != sparseDoc.end()) { // Don't replace a term: the terms list is in // alphabetic order, and we may have several terms // at the same position, we want to keep only the // first one (ie: dockes and dockes@wanadoo.fr) if (vit->second.empty()) { LOGDEB2("makeAbstract: populating: [" << *term << "] at " << *pos << "\n"); sparseDoc[*pos] = *term; } } } } } // Creating the abstract from position data: final phase: extract the // snippets from the sparse array. void Query::Native::abstractCreateSnippetsVector( Rcl::Db::Native *ndb, map& sparseDoc, unordered_set& searchTermPositions, vector& vpbreaks, vector& vabs) { vabs.clear(); string chunk; bool incjk = false; int page = 0; string term; for (const auto& ent : sparseDoc) { LOGDEB2("Abtract:output "<< ent.first <<" -> [" <getPageNumberForPosition(vpbreaks, ent.first); if (page < 0) page = 0; term.clear(); } Utf8Iter uit(ent.second); bool newcjk = false; // We reuse the noStemming test which is currently CJK and other se-asian scripts. if (TextSplit::noStemming(*uit)) newcjk = true; if (!incjk || (incjk && !newcjk)) chunk += " "; incjk = newcjk; if (searchTermPositions.find(ent.first) != searchTermPositions.end()) term = ent.second; if (ent.second == cstr_ellipsis) { vabs.push_back(Snippet(page, chunk).setTerm(term)); chunk.clear(); } else { if (ent.second.compare(end_of_field_term) && ent.second.compare(start_of_field_term)) chunk += ent.second; } } if (!chunk.empty()) vabs.push_back(Snippet(page, chunk).setTerm(term)); } // Creating the abstract from index position data: top level routine int Query::Native::abstractFromIndex( Rcl::Db::Native *ndb, Xapian::docid docid, const vector&, const multimap> byQ, double totalweight, int ctxwords, unsigned int maxtotaloccs, vector& vabs, Chrono& chron ) { Xapian::Database& xrdb(ndb->xrdb); int ret = ABSRES_OK; // The terms 'array' that we partially populate with the document // terms, at their positions around the search terms positions: map sparseDoc; // Also remember apart the search term positions so that we can list // them with their snippets. std::unordered_set searchTermPositions; // Remember max position. Used to stop walking positions lists while // populating the adjacent slots. unsigned int maxpos = 0; // Total number of occurrences for all terms. We stop when we have too much unsigned int totaloccs = 0; // First pass to populate the sparse document: we walk the term // groups, beginning with the better ones, and insert each term at // its position. We also insert empty strings at the surrounding // positions. These are markers showing where we should insert // data during the next pass. for (auto mit = byQ.rbegin(); mit != byQ.rend(); mit++) { unsigned int maxgrpoccs; double q; if (byQ.size() == 1) { maxgrpoccs = maxtotaloccs; q = 1.0; } else { // We give more slots to the better term groups q = mit->first / totalweight; maxgrpoccs = int(std::ceil(maxtotaloccs * q)); } unsigned int grpoccs = 0; // For each term in user term expansion group for (const auto& qterm : mit->second) { // Enough for this group ? if (grpoccs >= maxgrpoccs) break; LOGABS("makeAbstract: [" << qterm << "] " << maxgrpoccs << " max grp occs (coef " << q << ")\n"); // The match term may span several words (more than one position) int qtrmwrdcnt = TextSplit::countWords(qterm, TextSplit::TXTS_NOSPANS); // Populate positions for this query term. // There may be query terms not in this doc. This raises an // exception when requesting the position list, we catch it ?? // Not clear how this can happen because we are walking the // match list returned by Xapian. Maybe something with the // fields? try { abstractPopulateQTerm(xrdb, docid, qterm, qtrmwrdcnt, ctxwords, maxgrpoccs,maxtotaloccs, sparseDoc, searchTermPositions, maxpos, totaloccs, grpoccs, ret); } catch (...) { // Term does not occur. No problem. } if (totaloccs >= maxtotaloccs) { ret |= ABSRES_TRUNC; LOGABS("Db::makeAbstract: max1 occurrences cutoff\n"); break; } } } maxpos += ctxwords + 1; LOGABS("makeAbstract:" << chron.millis() << "mS:chosen number of positions " << totaloccs << "\n"); // This can happen if there are term occurrences in the keywords // etc. but not elsewhere ? if (totaloccs == 0) { LOGDEB("makeAbstract: no occurrences\n"); return ABSRES_OK; } abstractPopulateContextTerms(xrdb, docid, maxpos, sparseDoc, ret); LOGABS("makeAbstract:" << chron.millis() << "mS: all term poslist read\n"); vector vpbreaks; ndb->getPagePositions(docid, vpbreaks); LOGABS("makeAbstract:" << chron.millis() << "mS: extracting. Got " << vpbreaks.size() << " pages\n"); // Finally build the abstract by walking the map (in order of position) abstractCreateSnippetsVector(ndb, sparseDoc, searchTermPositions, vpbreaks, vabs); LOGABS("makeAbtract: done in " << chron.millis() << " mS\n"); return ret; } // Build a document abstract by extracting text chunks around the // query terms. This can either uses the index position lists, or the // stored document text, with very different implementations. // // DatabaseModified and other general exceptions are caught and // possibly retried by our caller. // // @param[out] vabs the abstract is returned as a vector of snippets. int Query::Native::makeAbstract( Xapian::docid docid, vector& vabs, int imaxoccs, int ictxwords, bool sortbypage) { chron.restart(); LOGDEB("makeAbstract: docid " << docid << " imaxoccs " << imaxoccs << " ictxwords " << ictxwords << " sort by page " << sortbypage << "\n"); // The (unprefixed) terms matched by this document vector matchedTerms; getMatchTerms(docid, matchedTerms); if (matchedTerms.empty()) { LOGDEB("makeAbstract:" << chron.millis() << "mS:Empty term list\n"); return ABSRES_ERROR; } LOGDEB("Match terms: " << stringsToString(matchedTerms) << endl); // Retrieve the term frequencies for the query terms. This is // actually computed only once for a query, and for all terms in // the query (not only the matches for this doc) setDbWideQTermsFreqs(); // Build a sorted by quality container for the match terms We are // going to try and show text around the less common search terms. // Terms issued from an original one by stem expansion are // aggregated by the qualityTerms() routine (this is what we call // 'term groups' in the following: index terms expanded from the // same user term). multimap> byQ; double totalweight = qualityTerms(docid, matchedTerms, byQ); LOGABS("makeAbstract:" << chron.millis() << "mS: computed Qcoefs.\n"); // This can't happen, but would crash us if (totalweight == 0.0) { LOGERR("makeAbstract:"<m_db->m_ndb); // Total number of slots we populate. The 7 is taken as // average word size. It was a mistake to have the user max // abstract size parameter in characters, we basically only deal // with words. We used to limit the character size at the end, but // this damaged our careful selection of terms const unsigned int maxtotaloccs = imaxoccs > 0 ? imaxoccs : m_q->m_db->getAbsLen() /(7 * (m_q->m_db->getAbsCtxLen() + 1)); int ctxwords = ictxwords == -1 ? m_q->m_db->getAbsCtxLen() : ictxwords; LOGABS("makeAbstract:" << chron.millis() << "mS: mxttloccs " << maxtotaloccs << " ctxwords " << ctxwords << "\n"); if (ndb->m_storetext) { return abstractFromText(ndb, docid, matchedTerms, byQ, totalweight, ctxwords, maxtotaloccs, vabs, chron, sortbypage); } else { return abstractFromIndex(ndb, docid, matchedTerms, byQ, totalweight, ctxwords, maxtotaloccs, vabs, chron); } } } recoll-1.43.12/rcldb/termproc.h0000644000175000017500000002706315121730573015552 0ustar dockesdockes/* Copyright (C) 2011 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _TERMPROC_H_INCLUDED_ #define _TERMPROC_H_INCLUDED_ #include #include #include #include #include "log.h" #include "textsplit.h" #include "stoplist.h" #include "smallut.h" #include "utf8iter.h" #include "unacpp.h" #include "syngroups.h" namespace Rcl { /** * Termproc objects take term tokens as input and do something * with them: transform to lowercase, filter out stop words, generate n-grams, * finally index or generate search clauses, etc. They are chained and can * be arranged to form different pipelines depending on the desired processing * steps: for example, optional stoplist or commongram processing. * * Shared processing steps are defined in this file. The first and last steps * are usually defined in the specific module. * - The front TermProc is typically chained from a TextSplit object * which generates the original terms, and calls takeword() from its * own takeword() method. * - The last TermProc does something with the finalized terms, e.g. adds * them to the index. */ /** * The base class takes care of chaining: all derived classes call its * takeword() and flush() methods to ensure that terms go through the pipe. */ class TermProc { public: TermProc(TermProc* next) : m_next(next) {} virtual ~TermProc() {} /* Copyconst and assignment forbidden */ TermProc(const TermProc &) = delete; TermProc& operator=(const TermProc &) = delete; virtual bool takeword(const std::string &term, size_t pos, size_t bs, size_t be) { if (m_next) return m_next->takeword(term, pos, bs, be); return true; } // newpage() is like takeword(), but for page breaks. virtual void newpage(size_t pos) { if (m_next) m_next->newpage(pos); } virtual bool flush() { if (m_next) return m_next->flush(); return true; } private: TermProc *m_next; }; /** * Helper specialized TextSplit class, feeds the pipeline: * - The takeword() method calls a TermProc->takeword(). * - The text_to_words() method also takes care of flushing. * Both methods can be further specialized by the user (they should then call * the base methods when they've done the local processing). */ class TextSplitP : public TextSplit { public: TextSplitP(TermProc *prc, int flags = TXTS_NONE) : TextSplit(flags), m_prc(prc) {} virtual bool text_to_words(const std::string &in) override { bool ret = TextSplit::text_to_words(in); if (m_prc && !m_prc->flush()) return false; return ret; } virtual bool takeword(const std::string& term, size_t pos, size_t bs, size_t be) override { if (m_prc) return m_prc->takeword(term, pos, bs, be); return true; } virtual void newpage(size_t pos) override { if (m_prc) return m_prc->newpage(pos); } private: TermProc *m_prc; }; /** Unaccent and lowercase term. If the index is not case/diac-sensitive, this is usually the * first step in the pipeline */ class TermProcPrep : public TermProc { public: TermProcPrep(TermProc *nxt) : TermProc(nxt) {} virtual bool takeword(const std::string& itrm, size_t pos, size_t bs, size_t be) override { m_totalterms++; std::string otrm; if (!unacmaybefold(itrm, otrm, UNACOP_UNACFOLD)) { LOGDEB("splitter::takeword: unac [" << itrm << "] failed\n"); m_unacerrors++; // We don't generate a fatal error because of a bad term, but one has to put the limit // somewhere if (m_unacerrors > 500 && (double(m_totalterms) / double(m_unacerrors)) < 2.0) { // More than 1 error for every other term LOGERR("splitter::takeword: too many unac errors " << m_unacerrors << "/" << m_totalterms << "\n"); return false; } return true; } if (otrm.empty()) { // It may happen in some weird cases that the output from unac is empty (if the word // actually consisted entirely of diacritics ...) The consequence is that a phrase // search won't work without additional slack. return true; } // We should have a Japanese stemmer to handle this, but for experimenting, let's do it // here: remove 'prolounged sound mark' and its halfwidth variant from the end of terms. if ((unsigned int)otrm[0] > 127) { Utf8Iter it(otrm); if (TextSplit::isKATAKANA(*it)) { Utf8Iter itprev = it; while (*it != (unsigned int)-1) { itprev = it; it++; } if (*itprev == 0x30fc || *itprev == 0xff70) { otrm = otrm.substr(0, itprev.getBpos()); } } } if (otrm.empty()) { return true; } // It may also occur that unac introduces spaces in the string (when removing isolated // accents, may happen for Greek for example). This is a pathological situation. We index // all the resulting terms at the same pos because the surrounding code is not designed to // handle a pos change in here. This means that phrase searches and snippets will be wrong, // but at least searching for the terms will work. bool hasspace = otrm.find(' ') != std::string::npos; if (hasspace) { std::vector terms; stringToTokens(otrm, terms, " ", true); for (const auto& term : terms) { if (!TermProc::takeword(term, pos, bs, be)) { return false; } } return true; } return TermProc::takeword(otrm, pos, bs, be); } virtual bool flush() override { m_totalterms = m_unacerrors = 0; return TermProc::flush(); } private: int m_totalterms{0}; int m_unacerrors{0}; }; /** Compare to stop words list and discard if match found */ class TermProcStop : public TermProc { public: TermProcStop(TermProc *nxt, const Rcl::StopList& stops) : TermProc(nxt), m_stops(stops) {} virtual bool takeword(const std::string& term, size_t pos, size_t bs, size_t be) override { if (m_stops.isStop(term)) { return true; } return TermProc::takeword(term, pos, bs, be); } private: const Rcl::StopList& m_stops; }; /** Generate multiword terms for multiword synonyms. This allows * NEAR/PHRASE searches for multiword synonyms. See comments for m_syngroups in rcldb.h */ class TermProcMulti : public TermProc { public: TermProcMulti(TermProc *nxt, const SynGroups& sg) : TermProc(nxt), m_groups(sg.getmultiwords()), m_maxl(sg.getmultiwordsmaxlength()) {} virtual bool takeword(const std::string& term, size_t pos, size_t bs, size_t be) override { LOGDEB1("TermProcMulti::takeword[" << term << "] at pos " << pos <<"\n"); if (m_maxl < 2) { // Should not have been pushed?? return TermProc::takeword(term, pos, bs, be); } m_terms.push_back(term); if (m_terms.size() > m_maxl) { m_terms.pop_front(); } std::string comp; int gsz{1}; for (const auto& gterm : m_terms) { if (comp.empty()) { comp = gterm; continue; } else { comp += " "; comp += gterm; gsz++; // We could optimize by not testing m_groups for sizes which do not exist. // if not gsz in sizes continue; } if (m_groups.find(comp) != m_groups.end()) { LOGDEB1("Emitting multiword synonym: [" << comp << "] at pos " << pos-gsz+1 << "\n"); // TBD bs-be correct computation. Need to store the values in a parallel list TermProc::takeword(comp, pos-gsz+1, bs-comp.size(), be); } } return TermProc::takeword(term, pos, bs, be); } private: const std::set& m_groups; size_t m_maxl{0}; std::deque m_terms; }; /** Handle common-gram generation: combine frequent terms with neighbours to * shorten the positions lists for phrase searches. * NOTE: This does not currently work because of bad interaction with the * spans (ie john@domain.com) generation in textsplit. Not used, kept for * testing only */ class TermProcCommongrams : public TermProc { public: TermProcCommongrams(TermProc *nxt, const Rcl::StopList& stops) : TermProc(nxt), m_stops(stops), m_onlygrams(false) {} virtual bool takeword(const std::string& term, size_t pos, size_t bs, size_t be) override { LOGDEB1("TermProcCom::takeword: pos " << pos << " " << bs << " " << be << " [" << term << "]\n"); bool isstop = m_stops.isStop(term); bool twogramemit = false; if (!m_prevterm.empty() && (m_prevstop || isstop)) { // create 2-gram. space unnecessary but improves // the readability of queries std::string twogram; twogram.swap(m_prevterm); twogram.append(1, ' '); twogram += term; // When emitting a complex term we set the bps to 0. This may // be used by our clients if (!TermProc::takeword(twogram, m_prevpos, 0, 0)) return false; twogramemit = true; #if 0 if (m_stops.isStop(twogram)) { firstword = twogram; isstop = false; } #endif } m_prevterm = term; m_prevstop = isstop; m_prevpos = pos; m_prevsent = false; m_prevbs = bs; m_prevbe = be; // If flags allow, emit the bare term at the current pos. if (!m_onlygrams || (!isstop && !twogramemit)) { if (!TermProc::takeword(term, pos, bs, be)) return false; m_prevsent = true; } return true; } virtual bool flush() override { if (!m_prevsent && !m_prevterm.empty()) if (!TermProc::takeword(m_prevterm, m_prevpos, m_prevbs, m_prevbe)) return false; m_prevterm.clear(); m_prevsent = true; return TermProc::flush(); } void onlygrams(bool on) { m_onlygrams = on; } private: // The stoplist we're using const Rcl::StopList& m_stops; // Remembered data for the last processed term std::string m_prevterm; bool m_prevstop; size_t m_prevpos; size_t m_prevbs; size_t m_prevbe; bool m_prevsent; // If this is set, we only emit longest grams bool m_onlygrams; }; } // End namespace Rcl #endif /* _TERMPROC_H_INCLUDED_ */ recoll-1.43.12/rcldb/rclndb.cpp0000644000175000017500000014116115121730573015512 0ustar dockesdockes/* Copyright (C) 2004-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include "safeunistd.h" #include #include #include #include #include #include #include #include using namespace std; #include "xapian.h" #include "rclconfig.h" #include "log.h" #include "rcldb.h" #include "rcldb_p.h" #include "stemdb.h" #include "textsplit.h" #include "transcode.h" #include "unacpp.h" #include "conftree.h" #include "pathut.h" #include "rclutil.h" #include "smallut.h" #include "chrono.h" #include "rclvalues.h" #include "md5ut.h" #include "cancelcheck.h" #include "termproc.h" #include "expansiondbs.h" #include "rclinit.h" #include "wipedir.h" #ifdef RCL_USE_ASPELL #include "rclaspell.h" #endif #include "zlibut.h" #include "idxstatus.h" #include "rcldoc.h" #include "daterange.h" namespace Rcl { // Empty string md5s static const string cstr_md5empty("d41d8cd98f00b204e9800998ecf8427e"); // Characters we strip inside field data static const string cstr_nc("\n\r\x0c\\"); Db::Native::Native(Db *db) : m_rcldb(db) #ifdef IDX_THREADS , m_wqueue("DbUpd", m_rcldb->m_config->getThrConf(RclConfig::ThrDbWrite).first), m_mwqueue("DbMUpd", 2) #endif // IDX_THREADS { LOGDEB1("Native::Native: me " << this << "\n"); } Db::Native::~Native() { LOGDEB1("Native::~Native: me " << this << "\n"); #ifdef IDX_THREADS if (m_havewriteq) { void *status = m_wqueue.setTerminateAndWait(); if (status) { LOGDEB1("Native::~Native: worker status " << status << "\n"); } if (m_tmpdbinitidx > 0) { status = m_mwqueue.setTerminateAndWait(); if (status) { LOGDEB1("Native::~Native: worker status " << status << "\n"); } } } #endif // IDX_THREADS } #ifdef IDX_THREADS // Index update primary (unique) worker thread. If we are using multiple temporary indexes, new // documents (only) will be queued by addOrUpdateWrite() to the temp indexes queue which has one // worker thread per temporary index. void *DbUpdWorker(void* vdbp) { recoll_threadinit(); Db::Native *ndbp = (Db::Native *)vdbp; WorkQueue *tqp = &(ndbp->m_wqueue); DbUpdTask *tsk = nullptr; for (;;) { size_t qsz = -1; if (!tqp->take(&tsk, &qsz)) { tqp->workerExit(); return (void*)1; } bool status = false; switch (tsk->op) { case DbUpdTask::AddOrUpdate: LOGDEB("DbUpdWorker: got add/update task, ql " << qsz << "\n"); status = ndbp->addOrUpdateWrite( tsk->udi, tsk->uniterm, std::move(tsk->doc), tsk->txtlen, tsk->rawztext); break; case DbUpdTask::Delete: LOGDEB("DbUpdWorker: got delete task, ql " << qsz << "\n"); status = ndbp->purgeFileWrite(false, tsk->udi, tsk->uniterm); break; case DbUpdTask::PurgeOrphans: LOGDEB("DbUpdWorker: got orphans purge task, ql " << qsz << "\n"); status = ndbp->purgeFileWrite(true, tsk->udi, tsk->uniterm); break; default: LOGERR("DbUpdWorker: unknown op " << tsk->op << " !!\n"); break; } if (!status) { LOGERR("DbUpdWorker: xxWrite failed\n"); tqp->workerExit(); delete tsk; return (void*)0; } delete tsk; } } // Temporary index update worker thread. If we are configured to use temporary indexes, // addOrUpdateWrite() pushes new documents to our input queue instead of updating the main // index. The workqueue is configured with as many workers as there are temp indexes. Each thread // picks up the first available index when starting up (m_tmpdbinitidx counter), then fetches docs // from the queue and updates its index. void *DbMUpdWorker(void* vdbp) { Db::Native *ndbp = (Db::Native *)vdbp; WorkQueue *tqp = &(ndbp->m_mwqueue); // Starting up. Grab the first available temporary index. int dbidx; { std::lock_guard lock(ndbp->m_initidxmutex); dbidx = ndbp->m_tmpdbinitidx++; if (dbidx >= ndbp->m_tmpdbcnt) { LOGERR("DbMUpdWorker: dbidx >= ndbp->m_tmpdbcnt\n"); abort(); } } Xapian::WritableDatabase& xwdb = ndbp->m_tmpdbs[dbidx]; LOGINF("DbMUpdWorker: thread for index " << dbidx << " started\n"); // Fetch documents from the queue and update my index. DbUpdTask *tsk = nullptr; for (;;) { size_t qsz = -1; if (!tqp->take(&tsk, &qsz)) { LOGDEB0("DbMUpdWorker: eoq, flushing index " << dbidx << "\n"); xwdb.commit(); tqp->workerExit(); return (void*)1; } if (tsk->op != DbUpdTask::AddOrUpdate) { LOGFAT("DbMUpdWorker: op not AddOrUpdate: " << tsk->op << " !!\n"); abort(); } LOGDEB("DbMUpdWorker: got add/update task, ql " << qsz << "\n"); Xapian::docid did = 0; std::string ermsg; bool status = false; XAPTRY(did = xwdb.add_document(*(tsk->doc.get())), xwdb, ermsg); if (!ermsg.empty()) { LOGERR("DbMupdWorker::add_document failed: " << ermsg << "\n"); } else { XAPTRY(xwdb.set_metadata(ndbp->rawtextMetaKey(tsk->uniterm), tsk->rawztext), xwdb, ermsg); if (!ermsg.empty()) { LOGERR("DbMUpdWorker: set_metadata failed: " << ermsg << "\n"); } else { status = true; LOGINFO("Db::add: docid " << did << " added [" << tsk->udi << "]\n"); } } delete tsk; if (!status) { LOGERR("DbMUpdWorker: index update failed\n"); tqp->workerExit(); return (void*)0; } // Flushing is triggered by the doc creation thread. This results into all indexes being // flushed at more or less the same time which is probably not optimal. bool needflush = false; { std::lock_guard lock(ndbp->m_initidxmutex); if (ndbp->m_tmpdbflushflags[dbidx]) { ndbp->m_tmpdbflushflags[dbidx] = 0; needflush = true; } } if (needflush) { LOGDEB("DbMUpdWorker: flushing index " << dbidx << "\n"); xwdb.commit(); } } } void Db::Native::maybeStartThreads() { m_havewriteq = false; const RclConfig *cnf = m_rcldb->m_config; int writeqlen = cnf->getThrConf(RclConfig::ThrDbWrite).first; int writethreads = cnf->getThrConf(RclConfig::ThrDbWrite).second; if (writethreads > 1) { LOGINFO("RclDb: write threads count was forced down to 1\n"); writethreads = 1; } if (writeqlen >= 0 && writethreads > 0) { if (!m_wqueue.start(writethreads, DbUpdWorker, this)) { LOGERR("Db::Db: Worker start failed\n"); return; } m_havewriteq = true; LOGINF("maybeStartThreads: tmpdbcnt is " << m_tmpdbcnt << "\n"); if (m_tmpdbcnt > 0) { m_tmpdbflushflags.resize(m_tmpdbcnt); for (int i = 0; i < m_tmpdbcnt; i++) { m_tmpdbdirs.emplace_back(std::make_unique()); LOGINF("Creating temporary database in " << m_tmpdbdirs.back()->dirname() << "\n"); m_tmpdbs.push_back( Xapian::WritableDatabase( m_tmpdbdirs.back()->dirname(), Xapian::DB_CREATE_OR_OVERWRITE)); m_tmpdbflushflags[i] = 0; } if (!m_mwqueue.start(m_tmpdbcnt, DbMUpdWorker, this)) { LOGERR("Db::Db: MWorker start failed\n"); return; } LOGINF("Started MWQueue with " << m_tmpdbcnt << " threads\n"); } } LOGDEB("RclDb:: threads: haveWriteQ " << m_havewriteq << ", wqlen " << writeqlen << " wqts " << writethreads << "\n"); } #endif // IDX_THREADS void Db::Native::openWrite(const string& dir, Db::OpenMode mode, int flags) { LOGINF("Db::Native::openWrite\n"); int action = (mode == Db::DbUpd) ? Xapian::DB_CREATE_OR_OPEN : Xapian::DB_CREATE_OR_OVERWRITE; #ifdef IDX_THREADS m_tmpdbcnt = 0; if (!(flags & Db::DbOFNoTmpDb)) m_rcldb->m_config->getConfParam("thrTmpDbCnt", &m_tmpdbcnt); #endif #ifdef _WIN32 // On Windows, Xapian is quite bad at erasing a partial db, which can occur because of open file // deletion errors. if (mode == DbTrunc) { if (path_exists(path_cat(dir, "iamglass")) || path_exists(path_cat(dir, "iamchert"))) { wipedir(dir); path_unlink(dir); } } #endif if (path_exists(dir)) { // Existing index. xwdb = Xapian::WritableDatabase(dir, action); if (action == Xapian::DB_CREATE_OR_OVERWRITE || xwdb.get_doccount() == 0) { // New or empty index. Set the "store text" option // according to configuration. The metadata record will be // written further down. m_storetext = o_index_storedoctext; LOGDEB("Db:: index " << (m_storetext?"stores":"does not store") << " document text\n"); } else { // Existing non empty. Get the option from the index. storesDocText(xwdb); } } else { // Use the default index backend and let the user decide of the abstract generation // method. The configured default is to store the text. xwdb = Xapian::WritableDatabase(dir, action); m_storetext = o_index_storedoctext; } // If the index is empty, write the data format version, // and the storetext option value inside the index descriptor (new // with recoll 1.24, maybe we'll have other stuff to store in // there in the future). if (xwdb.get_doccount() == 0) { string desc = string("storetext=") + (m_storetext ? "1" : "0") + "\n"; xwdb.set_metadata(cstr_RCL_IDX_DESCRIPTOR_KEY, desc); xwdb.set_metadata(cstr_RCL_IDX_VERSION_KEY, cstr_RCL_IDX_VERSION); } m_iswritable = true; #ifdef IDX_THREADS maybeStartThreads(); #endif } void Db::Native::storesDocText(Xapian::Database& db) { string desc = db.get_metadata(cstr_RCL_IDX_DESCRIPTOR_KEY); ConfSimple cf(desc, 1); string val; m_storetext = false; if (cf.get("storetext", val) && stringToBool(val)) { m_storetext = true; } LOGDEB("Db:: index " << (m_storetext?"stores":"does not store") << " document text\n"); } void Db::Native::openRead(const string& dir) { m_iswritable = false; xrdb = Xapian::Database(dir); storesDocText(xrdb); } /* See comment in class declaration: return all subdocuments of a * document given by its unique id. */ bool Db::Native::subDocs(const string &udi, int idxi, vector& docids) { LOGDEB2("subDocs: [" << udi << "]\n"); string pterm = make_parentterm(udi); vector candidates; XAPTRY(docids.clear(); candidates.insert(candidates.begin(), xrdb.postlist_begin(pterm), xrdb.postlist_end(pterm)), xrdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGERR("Rcl::Db::subDocs: " << m_rcldb->m_reason << "\n"); return false; } else { for (unsigned int i = 0; i < candidates.size(); i++) { if (whatDbIdx(candidates[i]) == (size_t)idxi) { docids.push_back(candidates[i]); } } LOGDEB0("Db::Native::subDocs: returning " << docids.size() << " ids\n"); return true; } } bool Db::Native::docidToUdi(Xapian::docid xid, std::string& udi) { Xapian::Document xdoc; XAPTRY(xdoc = xrdb.get_document(xid), xrdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGERR("Db::Native:docidToUdi: get_document error: " << m_rcldb->m_reason << "\n"); return false; } return xdocToUdi(xdoc, udi); } bool Db::Native::xdocToUdi(Xapian::Document& xdoc, string &udi) { Xapian::TermIterator xit; XAPTRY(xit = xdoc.termlist_begin(); xit.skip_to(wrap_prefix(udi_prefix)), xrdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGERR("xdocToUdi: xapian error: " << m_rcldb->m_reason << "\n"); return false; } if (xit != xdoc.termlist_end()) { udi = *xit; if (!udi.empty()) { udi = udi.substr(wrap_prefix(udi_prefix).size()); return true; } } return false; } // Clear term from document if its frequency is 0. This should // probably be done by Xapian when the freq goes to 0 when removing a // posting, but we have to do it ourselves bool Db::Native::clearDocTermIfWdf0(Xapian::Document& xdoc, const string& term) { LOGDEB1("Db::clearDocTermIfWdf0: [" << term << "]\n"); // Find the term Xapian::TermIterator xit; XAPTRY(xit = xdoc.termlist_begin(); xit.skip_to(term);, xrdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGERR("Db::clearDocTerm...: [" << term << "] skip failed: " << m_rcldb->m_reason << "\n"); return false; } if (xit == xdoc.termlist_end() || term.compare(*xit)) { LOGDEB0("Db::clearDocTermIFWdf0: term [" << term << "] not found. xit: [" << (xit == xdoc.termlist_end() ? "EOL": *xit) << "]\n"); return false; } // Clear the term if its frequency is 0 if (xit.get_wdf() == 0) { LOGDEB1("Db::clearDocTermIfWdf0: clearing [" << term << "]\n"); XAPTRY(xdoc.remove_term(term), xwdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGDEB0("Db::clearDocTermIfWdf0: failed [" << term << "]: "<m_reason << "\n"); } } return true; } // Holder for term + pos struct DocPosting { DocPosting(string t, Xapian::termpos ps) : term(t), pos(ps) {} string term; Xapian::termpos pos; }; // Clear all terms for given field for given document. // The terms to be cleared are all those with the appropriate // prefix. We also remove the postings for the unprefixed terms (that // is, we undo what we did when indexing). bool Db::Native::clearField(Xapian::Document& xdoc, const string& pfx, Xapian::termcount wdfdec) { LOGDEB1("Db::clearField: clearing prefix [" << pfx << "] for docid " << xdoc.get_docid()<<"\n"); vector eraselist; string wrapd = wrap_prefix(pfx); m_rcldb->m_reason.clear(); for (int tries = 0; tries < 2; tries++) { try { Xapian::TermIterator xit; xit = xdoc.termlist_begin(); xit.skip_to(wrapd); while (xit != xdoc.termlist_end() && !(*xit).compare(0, wrapd.size(), wrapd)) { LOGDEB1("Db::clearfield: erasing for [" << *xit << "]\n"); Xapian::PositionIterator posit; for (posit = xit.positionlist_begin(); posit != xit.positionlist_end(); posit++) { eraselist.push_back(DocPosting(*xit, *posit)); eraselist.push_back(DocPosting(strip_prefix(*xit), *posit)); } xit++; } } catch (const Xapian::DatabaseModifiedError &e) { m_rcldb->m_reason = e.get_msg(); xrdb.reopen(); continue; } XCATCHERROR(m_rcldb->m_reason); break; } if (!m_rcldb->m_reason.empty()) { LOGERR("Db::clearField: failed building erase list: " << m_rcldb->m_reason << "\n"); return false; } // Now remove the found positions, and the terms if the wdf is 0 for (const auto& er : eraselist) { LOGDEB1("Db::clearField: remove posting: [" << er.term << "] pos [" << er.pos << "]\n"); XAPTRY(xdoc.remove_posting(er.term, er.pos, wdfdec);, xwdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { // Not that this normally fails for non-prefixed XXST and // ND, don't make a fuss LOGDEB1("Db::clearFiedl: remove_posting failed for [" << er.term << "]," << er.pos << ": " << m_rcldb->m_reason << "\n"); } clearDocTermIfWdf0(xdoc, er.term); } return true; } // Check if doc given by udi is indexed by term bool Db::Native::hasTerm(const string& udi, int idxi, const string& term) { LOGDEB2("Native::hasTerm: udi [" << udi << "] term [" << term << "]\n"); Xapian::Document xdoc; if (getDoc(udi, idxi, xdoc)) { Xapian::TermIterator xit; XAPTRY(xit = xdoc.termlist_begin(); xit.skip_to(term);, xrdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGERR("Rcl::Native::hasTerm: " << m_rcldb->m_reason << "\n"); return false; } if (xit != xdoc.termlist_end() && !term.compare(*xit)) { return true; } } return false; } // Retrieve Xapian document, given udi. There may be several identical udis // if we are using multiple indexes. If idxi is -1 we don't care (looking for the path). Xapian::docid Db::Native::getDoc(const string& udi, int idxi, Xapian::Document& xdoc) { string uniterm = make_uniterm(udi); for (int tries = 0; tries < 2; tries++) { try { Xapian::PostingIterator docid; for (docid = xrdb.postlist_begin(uniterm); docid != xrdb.postlist_end(uniterm); docid++) { xdoc = xrdb.get_document(*docid); if (idxi == -1 || whatDbIdx(*docid) == (size_t)idxi) return *docid; } // Udi not in Db. return 0; } catch (const Xapian::DatabaseModifiedError &e) { m_rcldb->m_reason = e.get_msg(); xrdb.reopen(); continue; } XCATCHERROR(m_rcldb->m_reason); break; } LOGERR("Db::Native::getDoc: Xapian error: " << m_rcldb->m_reason << "\n"); return 0; } // Turn data record from db into document fields bool Db::Native::dbDataToRclDoc(Xapian::docid docid, Xapian::Document& xdoc, std::string &data, Doc &doc, bool fetchtext) { LOGDEB2("Db::dbDataToRclDoc: data:\n" << data << "\n"); ConfSimple parms(data, 1, false, false); if (!parms.ok()) return false; doc.xdocid = docid; doc.haspages = hasPages(docid); // Compute what index this comes from, and check for path translations string dbdir = m_rcldb->m_basedir; doc.idxi = 0; if (!m_rcldb->m_extraDbs.empty()) { int idxi = int(whatDbIdx(docid)); // idxi is in [0, extraDbs.size()]. 0 is for the main index, // idxi-1 indexes into the additional dbs array. if (idxi) { dbdir = m_rcldb->m_extraDbs[idxi - 1]; doc.idxi = idxi; } } parms.get(Doc::keyurl, doc.idxurl); doc.url = doc.idxurl; m_rcldb->m_config->urlrewrite(dbdir, doc.url); if (!doc.url.compare(doc.idxurl)) doc.idxurl.clear(); // Special cases: parms.get(Doc::keytp, doc.mimetype); parms.get(Doc::keyfmt, doc.fmtime); parms.get(Doc::keydmt, doc.dmtime); parms.get(Doc::keyoc, doc.origcharset); parms.get(cstr_caption, doc.meta[Doc::keytt]); parms.get(Doc::keyabs, doc.meta[Doc::keyabs]); // Possibly remove synthetic abstract indicator (if it's there, we // used to index the beginning of the text as abstract). doc.syntabs = false; if (doc.meta[Doc::keyabs].find(cstr_syntAbs) == 0) { doc.meta[Doc::keyabs] = doc.meta[Doc::keyabs].substr(cstr_syntAbs.length()); doc.syntabs = true; } parms.get(Doc::keyipt, doc.ipath); parms.get(Doc::keypcs, doc.pcbytes); parms.get(Doc::keyfs, doc.fbytes); parms.get(Doc::keyds, doc.dbytes); parms.get(Doc::keysig, doc.sig); // Normal key/value pairs: for (const auto& key : parms.getNames(string())) { if (doc.meta.find(key) == doc.meta.end()) parms.get(key, doc.meta[key]); } doc.meta[Doc::keyurl] = doc.url; doc.meta[Doc::keymt] = doc.dmtime.empty() ? doc.fmtime : doc.dmtime; if (fetchtext) { std::string &udi = doc.meta[Doc::keyudi]; if (udi.empty()) { xdocToUdi(xdoc, udi); } if (!udi.empty()) { getRawText(udi, docid, doc.text); } } return true; } bool Db::Native::hasPages(Xapian::docid docid) { string ermsg; Xapian::PositionIterator pos; XAPTRY(pos = xrdb.positionlist_begin(docid, page_break_term); if (pos != xrdb.positionlist_end(docid, page_break_term)) { return true; }, xrdb, ermsg); if (!ermsg.empty()) { LOGERR("Db::Native::hasPages: xapian error: " << ermsg << "\n"); } return false; } // Return the positions list for the page break term bool Db::Native::getPagePositions(Xapian::docid docid, vector& vpos) { vpos.clear(); // Need to retrieve the document record to check for multiple page breaks // that we store there for lack of better place map mbreaksmap; try { Xapian::Document xdoc = xrdb.get_document(docid); string data = xdoc.get_data(); Doc doc; string mbreaks; if (dbDataToRclDoc(docid, xdoc, data, doc) && doc.getmeta(cstr_mbreaks, &mbreaks)) { vector values; stringToTokens(mbreaks, values, ","); for (unsigned int i = 0; i < values.size() - 1; i += 2) { int pos = atoi(values[i].c_str()) + baseTextPosition; int incr = atoi(values[i+1].c_str()); mbreaksmap[pos] = incr; } } } catch (...) { } string qterm = page_break_term; Xapian::PositionIterator pos; try { for (pos = xrdb.positionlist_begin(docid, qterm); pos != xrdb.positionlist_end(docid, qterm); pos++) { int ipos = *pos; if (ipos < int(baseTextPosition)) { LOGDEB("getPagePositions: got page position " << ipos << " not in body\n"); // Not in text body. Strange... continue; } map::iterator it = mbreaksmap.find(ipos); if (it != mbreaksmap.end()) { LOGDEB1("getPagePositions: found multibreak at " << ipos << " incr " << it->second << "\n"); for (int i = 0 ; i < it->second; i++) vpos.push_back(ipos); } vpos.push_back(ipos); } } catch (...) { // Term does not occur. No problem. } return true; } int Db::Native::getPageNumberForPosition(const vector& pbreaks, int pos) { if (pos < int(baseTextPosition)) // Not in text body return -1; vector::const_iterator it = upper_bound(pbreaks.begin(), pbreaks.end(), pos); return int(it - pbreaks.begin() + 1); } bool Db::Native::getRawText(const std::string& udi, Xapian::docid docid_combined, string& rawtext) { if (!m_storetext) { LOGDEB("Db::Native::getRawText: document text not stored in index\n"); return false; } auto uniterm = make_uniterm(udi); // When using multiple indexes, we need to open the right one (because of the old docid use). size_t dbidx = whatDbIdx(docid_combined); Xapian::docid docid = whatDbDocid(docid_combined); string reason; // We try with the uniterm key now in use, and try to fallback on the docid in case we have an // old index. if (dbidx != 0) { Xapian::Database db(m_rcldb->m_extraDbs[dbidx-1]); XAPTRY(rawtext = db.get_metadata(rawtextMetaKey(uniterm)), db, reason); if (!reason.empty() || rawtext.empty()) { reason.clear(); XAPTRY(rawtext = db.get_metadata(rawtextMetaKey(docid)), db, reason); } } else { XAPTRY(rawtext = xrdb.get_metadata(rawtextMetaKey(uniterm)), xrdb, reason); if (!reason.empty() || rawtext.empty()) { reason.clear(); XAPTRY(rawtext = xrdb.get_metadata(rawtextMetaKey(docid)), xrdb, reason); } } if (!reason.empty()) { LOGERR("Rcl::Db::getRawText: could not get value: " << reason << "\n"); return false; } if (rawtext.empty()) { return true; } ZLibUtBuf cbuf; inflateToBuf(rawtext.c_str(), rawtext.size(), cbuf); rawtext.assign(cbuf.getBuf(), cbuf.getCnt()); return true; } bool Db::Native::fsFull() { // Check file system full every mbyte of indexed text. It's a bit wasteful // to do this after having prepared the document, but it needs to be in // the single-threaded section. if (m_rcldb->m_maxFsOccupPc > 0 && (m_rcldb->m_occFirstCheck || (m_rcldb->m_curtxtsz - m_rcldb->m_occtxtsz) / MB >= 1)) { LOGDEB0("Db::add: checking file system usage\n"); int pc; m_rcldb->m_occFirstCheck = 0; if (fsocc(m_rcldb->m_basedir, &pc) && pc >= m_rcldb->m_maxFsOccupPc) { LOGERR("Db::add: stop indexing: file system " << pc << " %" << " full > max " << m_rcldb->m_maxFsOccupPc << " %" << "\n"); return true; } m_rcldb->m_occtxtsz = m_rcldb->m_curtxtsz; } return false; } // Note: we're passed a Xapian::Document* because Xapian reference-counting is not mt-safe. We take // ownership and need to delete it before returning. bool Db::Native::addOrUpdateWrite( const string& udi, const string& uniterm, std::unique_ptr newdocument_ptr, size_t textlen, std::string& rawztext) { // Does its own locking, call before our own. bool docexists = m_rcldb->docExists(uniterm); PRETEND_USE(docexists); #ifdef IDX_THREADS Chrono chron; std::unique_lock lock(m_mutex); #endif if (fsFull()) { return false; } #ifdef IDX_THREADS if (!docexists && m_tmpdbinitidx > 0) { // New doc and we are using temporary indexes to speed things up, send it to the temp db // queue DbUpdTask *tp = new DbUpdTask( DbUpdTask::AddOrUpdate, udi, uniterm, std::move(newdocument_ptr), textlen, rawztext); if (!m_mwqueue.put(tp)) { LOGERR("Db::addOrUpdate:Cant mqueue task\n"); return false; } auto ret = m_rcldb->maybeflush(textlen); return ret; } #endif string ermsg; // Add db entry or update existing entry: Xapian::docid did = 0; try { did = xwdb.replace_document(uniterm, *(newdocument_ptr.get())); if (did < m_rcldb->updated.size()) { // This is necessary because only the file-level docs are tested by needUpdate(), so the // subdocs existence flags are only set here. m_rcldb->updated[did] = true; LOGINFO("Db::add: docid " << did << " updated [" << udi << "]\n"); } else { LOGINFO("Db::add: docid " << did << " added [" << udi << "]\n"); } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("Db::addOrUpdate: replace_document failed: " << ermsg << "\n"); auto data = newdocument_ptr->get_data(); LOGERR("Db::addOrUpdate: : udi [" << udi << "] txtlen " << textlen << " rawztext size " << rawztext.size() << " data size " << data.size() << " data " << data.substr(0, 2000) << "\n"); return false; } XAPTRY(xwdb.set_metadata(rawtextMetaKey(uniterm), rawztext), xwdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGERR("Db::addOrUpdate: set_metadata error: " << m_rcldb->m_reason << "\n"); auto data = newdocument_ptr->get_data(); LOGERR("Db::addOrUpdate: : udi [" << udi << "] txtlen " << textlen << " rawztext size " << rawztext.size() << " data size " << data.size() << " data " << data.substr(0, 2000) << "\n"); // This only affects snippets, so let's say not fatal } // Test if we're over the flush threshold (limit memory usage): bool ret = m_rcldb->maybeflush(textlen); #ifdef IDX_THREADS m_totalworkns += chron.nanos(); #endif return ret; } // Delete the data for a given document. // This is either called from the dbUpdate queue worker, or directly from the top level purge() if // we are not using threads. bool Db::Native::purgeFileWrite(bool orphansOnly, const string& udi, const string& uniterm) { #if defined(IDX_THREADS) // We need a mutex even if we have a write queue (so we can only // be called by a single thread) to protect about multiple acces // to xrdb from subDocs() which is also called from needupdate() // (called from outside the write thread ! std::unique_lock lock(m_mutex); #endif // IDX_THREADS string ermsg; try { Xapian::PostingIterator docid = xwdb.postlist_begin(uniterm); if (docid == xwdb.postlist_end(uniterm)) { return true; } if (m_rcldb->m_flushMb > 0) { Xapian::termcount trms = xwdb.get_doclength(*docid); m_rcldb->maybeflush(trms * 5); } string sig; if (orphansOnly) { Xapian::Document doc = xwdb.get_document(*docid); sig = doc.get_value(VALUE_SIG); if (sig.empty()) { LOGINFO("purgeFileWrite: got empty sig\n"); return false; } } else { LOGDEB("purgeFile: delete docid " << *docid << "\n"); deleteDocument(*docid); } vector docids; subDocs(udi, 0, docids); LOGDEB("purgeFile: subdocs cnt " << docids.size() << "\n"); for (const auto docid : docids) { if (m_rcldb->m_flushMb > 0) { Xapian::termcount trms = xwdb.get_doclength(docid); m_rcldb->maybeflush(trms * 5); } string subdocsig; if (orphansOnly) { Xapian::Document doc = xwdb.get_document(docid); subdocsig = doc.get_value(VALUE_SIG); if (subdocsig.empty()) { LOGINFO("purgeFileWrite: got empty sig for subdoc??\n"); continue; } } if (!orphansOnly || sig != subdocsig) { LOGDEB("Db::purgeFile: delete subdoc " << docid << "\n"); deleteDocument(docid); } } return true; } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("Db::purgeFileWrite: " << ermsg << "\n"); } return false; } size_t Db::Native::whatDbIdx(Xapian::docid id) { LOGDEB1("Db::whatDbIdx: xdocid " << id << ", " << m_rcldb->m_extraDbs.size() << " extraDbs\n"); if (id == 0) return (size_t)-1; if (m_rcldb->m_extraDbs.size() == 0) return 0; return (id - 1) % (m_rcldb->m_extraDbs.size() + 1); } // Return the docid inside the non-combined index Xapian::docid Db::Native::whatDbDocid(Xapian::docid docid_combined) { if (m_rcldb->m_extraDbs.size() == 0) return docid_combined; return (docid_combined - 1) / (static_cast(m_rcldb->m_extraDbs.size()) + 1) + 1; } static void addDateTerms(Xapian::Document& newdocument, time_t thetime, const string& dayprefix, const string& monprefix, const string& yearprefix) { struct tm tmb; localtime_r(&thetime, &tmb); char buf[50]; // It's actually 9, but use 50 to suppress warnings. snprintf(buf, 50, "%04d%02d%02d", tmb.tm_year+1900, tmb.tm_mon + 1, tmb.tm_mday); // Date (YYYYMMDD) newdocument.add_boolean_term(wrap_prefix(dayprefix) + string(buf)); // Month (YYYYMM) buf[6] = '\0'; newdocument.add_boolean_term(wrap_prefix(monprefix) + string(buf)); // Year (YYYY) buf[4] = '\0'; newdocument.add_boolean_term(wrap_prefix(yearprefix) + string(buf)); } bool Db::Native::docToXdoc( TextSplitDb *splitter, const string& parent_udi, const string& uniterm, Doc& doc, Xapian::Document& newdocument, std::string& rawztext, std::vector >& pageincrvec) { if (m_rcldb->m_idxTextTruncateLen > 0) { doc.text = truncate_to_word(doc.text, m_rcldb->m_idxTextTruncateLen); } // If the ipath is like a path, index the last element. This is for compound documents like // zip and chm for which the filter uses the file path as ipath. if (!doc.ipath.empty() && doc.ipath.find_first_not_of("0123456789") != string::npos) { string utf8ipathlast; // We have no idea of the charset here, so let's hope it's ascii or utf-8. We call // transcode to strip the bad chars and pray if (transcode(path_getsimple(doc.ipath), utf8ipathlast, cstr_utf8, cstr_utf8)) { splitter->text_to_words(utf8ipathlast); } } // Split and index the path from the url for path-based filtering const FieldTraits *ftp{nullptr}; m_rcldb->fieldToTraits(cstr_dir, &ftp); if (ftp && !ftp->pfx.empty()) { string path = url_gpathS(doc.url); #ifdef _WIN32 // Windows file names are case-insensitive, and read as UTF-8 path = unactolower(path); #endif vector vpath; stringToTokens(path, vpath, "/"); // If vpath is not /, the last elt is the file/dir name, not a part of the path. if (vpath.size()) vpath.resize(vpath.size()-1); splitter->curpos = 0; newdocument.add_posting(wrap_prefix(pathelt_prefix), splitter->basepos + splitter->curpos++); for (auto& elt : vpath) { if (elt.length() > 230) { // Just truncate it. May still be useful because of wildcards elt = elt.substr(0, 230); } newdocument.add_posting(wrap_prefix(pathelt_prefix) + elt, splitter->basepos + splitter->curpos++); } splitter->basepos += splitter->curpos + 100; } // Index textual metadata. These are all indexed as text with positions, as we may want to do // phrase searches with them (this makes no sense for keywords by the way). // // The order has no importance, and we set a position gap of 100 between fields to avoid false // proximity matches. for (const auto& [fld, mdata]: doc.meta) { if (mdata.empty()) { continue; } const FieldTraits *ftp{nullptr}; m_rcldb->fieldToTraits(fld, &ftp); if (ftp && ftp->valueslot) { LOGDEB("Adding value: for field " << fld << " slot " << ftp->valueslot << "\n"); add_field_value(newdocument, *ftp, mdata); } // There was an old comment here about not testing for empty prefix, and we indeed did not // test. I don't think that it makes sense any more (and was in disagreement with the LOG // message). Really now: no prefix: no indexing. if (ftp && !ftp->pfx.empty()) { LOGDEB0("Db::add: field [" << fld << "] pfx [" << ftp->pfx << "] inc " << ftp->wdfinc << ": [" << mdata << "]\n"); splitter->setTraits(*ftp); if (!splitter->text_to_words(mdata)) { LOGDEB("Db::addOrUpdate: split failed for " << fld << "\n"); } } else { LOGDEB0("Db::add: no prefix for field [" << fld << "], no indexing\n"); } } // Reset to no prefix and default params splitter->setTraits(FieldTraits()); if (splitter->curpos < baseTextPosition) splitter->basepos = baseTextPosition; // Split and index the body text LOGDEB2("Db::add: split body: [" << doc.text << "]\n"); #ifdef TEXTSPLIT_STATS splitter->resetStats(); #endif if (!splitter->text_to_words(doc.text)) { LOGDEB("Db::addOrUpdate: split failed for main text\n"); } else { if (m_storetext) { if (doc.text.size() / (1024*1024) > (size_t)m_rcldb->m_maxdbdstoredtextmbs) { LOGERR("Db::addOrUpdate: text too big for storing (" << doc.text.size() / (1024*1024) << " MBs). Url " << doc.url << '\n'); } else { ZLibUtBuf buf; deflateToBuf(doc.text.c_str(), doc.text.size(), buf); rawztext.assign(buf.getBuf(), buf.getCnt()); } } } #ifdef TEXTSPLIT_STATS // Reject bad data. unrecognized base64 text is characterized by high avg word length and high // variation (because there are word-splitters like +/ inside the data). TextSplit::Stats::Values v = splitter->getStats(); // v.avglen > 15 && v.sigma > 12 if (v.count > 200 && (v.avglen > 10 && v.sigma / v.avglen > 0.8)) { LOGINFO("RclDb::addOrUpdate: rejecting doc for bad stats count " << v.count << " avglen " << v.avglen << " sigma " << v.sigma << " url [" << doc.url << "] ipath [" << doc.ipath << "] text " << doc.text << "\n"); return true; } #endif ////// Special terms for other metadata. No positions for these. // Mime type. We check the traits in case the user has disabled mimetype indexing by setting // the prefixes entry to empty. Otherwise, can't change the prefix, it's 'T' m_rcldb->fieldToTraits(cstr_mimetype, &ftp); if (ftp && !ftp->pfx.empty()) { newdocument.add_boolean_term(wrap_prefix(mimetype_prefix) + doc.mimetype); } // Simple file name indexed unsplit for specific "file name" searches. This is not the same as a // filename: clause inside the query language. // We also add a term for the filename extension if any. m_rcldb->fieldToTraits(unsplitFilenameFieldName, &ftp); if (ftp && !ftp->pfx.empty()) { string utf8fn; if (doc.getmeta(Doc::keyfn, &utf8fn) && !utf8fn.empty()) { string fn; if (unacmaybefold(utf8fn, fn, UNACOP_UNACFOLD)) { // We should truncate after extracting the extension, but this is a pathological // case anyway if (fn.size() > 230) utf8truncate(fn, 230); string::size_type pos = fn.rfind('.'); if (pos != string::npos && pos != fn.length() - 1) { newdocument.add_boolean_term(wrap_prefix(fileext_prefix) + fn.substr(pos + 1)); } newdocument.add_term(wrap_prefix(unsplitfilename_prefix) + fn, 0); } } } newdocument.add_boolean_term(uniterm); // Parent term. This is used to find all descendents, mostly to delete them when the parent goes // away if (!parent_udi.empty()) { newdocument.add_boolean_term(make_parentterm(parent_udi)); } // Fields used for selecting by date. Note that this only works for years AD 0-9999 (no // crash elsewhere, but things won't work). time_t mtime = atoll(doc.dmtime.empty() ? doc.fmtime.c_str() : doc.dmtime.c_str()); addDateTerms(newdocument, mtime, xapday_prefix, xapmonth_prefix, xapyear_prefix); #ifdef EXT4_BIRTH_TIME // Selecting by birth time. std::string sbirtime; doc.getmeta(Doc::keybrt, &sbirtime); if (!sbirtime.empty()) { mtime = atoll(sbirtime.c_str()); addDateTerms(newdocument, mtime, xapbriday_prefix, xapbrimonth_prefix, xapbriyear_prefix); } #endif string record = rcldocToDbData(doc, newdocument, pageincrvec); newdocument.set_data(record); return true; } std::string Db::Native::rcldocToDbData( Doc& doc, Xapian::Document& newdocument, std::vector >& pageincrvec) { ////////////////////////////////////////////////////////////////// // Document data record. omindex has the following nl separated fields: // - url // - sample // - caption (title limited to 100 chars) // - mime type // // The title, author, abstract and keywords fields are special, // they always get stored in the document data // record. Configurable other fields can be, too. // // We truncate stored fields abstract, title and keywords to // reasonable lengths and suppress newlines (so that the data // record can keep a simple syntax) string record; RECORD_APPEND(record, Doc::keyurl, doc.url); RECORD_APPEND(record, Doc::keytp, doc.mimetype); // We left-zero-pad the times so that they are lexico-sortable leftzeropad(doc.fmtime, 11); RECORD_APPEND(record, Doc::keyfmt, doc.fmtime); #ifdef EXT4_BIRTH_TIME { std::string birtime; doc.getmeta(Doc::keybrt, &birtime); if (!birtime.empty()) { leftzeropad(birtime, 11); RECORD_APPEND(record, Doc::keybrt, birtime); } } #endif if (!doc.dmtime.empty()) { leftzeropad(doc.dmtime, 11); RECORD_APPEND(record, Doc::keydmt, doc.dmtime); } RECORD_APPEND(record, Doc::keyoc, doc.origcharset); if (doc.fbytes.empty()) doc.fbytes = doc.pcbytes; if (!doc.fbytes.empty()) { RECORD_APPEND(record, Doc::keyfs, doc.fbytes); leftzeropad(doc.fbytes, 12); newdocument.add_value(VALUE_SIZE, doc.fbytes); } if (doc.haschildren) { newdocument.add_boolean_term(has_children_term); } if (!doc.pcbytes.empty()) RECORD_APPEND(record, Doc::keypcs, doc.pcbytes); RECORD_APPEND(record, Doc::keyds, std::to_string(doc.text.length())); // Note that we add the signature both as a value and in the data record if (!doc.sig.empty()) { RECORD_APPEND(record, Doc::keysig, doc.sig); newdocument.add_value(VALUE_SIG, doc.sig); } if (!doc.ipath.empty()) RECORD_APPEND(record, Doc::keyipt, doc.ipath); // Fields from the Meta array. Handle title specially because it has a // different name inside the data record (history...) string& ttref = doc.meta[Doc::keytt]; ttref = neutchars(truncate_to_word(ttref, m_rcldb->m_idxMetaStoredLen), cstr_nc); if (!ttref.empty()) { RECORD_APPEND(record, cstr_caption, ttref); ttref.clear(); } // If abstract is empty, we make up one with the beginning of the // document. This is then not indexed, but part of the doc data so // that we can return it to a query without having to decode the // original file. // Note that the map accesses by operator[] create empty entries if they // don't exist yet. if (m_rcldb->m_idxAbsTruncLen > 0) { string& absref = doc.meta[Doc::keyabs]; trimstring(absref, " \t\r\n"); if (absref.empty()) { if (!doc.text.empty()) absref = cstr_syntAbs + neutchars(truncate_to_word(doc.text, m_rcldb->m_idxAbsTruncLen), cstr_nc); } else { absref = neutchars(truncate_to_word(absref, m_rcldb->m_idxAbsTruncLen), cstr_nc); } // Do the append here to avoid the different truncation done // in the regular "stored" loop if (!absref.empty()) { RECORD_APPEND(record, Doc::keyabs, absref); absref.clear(); } } // Append all regular "stored" meta fields for (const auto& rnm : m_rcldb->m_config->getStoredFields()) { string nm = m_rcldb->m_config->fieldCanon(rnm); if (!doc.meta[nm].empty()) { string value = neutchars(truncate_to_word(doc.meta[nm], m_rcldb->m_idxMetaStoredLen), cstr_nc); RECORD_APPEND(record, nm, value); } } // At this point, if the document "filename" field was empty, try to store the "container file // name" value. This is done after indexing because we don't want search matches on this, but // the filename is often useful for display purposes. const string *fnp = nullptr; if (!doc.peekmeta(Rcl::Doc::keyfn, &fnp) || fnp->empty()) { if (doc.peekmeta(Rcl::Doc::keyctfn, &fnp) && !fnp->empty()) { string value = neutchars(truncate_to_word(*fnp, m_rcldb->m_idxMetaStoredLen), cstr_nc); RECORD_APPEND(record, Rcl::Doc::keyfn, value); } } // If empty pages (multiple break at same pos) were recorded, save them (this is because we have // no way to record them in the Xapian list). pageincrvec is a termproc member inside rcldb and // was updated by calling the splitter. if (!pageincrvec.empty()) { ostringstream multibreaks; for (unsigned int i = 0; i < pageincrvec.size(); i++) { if (i != 0) multibreaks << ","; multibreaks << pageincrvec[i].first << "," << pageincrvec[i].second; } RECORD_APPEND(record, string(cstr_mbreaks), multibreaks.str()); } // If the file's md5 was computed, add value and term. The value is optionally used for query // result duplicate elimination, and the term to find the duplicates (XM is the prefix for // rclmd5 in fields) We don't do this for empty docs. const string *md5; if (doc.peekmeta(Doc::keymd5, &md5) && !md5->empty() && md5->compare(cstr_md5empty)) { string digest; MD5HexScan(*md5, digest); newdocument.add_value(VALUE_MD5, digest); newdocument.add_boolean_term(wrap_prefix("XM") + *md5); } if (record.size() / 1024 > (size_t)m_rcldb->m_maxdbdatarecordkbs) { LOGERR("Db::add: truncating data record at max size " << m_rcldb->m_maxdbdatarecordkbs << " KBs. start of data: [" << record.substr(0, 10000) << "]\n"); record.erase(m_rcldb->m_maxdbdatarecordkbs*1024); } LOGDEB0("Rcl::Db::add: new doc record:\n" << record << "\n"); return record; } bool Db::Native::docToXdocMetaOnly(TextSplitDb *splitter, const string &udi, Doc &doc, Xapian::Document& xdoc) { LOGDEB0("Db::docToXdocMetaOnly\n"); #ifdef IDX_THREADS std::unique_lock lock(m_mutex); #endif // Read existing document and its data record if (getDoc(udi, 0, xdoc) == 0) { LOGERR("docToXdocMetaOnly: existing doc not found\n"); return false; } string data; XAPTRY(data = xdoc.get_data(), xrdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGERR("Db::xattrOnly: got error: " << m_rcldb->m_reason << "\n"); return false; } // Clear the term lists for the incoming fields and index the new values map::iterator meta_it; for (const auto& [key, data] : doc.meta) { const FieldTraits *ftp; if (!m_rcldb->fieldToTraits(key, &ftp) || ftp->pfx.empty()) { LOGDEB0("Db::xattrOnly: no prefix for field [" << key << "], skipped\n"); continue; } // Clear the previous terms for the field clearField(xdoc, ftp->pfx, ftp->wdfinc); LOGDEB0("Db::xattrOnly: field [" << key << "] pfx [" << ftp->pfx << "] inc " << ftp->wdfinc << ": [" << data << "]\n"); splitter->setTraits(*ftp); if (!splitter->text_to_words(data)) { LOGDEB("Db::xattrOnly: split failed for " << key << "\n"); } } xdoc.add_value(VALUE_SIG, doc.sig); // Parse current data record into a dict for ease of processing ConfSimple datadic(data); if (!datadic.ok()) { LOGERR("db::docToXdocMetaOnly: failed turning data rec to dict\n"); return false; } // For each "stored" field, check if set in doc metadata and // update the value if it is for (const auto& rnm : m_rcldb->m_config->getStoredFields()) { string nm = m_rcldb->m_config->fieldCanon(rnm); if (doc.getmeta(nm, nullptr)) { string value = neutchars( truncate_to_word(doc.meta[nm], m_rcldb->m_idxMetaStoredLen), cstr_nc); datadic.set(nm, value, ""); } } // Recreate the record. We want to do this with the local RECORD_APPEND // method for consistency in format, instead of using ConfSimple print data.clear(); for (const auto& nm : datadic.getNames("")) { string value; datadic.get(nm, value, ""); RECORD_APPEND(data, nm, value); } RECORD_APPEND(data, Doc::keysig, doc.sig); if (data.size() / 1024 > (size_t)m_rcldb->m_maxdbdatarecordkbs) { LOGERR("Db::add (metaonly): truncating data record at max size " << m_rcldb->m_maxdbdatarecordkbs << " KBs. start of data: [" << data.substr(0, 10000) << "]\n"); data.erase(m_rcldb->m_maxdbdatarecordkbs*1024); } xdoc.set_data(data); return true; } } // End namespace Rcl recoll-1.43.12/rcldb/rclvalues.cpp0000644000175000017500000000505215121730573016244 0ustar dockesdockes/* Copyright (C) 2004-2018 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include "xapian.h" #include "rclconfig.h" #include "smallut.h" #include "log.h" #include "unacpp.h" using namespace std; namespace Rcl { void add_field_value(Xapian::Document& xdoc, const FieldTraits& ft, const string& data) { string ndata; switch (ft.valuetype) { case FieldTraits::STR: if (o_index_stripchars) { if (!unacmaybefold(data, ndata, UNACOP_UNACFOLD)) { LOGDEB("Rcl::add_field_value: unac failed for ["< #include #include #include #include #include "rclquery.h" #include "smallut.h" class Chrono; namespace Rcl { class Query::Native { public: // The query I belong to Query *m_q{nullptr}; // query descriptor: terms and subqueries joined by operators // (or/and etc...) Xapian::Query xquery; // Open query descriptor. Xapian::Enquire *xenquire{nullptr}; // Partial result set Xapian::MSet xmset; // Term frequencies for current query. See makeAbstract, setQuery std::map termfreqs; Xapian::MatchDecider *subdecider{nullptr}; Native(Query *q) : m_q(q), xenquire(nullptr) {} ~Native() { clear(); } Native(const Native &) = delete; Native& operator=(const Native &) = delete; void clear() { deleteZ(xenquire); deleteZ(subdecider); termfreqs.clear(); } /** Return a list of terms which matched for a specific result document */ bool getMatchTerms(unsigned long xdocid, std::vector& terms); int makeAbstract(Xapian::docid id, std::vector&, int maxoccs, int ctxwords, bool sortbypage); int getFirstMatchPage(Xapian::docid docid, std::string& term); void setDbWideQTermsFreqs(); double qualityTerms(Xapian::docid docid, const std::vector& terms, std::multimap >& byQ); void abstractPopulateQTerm( Xapian::Database& xrdb, Xapian::docid docid, const std::string& qterm, int qtrmwrdcnt, int ctxwords, unsigned int maxgrpoccs, unsigned int maxtotaloccs, std::map& sparseDoc, std::unordered_set& searchTermPositions, unsigned int& maxpos, unsigned int& totaloccs, unsigned int& grpoccs, int& ret ); void abstractPopulateContextTerms( Xapian::Database& xrdb, Xapian::docid docid, unsigned int maxpos, std::map& sparseDoc, int& ret ); void abstractCreateSnippetsVector( Db::Native *ndb, std::map& sparseDoc, std::unordered_set& searchTermPositions, std::vector& vpbreaks, std::vector& vabs); int abstractFromIndex( Rcl::Db::Native *ndb, Xapian::docid docid, const std::vector& matchTerms, const std::multimap> byQ, double totalweight, int ctxwords, unsigned int maxtotaloccs, std::vector& vabs, Chrono& chron ); int abstractFromText( Rcl::Db::Native *ndb, Xapian::docid docid, const std::vector& matchTerms, const std::multimap> byQ, double totalweight, int ctxwords, unsigned int maxtotaloccs, std::vector& vabs, Chrono& chron, bool sortbypage ); }; } #endif /* _rclquery_p_h_included_ */ recoll-1.43.12/rcldb/rclterms.cpp0000644000175000017500000010131715121730573016100 0ustar dockesdockes/* Copyright (C) 2004-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ //////////////////////////////////////////////////////////////////// /** Things dealing with walking the terms lists and expansion dbs */ #include "autoconfig.h" #include #include #include "log.h" #include "rcldb.h" #include "rcldb_p.h" #include "stemdb.h" #include "expansiondbs.h" #include "strmatcher.h" #include "pathut.h" #include "rcldoc.h" #include "syngroups.h" #include "fileudi.h" #ifdef RCL_USE_ASPELL #include "rclaspell.h" #endif using namespace std; #define LOGTERM LOGDEB1 namespace Rcl { // File name wild card expansion. This is a specialisation ot termMatch bool Db::filenameWildExp(const string& fnexp, vector& names, int max) { string pattern = fnexp; names.clear(); // If pattern is not capitalized, not quoted (quoted pattern can't // get here currently anyway), and has no wildcards, we add * at // each end: match any substring if (pattern[0] == '"' && pattern[pattern.size()-1] == '"') { pattern = pattern.substr(1, pattern.size() -2); } else if (pattern.find_first_of(cstr_minwilds) == string::npos && !unaciscapital(pattern)) { pattern = "*" + pattern + "*"; } // else let it be LOGDEB("Rcl::Db::filenameWildExp: pattern: [" << pattern << "]\n"); // We inconditionnally lowercase and strip the pattern, as is done // during indexing. This seems to be the only sane possible // approach with file names and wild cards. termMatch does // stripping conditionally on indexstripchars. string pat1; if (unacmaybefold(pattern, pat1, UNACOP_UNACFOLD)) { pattern.swap(pat1); } TermMatchResult result; if (!idxTermMatch(ET_WILD, pattern, result, max, unsplitFilenameFieldName)) return false; for (const auto& entry : result.entries) { names.push_back(entry.term); } if (names.empty()) { // Build an impossible query: we know its impossible because we // control the prefixes! names.push_back(wrap_prefix("XNONE") + "NoMatchingTerms"); } return true; } // Walk the Y terms and return min/max bool Db::maxYearSpan(int *minyear, int *maxyear) { LOGDEB("Rcl::Db:maxYearSpan\n"); *minyear = 1000000; *maxyear = -1000000; TermMatchResult result; if (!idxTermMatch(ET_WILD, "*", result, -1, "xapyear")) { LOGINFO("Rcl::Db:maxYearSpan: termMatch failed\n"); return false; } for (const auto& entry : result.entries) { if (!entry.term.empty()) { int year = atoi(strip_prefix(entry.term).c_str()); if (year < *minyear) *minyear = year; if (year > *maxyear) *maxyear = year; } } return true; } bool Db::getAllDbMimeTypes(std::vector& exp) { Rcl::TermMatchResult res; if (!idxTermMatch(ET_WILD, "*", res, -1, "mtype")) { return false; } for (const auto& entry : res.entries) { // Eliminate some garbage types. Happens; auto tp = Rcl::strip_prefix(entry.term); if (tp.find('/') == std::string::npos) continue; exp.push_back(tp); } return true; } class TermMatchCmpByWcf { public: int operator()(const TermMatchEntry& l, const TermMatchEntry& r) { return r.wcf - l.wcf < 0; } }; class TermMatchCmpByTerm { public: int operator()(const TermMatchEntry& l, const TermMatchEntry& r) { return l.term.compare(r.term) > 0; } }; class TermMatchTermEqual { public: int operator()(const TermMatchEntry& l, const TermMatchEntry& r) { return !l.term.compare(r.term); } }; static const char *tmtptostr(int typ) { switch (typ) { case Db::ET_WILD: return "wildcard"; case Db::ET_REGEXP: return "regexp"; case Db::ET_STEM: return "stem"; case Db::ET_NONE: default: return "none"; } } // Find all index terms that match an input along different expansion modes: // wildcard, regular expression, or stemming. Depending on flags we perform // case and/or diacritics expansion (this can be the only thing requested). // If the "field" parameter is set, we return a list of appropriately // prefixed terms (which are going to be used to build a Xapian // query). // This routine performs case/diacritics/stemming expansion against // the auxiliary tables, and possibly calls idxTermMatch() for work // using the main index terms (filtering, retrieving stats, expansion // in some cases). bool Db::termMatch(int typ_sens, const string &lang, const string &_term, TermMatchResult& res, int max, const string& field, vector* multiwords) { int matchtyp = matchTypeTp(typ_sens); if (!m_ndb || !m_ndb->m_isopen) return false; Xapian::Database xrdb = m_ndb->xrdb; bool diac_sensitive = (typ_sens & ET_DIACSENS) != 0; bool case_sensitive = (typ_sens & ET_CASESENS) != 0; // Path elements (used for dir: filtering) are special because // they are not unaccented or lowercased even if the index is // otherwise stripped. bool pathelt = (typ_sens & ET_PATHELT) != 0; LOGDEB0("Db::TermMatch: typ " << tmtptostr(matchtyp) << " diacsens " << diac_sensitive << " casesens " << case_sensitive << " pathelt " << pathelt << " lang [" << lang << "] term [" << _term << "] max " << max << " field [" << field << "] stripped " << o_index_stripchars << " init res.size " << res.entries.size() << "\n"); // If the index is stripped, no case or diac expansion can be needed: // for the processing inside this routine, everything looks like // we're all-sensitive: no use of expansion db. // Also, convert input to lowercase and strip its accents. string term = _term; if (o_index_stripchars) { diac_sensitive = case_sensitive = true; if (!pathelt && !unacmaybefold(_term, term, UNACOP_UNACFOLD)) { LOGERR("Db::termMatch: unac failed for [" << _term << "]\n"); return false; } } // The case/diac expansion db SynTermTransUnac unacfoldtrans(UNACOP_UNACFOLD); XapComputableSynFamMember synac(xrdb, synFamDiCa, "all", &unacfoldtrans); if (matchtyp == ET_WILD || matchtyp == ET_REGEXP) { std::unique_ptr matcher; if (matchtyp == ET_REGEXP) { matcher = std::make_unique(term); } else { matcher = std::make_unique(term); } if (!diac_sensitive || !case_sensitive) { // Perform case/diac expansion on the exp as appropriate and // expand the result. vector exp; if (diac_sensitive) { // Expand for diacritics and case, filtering for same diacritics SynTermTransUnac foldtrans(UNACOP_FOLD); synac.synKeyExpand(matcher.get(), exp, &foldtrans); } else if (case_sensitive) { // Expand for diacritics and case, filtering for same case SynTermTransUnac unactrans(UNACOP_UNAC); synac.synKeyExpand(matcher.get(), exp, &unactrans); } else { // Expand for diacritics and case, no filtering synac.synKeyExpand(matcher.get(), exp); } // Retrieve additional info and filter against the index itself for (const auto& term : exp) { idxTermMatch(ET_NONE, term, res, max, field); } // And also expand the original expression against the // main index: for the common case where the expression // had no case/diac expansion (no entry in the exp db if // the original term is lowercase and without accents). idxTermMatch(typ_sens, term, res, max, field); } else { idxTermMatch(typ_sens, term, res, max, field); } } else { // match_typ is either ET_STEM or ET_NONE (which may still need synonyms and case/diac exp) vector lexp; if (diac_sensitive && case_sensitive) { // No case/diac expansion lexp.push_back(term); } else if (diac_sensitive) { // Expand for accents and case, filtering for same accents, SynTermTransUnac foldtrans(UNACOP_FOLD); synac.synExpand(term, lexp, &foldtrans); } else if (case_sensitive) { // Expand for accents and case, filtering for same case SynTermTransUnac unactrans(UNACOP_UNAC); synac.synExpand(term, lexp, &unactrans); } else { // We are neither accent- nor case- sensitive and may need stem // expansion or not. Expand for accents and case synac.synExpand(term, lexp); } if (matchtyp == ET_STEM || (typ_sens & ET_SYNEXP)) { // Note: if any of the above conds is true, we are insensitive to // diacs and case (enforced in searchdatatox:termexpand // Need stem expansion. Lowercase the result of accent and case // expansion for input to stemdb. for (auto& term : lexp) { string lower; unacmaybefold(term, lower, UNACOP_FOLD); term.swap(lower); } sort(lexp.begin(), lexp.end()); lexp.erase(unique(lexp.begin(), lexp.end()), lexp.end()); if (matchtyp == ET_STEM) { vector exp1; if (m_usingSpellFuzz) { // Apply spell expansion to the input term spellExpand(term, field, exp1); // Remember the generated terms. This is for informing the user. res.fromspelling.insert(res.fromspelling.end(), exp1.begin(), exp1.end()); lexp.insert(lexp.end(), exp1.begin(), exp1.end()); sort(lexp.begin(), lexp.end()); lexp.erase(unique(lexp.begin(), lexp.end()), lexp.end()); exp1.clear(); } StemDb sdb(xrdb); for (const auto& term : lexp) { sdb.stemExpand(lang, term, exp1); } exp1.swap(lexp); sort(lexp.begin(), lexp.end()); lexp.erase(unique(lexp.begin(), lexp.end()), lexp.end()); LOGDEB("Db::TermMatch: stemexp: " << stringsToString(lexp) << "\n"); } if (m_syngroups->ok() && (typ_sens & ET_SYNEXP)) { LOGDEB("Db::TermMatch: got syngroups\n"); vector exp1(lexp); for (const auto& term : lexp) { vector sg = m_syngroups->getgroup(term); if (!sg.empty()) { LOGDEB("Db::TermMatch: syngroups out: " << term << " -> " << stringsToString(sg) << "\n"); for (const auto& synonym : sg) { if (synonym.find(' ') != string::npos) { if (multiwords) { multiwords->push_back(synonym); } } else { exp1.push_back(synonym); } } } } lexp.swap(exp1); sort(lexp.begin(), lexp.end()); lexp.erase(unique(lexp.begin(), lexp.end()), lexp.end()); } // Expand the resulting list for case and diacritics (all // stemdb content is case-folded) vector exp1; for (const auto& term: lexp) { synac.synExpand(term, exp1); } exp1.swap(lexp); sort(lexp.begin(), lexp.end()); lexp.erase(unique(lexp.begin(), lexp.end()), lexp.end()); } // Filter the result against the index and get the stats, possibly add prefixes. LOGDEB0("Db::TermMatch: final lexp before idx filter: " << stringsToString(lexp) << "\n"); for (const auto& term : lexp) { idxTermMatch(Rcl::Db::ET_NONE, term, res, max, field); } } TermMatchCmpByTerm tcmp; sort(res.entries.begin(), res.entries.end(), tcmp); TermMatchTermEqual teq; vector::iterator uit = unique(res.entries.begin(), res.entries.end(), teq); res.entries.resize(uit - res.entries.begin()); TermMatchCmpByWcf wcmp; sort(res.entries.begin(), res.entries.end(), wcmp); if (max > 0) { // Would need a small max and big stem expansion... res.entries.resize(MIN(res.entries.size(), (unsigned int)max)); } return true; } void Db::spellExpand( const std::string& term, const std::string& /*field*/, std::vector& neighbours) { TermMatchResult matchResult; idxTermMatch(Rcl::Db::ET_NONE, term, matchResult, 1); if (!matchResult.entries.empty()) { // Term exists. If it is very rare, try to expand query. auto totlen = m_ndb->xrdb.get_total_length(); auto wcf = matchResult.entries[0].wcf; if (wcf == 0) // ?? wcf += 1; auto rarity = int(totlen / wcf); LOGDEB1("Db::spellExpand: rarity for [" << term << "] " << rarity << "\n"); if (rarity < m_autoSpellRarityThreshold) { LOGDEB0("Db::spellExpand: [" << term << "] is not rare: " << rarity << "\n"); return; } vector suggs; TermMatchResult locres1; if (getSpellingSuggestions(term, suggs) && !suggs.empty()) { LOGDEB0("Db::spellExpand: spelling suggestions for [" << term << "] : [" << stringsToString(suggs) << "]\n"); // Only use spelling suggestions up to the chosen maximum distance for (int i = 0; i < int(suggs.size()) && i < 300;i++) { auto d = u8DLDistance(suggs[i], term); LOGDEB0("Db::spellExpand: spell: " << term << " -> " << suggs[i] << " distance " << d << " (max " << m_maxSpellDistance << ")\n"); if (d <= m_maxSpellDistance) { idxTermMatch(Rcl::Db::ET_NONE, suggs[i], locres1, 1); } } // Only use spelling suggestions which are more frequent than the term by a set ratio if (!locres1.entries.empty()) { TermMatchCmpByWcf wcmp; sort(locres1.entries.begin(), locres1.entries.end(), wcmp); for (int i = 0; i < int(locres1.entries.size()); i++) { double freqratio = locres1.entries[i].wcf / wcf; LOGDEB0("Db::spellExpand: freqratio for [" << locres1.entries[i].term << "] : " << freqratio <<"\n"); if (locres1.entries[i].wcf > m_autoSpellSelectionThreshold * wcf) { LOGDEB0("Db::spellExpand: [" << locres1.entries[i].term << "] selected (frequent enough)\n"); neighbours.push_back(locres1.entries[i].term); } else { LOGDEB0("Db::spellExpand: [" << locres1.entries[i].term << "] rejected (not frequent enough)\n"); break; } } } } else { LOGDEB("Db::spellExpand: no spelling suggestions for [" << term << "]\n"); } } else { // If the expansion list is empty, the term is not in the index. Maybe try to use aspell // for a close one ? vector suggs; if (getSpellingSuggestions(term, suggs) && !suggs.empty()) { LOGDEB0("Db::spellExpand: spelling suggestions for [" << term << "] : [" << stringsToString(suggs) << "]\n"); for (int i = 0; i < int(suggs.size()) && i < 300;i++) { auto d = u8DLDistance(suggs[i], term); LOGDEB0("Db::spellExpand: spell: " << term << " -> " << suggs[i] << " distance " << d << " (max " << m_maxSpellDistance << ")\n"); if (d <= m_maxSpellDistance) { neighbours.push_back(suggs[i]); } } } else { LOGDEB0("Db::spellExpand: no spelling suggestions for [" << term << "]\n"); } } } bool Db::Native::idxTermMatch_p(int typ, const string& expr, const std::string& prefix, std::function client) { LOGTERM("idxTermMatch_p: input expr: [" << expr << "] prefix [" << prefix << "]\n"); Xapian::Database xdb = xrdb; std::unique_ptr matcher; if (typ == ET_REGEXP) { matcher = std::make_unique(expr); if (!matcher->ok()) { LOGERR("termMatch: regcomp failed: " << matcher->getreason()); return false; } } else if (typ == ET_WILD) { matcher = std::make_unique(expr); } // Initial section: the part of the prefix+expr before the // first wildcard character. We only scan the part of the // index where this matches string is; if (matcher) { string::size_type es = matcher->baseprefixlen(); is = prefix + expr.substr(0, es); } else { is = prefix + expr; } LOGTERM("idxTermMatch_p: initial section: [" << is << "]\n"); XAPTRY( Xapian::TermIterator it = xdb.allterms_begin(is); for (; it != xdb.allterms_end(); it++) { const string ixterm{*it}; LOGDEB1("idxTermMatch_p: term at skip [" << ixterm << "]\n"); // If we're beyond the terms matching the initial section, end. if (!is.empty() && ixterm.find(is) != 0) { LOGTERM("idxTermMatch_p: initial section mismatch: stop\n"); break; } // Else try to match the term. The matcher content is prefix-less. string term; if (!prefix.empty()) { term = ixterm.substr(prefix.length()); } else { if (has_prefix(ixterm)) { // This is possible with a left-side wildcard which would have an empty // initial section so that we're scanning the whole term list. LOGTERM("Skipping prefixed term [" << ixterm << "]\n"); continue; } term = ixterm; } // If matching an expanding expression, a mismatch does not stop us. Else we want // equality if (matcher) { if (!matcher->match(term)) { LOGTERM("No match for <" << term << "> exp <" << matcher->exp() << ">\n"); continue; } } else if (term != expr) { break; } LOGTERM("match for [" << ixterm << "]\n"); if (!client(ixterm, xdb.get_collection_freq(ixterm), it.get_termfreq()) || !matcher) { // If the client tells us or this is an exact search, stop. break; } }, xdb, m_rcldb->m_reason); if (!m_rcldb->m_reason.empty()) { LOGERR("termMatch: " << m_rcldb->m_reason << "\n"); return false; } return true; } // Second phase of wildcard/regexp term expansion after case/diac // expansion: expand against main index terms bool Db::idxTermMatch(int typ_sens, const string &expr, TermMatchResult& res, int max, const string& field) { int typ = matchTypeTp(typ_sens); LOGDEB1("Db::idxTermMatch: typ " << tmtptostr(typ) << "] expr [" << expr << "] max " << max << " field [" << field << "] init res.size " << res.entries.size() << "\n"); if (typ == ET_STEM) { LOGFATAL("RCLDB: internal error: idxTermMatch called with ET_STEM\n"); abort(); } string prefix; if (!field.empty()) { const FieldTraits *ftp = nullptr; if (!fieldToTraits(field, &ftp, true) || ftp->pfx.empty()) { LOGDEB("Db::termMatch: field is not indexed (no prefix): [" << field << "]\n"); } else { prefix = wrap_prefix(ftp->pfx); } } res.prefix = prefix; int rcnt = 0; bool dostrip = res.m_prefix_stripped; bool ret = m_ndb->idxTermMatch_p( typ, expr, prefix, [&res, &rcnt, max, dostrip](const string& term, Xapian::termcount cf, Xapian::doccount tf) { res.entries.push_back(TermMatchEntry((dostrip?strip_prefix(term):term), cf, tf)); // The problem with truncating here is that this is done alphabetically and we may not // keep the most frequent terms. OTOH, not doing it may stall the program if we are // walking the whole term list. We compromise by cutting at 2*max if (max > 0 && ++rcnt >= 2*max) return false; return true; }); return ret; } // Compute list of directories in index at given depth under the common root (which we also compute) // This is used for the GUI directory side filter tree. // // This is more complicated than it seems because there could be extra_dbs so we can't use topdirs // (which we did with an fstreewalk() initially), and also inode/directory might be excluded from // the index (for example by an onlymimetypes parameter). // // We look at all the paths, compute a common prefix, and truncate at the given depth under the // prefix and insert into an std::unordered_set for deduplication. // // unordered_set was the (slightly) fastest of "insert all then sort and truncate", std::set, // std::unordered_set. Other approaches may exist, for example, by skipping same prefix in the list // (which is sorted). Did not try, as the current approach is reasonably fast. // // This is admittedly horrible, and might be too slow on very big indexes. Especially if there are // long path name elements such that we reach the max term length and the terms are truncated-hashed // so that we need to look at the doc data for the full URLs. // // Still I have no other idea of how to do this, other than disable the side filter if directories // are not indexed? // // We could use less memory by not computing a full list and walking the index twice instead (we // need two passes in any case because of the common root computation). // // Count slashes between st and nd static int countslashes(const std::string& in, std::string::size_type st, std::string::size_type nd) { int ns = 0; for (auto i = st; i < nd; i++) { if (in[i] == '/') ns++; } return ns; } bool Db::dirlist(int depth, std::string& root, std::vector& dirs) { // Build a full list of filesystem paths. Xapian::Database xdb = m_ndb->xrdb; auto prefix = wrap_prefix("Q"); std::vector listall; std::string commonroot; std::string::size_type hashedudisize = fileUdi::hashed_udi_size(); std::string::size_type prehashsize = fileUdi::hashed_udi_path_size(); for (int tries = 0; tries < 2; tries++) { try { Xapian::TermIterator it = xdb.allterms_begin(); it.skip_to(prefix.c_str()); for (; it != xdb.allterms_end(); it++) { string ixterm{*it}; // If we're beyond the Q terms end if (ixterm.find(prefix) != 0) break; ixterm = strip_prefix(ixterm); // Skip non-paths like Web entries etc. if (!path_isabsolute(ixterm)) continue; // Skip subdocs auto pos = ixterm.rfind('|'); if (pos < ixterm.size() - 1) continue; // Have to check for a hashed UDI. We may need to fetch the data record for the full // URL then. We do this only if the part stored in the term is not enough given the // current value of the common root and of the depth. bool needcallcommonroot = true; if (ixterm.size() == hashedudisize) { // If the current prefix is shorter than the intact part, no need for the full // path. Then directly compute the common root. bool rootneedsurl = commonroot.size() >= prehashsize || commonroot.size() == 0; if (!rootneedsurl) { commonroot = commonprefix(commonroot, ixterm, true); needcallcommonroot = false; } // We may need the full url for the dir tree if the visible part depth is too // short. bool treeneedsurl = countslashes(ixterm, commonroot.size(), prehashsize) <= depth; if (rootneedsurl || treeneedsurl) { Rcl::Doc doc; if (!getDoc(ixterm, -1, doc, false) || doc.pc == -1) { continue; } ixterm = fileurltolocalpath(doc.url); } } if (!ixterm.empty() && ixterm.back() == '|') ixterm.pop_back(); if (needcallcommonroot) commonroot = commonprefix(commonroot, ixterm, true); listall.push_back(ixterm); } break; } catch (const Xapian::DatabaseModifiedError &e) { m_reason = e.get_msg(); xdb.reopen(); continue; } XCATCHERROR(m_reason); break; } if (!m_reason.empty()) { LOGERR("Db::dirlist: exception while accessing index: " << m_reason << "\n"); return false; } // We call commonprefix with aspaths==true, which means that it will use /home/ as a prefix even // if a shorter /home exists in the list. commonprefix could still be /home/bin/abc if all file // paths in /home/bin begin with abc and /home/bin/ is not in the index. In almost all cases, we // can use getfather and get the actual overall prefix directory, the only exception I can think // of being a single empty directory being indexed (the final root would be its parent) root = commonprefix(listall, true); if (!root.empty() && root.back() != '/') root = path_getfather(root); // Keep all paths with at most depth / characters after the root std::unordered_set unics; for (auto& entry : listall) { if (entry.size() < root.size()) { //possible because it could be /home/dockes with root /home/dockes/ continue; } string::size_type pos = root.size(); for (int i = 0; i < depth; i++) { auto npos = entry.find("/", pos+1); if (npos == std::string::npos) { break; } pos = npos; } entry.erase(pos); unics.insert(entry); } dirs.clear(); dirs.insert(dirs.begin(), unics.begin(), unics.end()); sort(dirs.begin(), dirs.end()); return true; } /** Term list walking. */ class TermIter { public: Xapian::TermIterator it; Xapian::Database db; }; TermIter *Db::termWalkOpen() { if (!m_ndb || !m_ndb->m_isopen) return nullptr; TermIter *tit = new TermIter; if (tit) { tit->db = m_ndb->xrdb; XAPTRY(tit->it = tit->db.allterms_begin(), tit->db, m_reason); if (!m_reason.empty()) { LOGERR("Db::termWalkOpen: xapian error: " << m_reason << "\n"); return nullptr; } } return tit; } bool Db::termWalkNext(TermIter *tit, string &term) { XAPTRY( if (tit && tit->it != tit->db.allterms_end()) { term = *(tit->it)++; return true; } , tit->db, m_reason); if (!m_reason.empty()) { LOGERR("Db::termWalkOpen: xapian error: " << m_reason << "\n"); } return false; } void Db::termWalkClose(TermIter *tit) { try { delete tit; } catch (...) {} } bool Db::termExists(const string& word) { if (!m_ndb || !m_ndb->m_isopen) return 0; XAPTRY(if (!m_ndb->xrdb.term_exists(word)) return false, m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::termWalkOpen: xapian error: " << m_reason << "\n"); return false; } return true; } bool Db::stemDiffers(const string& lang, const string& word, const string& base) { Xapian::Stem stemmer(lang); if (!stemmer(word).compare(stemmer(base))) { LOGDEB2("Rcl::Db::stemDiffers: same for " << word << " and " << base << "\n"); return false; } return true; } bool Db::isSpellingCandidate(const std::string& term, bool with_aspell) { if (term.empty() || term.length() > 50 || has_prefix(term)) return false; Utf8Iter u8i(term); if (with_aspell) { // If spelling with aspell, CJK and other scripts we process with ngrams are not // candidates. Same test as for stemming. if (TextSplit::noStemming(*u8i)) return false; } else { #ifdef TESTING_XAPIAN_SPELL // The Xapian speller (purely proximity-based) can be used for Katakana (when split as words // which is not always completely feasible because of separator-less compounds). Currently // we don't try to use the Xapian speller with other scripts with which it would be usable // in the absence of aspell (it would indeed be better than nothing with e.g. european // languages). This would require a few more config variables, maybe one day. if (!TextSplit::isKATAKANA(*u8i)) { return false; } #else return false; #endif } // Most punctuation chars inhibate stemming. We accept one dash. See o_nospell_chars init in // the rcldb constructor. int ccnt = 0; for (unsigned char c : term) { if (o_nospell_chars[(unsigned int)c] && (c != '-' || ++ccnt > 1)) return false; } return true; } // At the moment, we only use aspell. The xapian speller code part is only for testing and normally // not compiled in. bool Db::getSpellingSuggestions(const string& word, vector& suggs) { LOGDEB("Db::getSpellingSuggestions:[" << word << "]\n"); suggs.clear(); if (nullptr == m_ndb) { return false; } string term = word; if (isSpellingCandidate(term, true)) { // Term is candidate for aspell processing #ifdef RCL_USE_ASPELL bool noaspell = false; m_config->getConfParam("noaspell", &noaspell); if (noaspell) { return false; } if (nullptr == m_aspell) { m_aspell = new Aspell(m_config); if (m_aspell) { string reason; m_aspell->init(reason); if (!m_aspell->ok()) { LOGDEB("Aspell speller init failed: " << reason << "\n"); delete m_aspell; m_aspell = nullptr; } } } if (nullptr == m_aspell) { LOGERR("Db::getSpellingSuggestions: aspell not initialized\n"); return false; } string reason; if (!m_aspell->suggest(*this, term, suggs, reason)) { LOGERR("Db::getSpellingSuggestions: aspell failed: " << reason << "\n"); return false; } #endif } else { #ifdef TESTING_XAPIAN_SPELL // Was not aspell candidate (e.g.: katakana). Maybe use Xapian speller? if (isSpellingCandidate(term, false)) { if (!o_index_stripchars) { if (!unacmaybefold(word, term, UNACOP_UNACFOLD)) { LOGINFO("Db::getSpelling: unac failed for [" << word << "]\n"); return false; } } string sugg = m_ndb->xrdb.get_spelling_suggestion(term); if (!sugg.empty()) { suggs.push_back(sugg); } } #endif } return true; } } // End namespace Rcl recoll-1.43.12/rcldb/daterange.h0000644000175000017500000000121315121730573015636 0ustar dockesdockes#ifndef _DATERANGE_H_INCLUDED_ #define _DATERANGE_H_INCLUDED_ #include using namespace std; static const string xapday_prefix = "D"; static const string xapmonth_prefix = "M"; static const string xapyear_prefix = "Y"; namespace Rcl { extern Xapian::Query date_range_filter(int y1, int m1, int d1, int y2, int m2, int d2); } #ifdef EXT4_BIRTH_TIME static const string xapbriday_prefix = "BD"; static const string xapbrimonth_prefix = "BM"; static const string xapbriyear_prefix = "BY"; namespace Rcl { extern Xapian::Query brdate_range_filter(int y1, int m1, int d1, int y2, int m2, int d2); } #endif #endif /* _DATERANGE_H_INCLUDED_ */ recoll-1.43.12/rcldb/rcldoc.h0000644000175000017500000002466215121730573015167 0ustar dockesdockes/* Copyright (C) 2006-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _RCLDOC_H_INCLUDED_ #define _RCLDOC_H_INCLUDED_ #include #include #include #include "rclutil.h" namespace Rcl { /** * Dumb holder for document attributes and data. * * This is used both for indexing, where fields are filled-up by the * indexer prior to adding to the index, and for querying, where * fields are filled from data stored in the index. Not all fields are * in use at both index and query times, and not all field data is * stored at index time. */ class Doc { public: //////////////////////////////////////////////////////////// // The following fields are stored into the document data record (so they // can be accessed after a query without fetching the actual document). // We indicate the routine that sets them up during indexing // Binary or url-encoded url. No transcoding: this is used to access files // Index: computed by Db::add caller. // Query: from doc data. std::string url; // When we do path translation for documents from external indexes, we // save the original path: std::string idxurl; // And the originating db. 0 is base, 1 first external etc. int idxi{0}; // Internal path for multi-doc files. // Set by FsIndexer::processone // Note: 2023-06: could be binary but all filters currently output UTF-8. This is not // enforced though, and, for example, the tar handler, which is not enabled by default // can output binary values (for binary Posix paths). // This is an issue for the python module, because, at the moment, only the URL can be retrieved // as as bytes. Maybe change doc.get() to return bytes if the key is bytes? std::string ipath; // Mime type. Set by FileInterner::internfile std::string mimetype; // File modification time as decimal ascii unix time // Set by FsIndexer::processone std::string fmtime; // Data reference date (same format). Ie: mail date // Possibly set by mimetype-specific handler // Filter::metaData["modificationdate"] std::string dmtime; // Charset we transcoded the 'text' field from (in case we want back) // Possibly set by handler std::string origcharset; // A map for textual metadata like, author, keywords, abstract, // title. The entries are possibly set by the mimetype-specific // handler. If a fieldname-to-prefix translation exists, the // terms in the value will be indexed with a prefix. // Only some predefined fields are stored in the data record: // "title", "keywords", "abstract", "author", but if a field name is // in the "stored" configuration list, it will be stored too. std::unordered_map meta; // Attribute for the "abstract" entry. true if it is just the top // of doc, not a native document attribute. Not stored directly, but // as an indicative prefix at the beginning of the abstract (ugly hack) bool syntabs{false}; // File size. This is the size of the compressed file or of the // external containing archive. // Index: Set by caller prior to Db::Add. // Query: Set from data record std::string pcbytes; // Document size, ie, size of the .odt or .xls. // Index: Set in internfile from the filter stack // Query: set from data record std::string fbytes; // Doc text size. // Index: from text.length(). // Query: set by rcldb from index data record std::string dbytes; // Doc signature. Used for up to date checks. // Index: set by Db::Add caller. Query: set from doc data. // This is opaque to rcldb, and could just as well be ctime, size, // ctime+size, md5, whatever. std::string sig; ///////////////////////////////////////////////// // The following fields don't go to the db record, so they can't // be retrieved at query time // Main document text. This is plaintext utf-8 text to be split // and indexed std::string text; ///////////////////////////////////////////////// // Misc stuff int pc{0}; // relevancy percentage, used by sortseq, convenience unsigned long xdocid{0}; // Opaque: rcldb doc identifier. // Page breaks were stored during indexing. bool haspages{false}; // Has children, either as content of file-level container or // ipath descendants. bool haschildren{false}; // During indexing: only fields from extended attributes were set, no // doc content. Allows for faster reindexing of existing doc bool metaonly{false}; /////////////////////////////////////////////////////////////////// void erase() { url.erase(); idxurl.erase(); idxi = 0; ipath.erase(); mimetype.erase(); fmtime.erase(); dmtime.erase(); origcharset.erase(); meta.clear(); syntabs = false; pcbytes.erase(); fbytes.erase(); dbytes.erase(); sig.erase(); text.erase(); pc = 0; xdocid = 0; haspages = false; haschildren = false; metaonly = false; } // Copy ensuring no shared string data, for threading issues. void copyto(Doc *d) const; Doc() { } /** Get value for named field. If value pointer is 0, just test existence */ bool getmeta(const std::string& nm, std::string *value = nullptr) const { const auto it = meta.find(nm); if (it != meta.end()) { if (value) *value = it->second; return true; } else { return false; } } /** Nocopy getvalue. sets pointer to entry value if exists */ bool peekmeta(const std::string& nm, const std::string **value = nullptr) const { const auto it = meta.find(nm); if (it != meta.end()) { if (value) *value = &(it->second); return true; } return false; } /** Check if metadata is set and not empty */ bool hasmetavalue(const std::string& nm) { const std::string *vp; if (peekmeta(nm, &vp) && !vp->empty()) { return true; } return false; } // Create entry or append text to existing entry. bool addmeta(const std::string& nm, const std::string& value) { ::addmeta(meta, nm, value); return true; } /* Is this document stored in a regular filesystem file ? * (as opposed to e.g. a webcache file). */ bool isFsFile() { std::string backend; getmeta(keybcknd, &backend); if (!backend.empty() && backend.compare("FS")) return false; return true; } void dump(bool dotext=false) const; //////////////////////////////////////////////////////////////// // The official names for recoll native fields when used in a text // context (ie: the python interface duplicates some of the fixed // fields in the meta array, these are the names used). Defined in // rcldoc.cpp. Fields stored in the meta[] array (ie, title, // author), _must_ use these canonical values, not aliases. This is // enforced in internfile.cpp and misc other bits of metadata-gathering // code static const std::string keyurl; // url // childurl. This is set when working with the parent of the result, to hold // the child of interest url, typically to highlight a directory entry static const std::string keychildurl; // file name. This is set for filesystem-level containers or // documents, and not inherited by subdocuments (which can get a // keyfn anyway from, e.g, an attachment filename value). Subdocs // used to inherit the file name, but this was undesirable (you // usually don't want to see all subdocs when searching for the // file name). Instead the container file name is now set in the // document record but not indexed (see next entry). static const std::string keyfn; // Container file name. This is set for all subdocuments of a // given top level container. It is not indexed by default but // stored in the document record keyfn field if this is still // empty when we create it, for display purposes. static const std::string keyctfn; static const std::string keyipt; // ipath static const std::string keytp; // mime type static const std::string keyfmt; // file mtime static const std::string keydmt; // document mtime #ifdef EXT4_BIRTH_TIME static const std::string keybrt; // file birthtime #endif static const std::string keymt; // mtime dmtime if set else fmtime static const std::string keyoc; // original charset static const std::string keypcs; // document outer container size static const std::string keyfs; // document size static const std::string keyds; // document text size static const std::string keysz; // dbytes if set else fbytes else pcbytes static const std::string keysig; // sig static const std::string keyrr; // relevancy rating static const std::string keycc; // Collapse count static const std::string keyabs; // abstract static const std::string keyau; // author static const std::string keytt; // title static const std::string keykw; // keywords static const std::string keymd5; // file md5 checksum static const std::string keybcknd; // backend type when not from the fs // udi back from index. Only set by Rcl::Query::getdoc(). static const std::string keyudi; static const std::string keyapptg; // apptag. Set from localfields (fs only) static const std::string keybght; // beagle hit type ("beagleHitType") }; extern bool docsToPaths(const std::vector &docs, std::vector &paths); } #endif /* _RCLDOC_H_INCLUDED_ */ recoll-1.43.12/rcldb/searchdatatox.cpp0000644000175000017500000012517015130147722017100 0ustar dockesdockes/* Copyright (C) 2006-2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // Handle translation from rcl's SearchData structures to Xapian Queries #include "autoconfig.h" #include #include #include #include #include #include #include "xapian.h" #include "cstr.h" #include "rcldb.h" #include "rcldb_p.h" #include "searchdata.h" #include "log.h" #include "smallut.h" #include "textsplit.h" #include "unacpp.h" #include "utf8iter.h" #include "stoplist.h" #include "rclconfig.h" #include "termproc.h" #include "synfamily.h" #include "stemdb.h" #include "expansiondbs.h" #include "base64.h" #include "daterange.h" #include "rclvalues.h" #include "pathut.h" using namespace std; namespace Rcl { static const int original_term_wqf_booster = 10; // Expand doc categories and mime type wild card expressions // // Categories are expanded against the configuration, mimetypes // against the index. bool SearchData::expandFileTypes(Db &db, vector& tps) { const RclConfig *cfg = db.getConf(); if (!cfg) { LOGFATAL("Db::expandFileTypes: null configuration!!\n"); return false; } vector exptps; for (const auto& mtype : tps) { if (cfg->isMimeCategory(mtype)) { vector ctps; cfg->getMimeCatTypes(mtype, ctps); exptps.insert(exptps.end(), ctps.begin(), ctps.end()); } else { TermMatchResult res; string mt = stringtolower(mtype); // Expand possible wildcard in mime type, e.g. text/* // We set casesens|diacsens to get an equivalent of ixTermMatch() db.termMatch( Db::ET_WILD|Db::ET_CASESENS|Db::ET_DIACSENS, string(), mt, res, -1, "mtype"); if (res.entries.empty()) { exptps.push_back(mtype); } else { for (const auto& entry : res.entries) { exptps.push_back(strip_prefix(entry.term)); } } } } sort(exptps.begin(), exptps.end()); exptps.erase(unique(exptps.begin(), exptps.end()), exptps.end()); tps = exptps; return true; } static const char *maxXapClauseMsg = "Maximum Xapian query size exceeded. Increase maxXapianClauses in the configuration. "; static const char *maxXapClauseCaseDiacMsg = "Or try to use case (C) or diacritics (D) sensitivity qualifiers, or less wildcards ?"; // Walk the clauses list, translate each and add to top Xapian Query bool SearchData::clausesToQuery( Rcl::Db &db, SClType tp, vector& query, string& reason, void *d) { Xapian::Query xq; for (auto& clausep : query) { #if 0 string txt; auto clp = dynamic_cast(clausep); if (clp) txt = clp->gettext(); LOGINF("Clause: tp: " << clausep->getTp() << " txt: [" << txt << "] mods: " << std::hex << clausep->getModifiers() << std::dec << "\n"); #endif Xapian::Query nq; if (!clausep->toNativeQuery(db, &nq)) { LOGERR("SearchData::clausesToQuery: toNativeQuery failed: " << clausep->getReason() << "\n"); reason += clausep->getReason() + " "; return false; } if (nq.empty()) { LOGDEB0("SearchData::clausesToQuery: skipping empty clause\n"); continue; } // If this structure is an AND list, must use AND_NOT for excl clauses. // Else this is an OR list, and there can't be excl clauses (checked by // addClause()) Xapian::Query::op op; if (tp == SCLT_AND) { if (clausep->getexclude()) { op = Xapian::Query::OP_AND_NOT; } else { if (clausep->getModifiers() & SearchDataClause::SDCM_FILTER) { op = Xapian::Query::OP_FILTER; } else { op = Xapian::Query::OP_AND; } } } else { op = Xapian::Query::OP_OR; } if (xq.empty()) { if (op == Xapian::Query::OP_AND_NOT) xq = Xapian::Query(op, Xapian::Query::MatchAll, nq); else xq = nq; } else { xq = Xapian::Query(op, xq, nq); } if (int(xq.get_length()) >= getMaxCl()) { LOGERR("" << maxXapClauseMsg << "\n"); m_reason += maxXapClauseMsg; if (!o_index_stripchars) m_reason += maxXapClauseCaseDiacMsg; return false; } } LOGDEB0("SearchData::clausesToQuery: got " << xq.get_length()<<" clauses\n"); if (xq.empty()) xq = Xapian::Query::MatchAll; *((Xapian::Query *)d) = xq; return true; } static void processdaterange(Rcl::Db& db, Xapian::Query& xq, DateInterval& dates, bool isbr = false) { // If one of the extremities is unset, compute db extremas if (dates.y1 == 0 || dates.y2 == 0) { int minyear = 1970, maxyear = 2100; if (!db.maxYearSpan(&minyear, &maxyear)) { LOGERR("Can't retrieve index min/max dates\n"); //whatever, go on. } if (dates.y1 == 0) { dates.y1 = minyear; dates.m1 = 1; dates.d1 = 1; } if (dates.y2 == 0) { dates.y2 = maxyear; dates.m2 = 12; dates.d2 = 31; } } LOGDEB("Db::toNativeQuery: " << (isbr?"birtime":"date") << " interval: " << dates.y1 << "-" << dates.m1 << "-" << dates.d1 << "/" << dates.y2 << "-" << dates.m2 << "-" << dates.d2 << "\n"); Xapian::Query dq; #ifdef EXT4_BIRTH_TIME if (isbr) { dq = brdate_range_filter(dates.y1, dates.m1, dates.d1, dates.y2, dates.m2, dates.d2); } else #endif { dq = date_range_filter(dates.y1, dates.m1, dates.d1, dates.y2, dates.m2, dates.d2); } if (dq.empty()) { LOGINFO("Db::toNativeQuery: date filter is empty\n"); } // If no probabilistic query is provided then promote the daterange // filter to be THE query instead of filtering an empty query. if (xq.empty()) { LOGINFO("Db::toNativeQuery: proba query is empty\n"); xq = dq; } else { xq = Xapian::Query(Xapian::Query::OP_FILTER, xq, dq); } } bool SearchData::toNativeQuery(Rcl::Db &db, void *d) { LOGDEB("SearchData::toNativeQuery: stemlang [" << m_stemlang << "]\n"); m_reason.erase(); db.getConf()->getConfParam("maxTermExpand", &m_maxexp); db.getConf()->getConfParam("maxXapianClauses", &m_maxcl); m_autocasesens = true; db.getConf()->getConfParam("autocasesens", &m_autocasesens); m_autodiacsens = false; db.getConf()->getConfParam("autodiacsens", &m_autodiacsens); simplify(); // Walk the clause list translating each in turn and building the // Xapian query tree Xapian::Query xq; if (!clausesToQuery(db, m_tp, m_query, m_reason, &xq)) { LOGERR("SearchData::toNativeQuery: clausesToQuery failed. reason: " << m_reason << "\n"); return false; } if (m_haveDates) { processdaterange(db, xq, m_dates); } #ifdef EXT4_BIRTH_TIME //handle birtime if (m_haveBrDates) { processdaterange(db, xq, m_brdates, true); } #endif if (m_minSize != -1 || m_maxSize != -1) { Xapian::Query sq; string min = std::to_string(m_minSize); string max = std::to_string(m_maxSize); if (m_minSize == -1) { string value(max); leftzeropad(value, 12); sq = Xapian::Query(Xapian::Query::OP_VALUE_LE, VALUE_SIZE, value); } else if (m_maxSize == -1) { string value(min); leftzeropad(value, 12); sq = Xapian::Query(Xapian::Query::OP_VALUE_GE, VALUE_SIZE, value); } else { string minvalue(min); leftzeropad(minvalue, 12); string maxvalue(max); leftzeropad(maxvalue, 12); sq = Xapian::Query(Xapian::Query::OP_VALUE_RANGE, VALUE_SIZE, minvalue, maxvalue); } // If no probabilistic query is provided then promote the // filter to be THE query instead of filtering an empty query. if (xq.empty()) { LOGINFO("Db::toNativeQuery: proba query is empty\n"); xq = sq; } else { xq = Xapian::Query(Xapian::Query::OP_FILTER, xq, sq); } } // Add the autophrase if any if (m_autophrase) { Xapian::Query apq; if (m_autophrase->toNativeQuery(db, &apq)) { xq = xq.empty() ? apq : Xapian::Query(Xapian::Query::OP_AND_MAYBE, xq, apq); } } // Add the file type filtering clause if any if (!m_filetypes.empty()) { expandFileTypes(db, m_filetypes); Xapian::Query tq; for (const auto& ft : m_filetypes) { string term = wrap_prefix(mimetype_prefix) + ft; LOGDEB0("Adding file type term: [" << term << "]\n"); tq = tq.empty() ? Xapian::Query(term) : Xapian::Query(Xapian::Query::OP_OR, tq, Xapian::Query(term)); } xq = xq.empty() ? tq : Xapian::Query(Xapian::Query::OP_FILTER, xq, tq); } // Add the neg file type filtering clause if any if (!m_nfiletypes.empty()) { expandFileTypes(db, m_nfiletypes); Xapian::Query tq; for (const auto& ft : m_nfiletypes) { string term = wrap_prefix(mimetype_prefix) + ft; LOGDEB0("Adding negative file type term: [" << term << "]\n"); tq = tq.empty() ? Xapian::Query(term) : Xapian::Query(Xapian::Query::OP_OR, tq, Xapian::Query(term)); } xq = xq.empty() ? tq : Xapian::Query(Xapian::Query::OP_AND_NOT, xq, tq); } *((Xapian::Query *)d) = xq; return true; } // Splitter for breaking a user string into simple terms and // phrases. This is for parts of the user entry which would appear as // a single word because there is no white space inside, but are // actually multiple terms to rcldb (ie term1,term2). Still, most of // the time, the result of our splitting will be a single term. class TextSplitQ : public TextSplitP { public: TextSplitQ(int flags, TermProc *prc) : TextSplitP(prc, flags), m_nostemexp(false) { } bool takeword(const std::string &term, size_t pos, size_t bs, size_t be) override { // Check if the first letter is a majuscule in which // case we do not want to do stem expansion. Need to do this // before unac of course... m_nostemexp = unaciscapital(term); return TextSplitP::takeword(term, pos, bs, be); } virtual bool discarded(const std::string &term, size_t, size_t, size_t, DiscardReason reason) override { m_problemterm = term; return true; } bool nostemexp() const { return m_nostemexp; } std::string getproblemterm() { return m_problemterm; } private: bool m_nostemexp; std::string m_problemterm; }; class TermProcQ : public TermProc { public: TermProcQ() : TermProc(nullptr), m_alltermcount(0), m_lastpos(0), m_ts(nullptr) {} // We need a ref to the splitter (only it knows about orig term // capitalization for controlling stemming. The ref can't be set // in the constructor because the splitter is not built yet when // we are born (chicken and egg). void setTSQ(const TextSplitQ *ts) { m_ts = ts; } bool takeword(const std::string &term, size_t _pos, size_t, size_t be) override { m_alltermcount++; int ipos = static_cast(_pos); if (m_lastpos < ipos) m_lastpos = ipos; bool noexpand = be ? m_ts->nostemexp() : true; LOGDEB1("TermProcQ::takeword: pushing [" << term << "] pos " << ipos << " noexp " << noexpand << "\n"); if (m_terms[ipos].size() < term.size()) { m_terms[ipos] = term; m_nste[ipos] = noexpand; } return true; } bool flush() override { for (const auto& entry : m_terms) { m_vterms.push_back(entry.second); m_vnostemexps.push_back(m_nste[entry.first]); } return true; } int alltermcount() const { return m_alltermcount; } int lastpos() const { return m_lastpos; } const vector& terms() { return m_vterms; } const vector& nostemexps() { return m_vnostemexps; } private: // Count of terms including stopwords: this is for adjusting // phrase/near slack int m_alltermcount; int m_lastpos; const TextSplitQ *m_ts; vector m_vterms; vector m_vnostemexps; map m_terms; map m_nste; }; static const vector expandModStrings{ {SearchDataClause::SDCM_NOSTEMMING, "nostemming"}, {SearchDataClause::SDCM_ANCHORSTART, "anchorstart"}, {SearchDataClause::SDCM_ANCHOREND, "anchorend"}, {SearchDataClause::SDCM_CASESENS, "casesens"}, {SearchDataClause::SDCM_DIACSENS, "diacsens"}, {SearchDataClause::SDCM_NOTERMS, "noterms"}, {SearchDataClause::SDCM_NOSYNS, "nosyns"}, {SearchDataClause::SDCM_PATHELT, "pathelt"}, {SearchDataClause::SDCM_FILTER, "filter"}, {SearchDataClause::SDCM_EXPANDPHRASE, "expandphrase"}, {SearchDataClause::SDCM_NOWILDEXP, "nowildexp"}, }; /** Expand term into term list, using appropriate mode: stem, wildcards, * diacritics... * * @param mods stem expansion, case and diacritics sensitivity control. * @param term input single word * @param oexp output expansion list * @param sterm output original input term if there were no wildcards * @param prefix field prefix in index. We could recompute it, but the caller * has it already. Used in the simple case where there is nothing to expand, * and we just return the prefixed term (else Db::termMatch deals with it). * @param multiwords it may happen that synonym processing results in multi-word * expansions which should be processed as phrases. */ bool SearchDataClauseSimple::expandTerm(Rcl::Db &db, string& ermsg, int mods, const string& term, vector& oexp, string &sterm, const string& prefix, vector* multiwords ) { LOGDEB0("expandTerm: mods: [" << flagsToString(expandModStrings, mods) << "] fld [" << m_field << "] trm [" << term << "] lang [" << getStemLang() << "]\n"); sterm.clear(); oexp.clear(); if (term.empty()) return true; if (mods & SDCM_PATHELT) { // Path element are so special. Only wildcards, and they are // case-sensitive. mods |= SDCM_NOSTEMMING|SDCM_CASESENS|SDCM_DIACSENS|SDCM_NOSYNS; } bool maxexpissoft = false; int maxexpand = getSoftMaxExp(); if (maxexpand != -1) { maxexpissoft = true; } else { maxexpand = getMaxExp(); } bool haswild = term.find_first_of(cstr_minwilds) != string::npos; // If there are no wildcards, add term to the list of user-entered terms bool dowildexp = !getNoWildExp() && haswild; if (!dowildexp) { m_hldata.uterms.insert(term); sterm = term; } // No stem expansion if there are wildcards (even if nowildexp) or if prevented by caller bool nostemexp = (mods & SDCM_NOSTEMMING) != 0; if (haswild || getStemLang().empty()) { LOGDEB2("expandTerm: found wildcards or stemlang empty: no exp\n"); nostemexp = true; } bool diac_sensitive = (mods & SDCM_DIACSENS) != 0; bool case_sensitive = (mods & SDCM_CASESENS) != 0; bool synonyms = (mods & SDCM_NOSYNS) == 0; bool pathelt = (mods & SDCM_PATHELT) != 0; // noexpansion can be modified further down by possible case/diac expansion bool noexpansion = nostemexp && !dowildexp && !synonyms; if (o_index_stripchars) { diac_sensitive = case_sensitive = false; } else { // If we are working with a raw index, apply the rules for case and // diacritics sensitivity. // If any character has a diacritic, we become // diacritic-sensitive. Note that the way that the test is // performed (conversion+comparison) will automatically ignore // accented characters which are actually a separate letter if (getAutoDiac() && unachasaccents(term)) { LOGDEB0("expandTerm: term has accents -> diac-sensitive\n"); diac_sensitive = true; } // If any character apart the first is uppercase, we become // case-sensitive. The first character is reserved for // turning off stemming. You need to use a query language // modifier to search for Floor in a case-sensitive way. Utf8Iter it(term); it++; if (getAutoCase() && unachasuppercase(term.substr(it.getBpos()))) { LOGDEB0("expandTerm: term has uppercase -> case-sensitive\n"); case_sensitive = true; } // If we are sensitive to case or diacritics turn stemming off if (diac_sensitive || case_sensitive) { LOGDEB0("expandTerm: diac or case sens set -> stemexpand and synonyms off\n"); nostemexp = true; synonyms = false; } if (!case_sensitive || !diac_sensitive) noexpansion = false; } if (!m_exclude && noexpansion) { oexp.push_back(prefix + term); m_hldata.terms[term] = term; LOGDEB("ExpandTerm: noexpansion: final: "<= maxexpand && !maxexpissoft) { ermsg = "Maximum term expansion size exceeded." " Maybe use case/diacritics sensitivity or increase maxTermExpand."; return false; } for (const auto& entry : res.entries) { oexp.push_back(entry.term); } // If the term does not exist at all in the db, the return from // termMatch() is going to be empty, which is not what we want (we // would then compute an empty Xapian query) if (oexp.empty()) oexp.push_back(prefix + term); // Remember the uterm-to-expansion links if (!m_exclude) { for (const auto& entry : oexp) { m_hldata.terms[strip_prefix(entry)] = term; } } // Remember the terms generated trough spelling approximation m_hldata.spellexpands.insert(m_hldata.spellexpands.end(), res.fromspelling.begin(), res.fromspelling.end()); LOGDEB("ExpandTerm: final: " << stringsToString(oexp) << "\n"); return true; } static void prefix_vector(vector& v, const string& prefix) { for (auto& elt : v) { elt = prefix + elt; } } void SearchDataClauseSimple::processSimpleSpan( Rcl::Db &db, string& ermsg, const string& span, int mods, void *pq) { vector& pqueries(*(vector*)pq); LOGDEB0("StringToXapianQ::processSimpleSpan: [" << span << "] mods 0x" << (unsigned int)mods << "\n"); string prefix; const FieldTraits *ftp; if (!m_field.empty() && db.fieldToTraits(m_field, &ftp, true)) { if (ftp->noterms) addModifier(SDCM_NOTERMS); // Don't add terms to highlight data prefix = wrap_prefix(ftp->pfx); } vector exp; string sterm; // dumb version of user term vector multiwords; static string wildcardchars{"*?[]"}; // Special case: in case nowildexp is set and we get a single char (because it's in // indexedpunctuation probably), check if it's a wildcard and don't do expandTerm at // all. Simpler than dealing with the case inside expandTerm. if (getNoWildExp() && span.size() == 1 && wildcardchars.find(span[0]) != string::npos) { exp.push_back(span); sterm = span; } else { if (!expandTerm(db, ermsg, mods, span, exp, sterm, prefix, &multiwords)) { LOGINF("processSimpleSpan: expandterm failed\n"); return; } } // Set up the highlight data. No prefix should go in there if (!m_exclude) { for (const auto& term : exp) { HighlightData::TermGroup tg; tg.term = term.substr(prefix.size()); tg.grpsugidx = m_hldata.ugroups.size() - 1; m_hldata.index_term_groups.push_back(tg); } } // Push either term or OR of stem-expanded set Xapian::Query xq(Xapian::Query::OP_OR, exp.begin(), exp.end()); m_curcl += exp.size(); // If sterm (simplified original user term) is not null, give it a // relevance boost. We do this even if no expansion occurred (else // the non-expanded terms in a term list would end-up with even // less wqf). This does not happen if there are wildcards anywhere // in the search. // We normally boost the original term in the stem expansion list. Don't // do it if there are wildcards anywhere, this would skew the results. Also // no need to do it if there was no expansion. bool doBoostUserTerm = (m_parentSearch && !m_parentSearch->haveWildCards()) || (nullptr == m_parentSearch && !m_haveWildCards); if (exp.size() > 1 && doBoostUserTerm && !sterm.empty()) { xq = Xapian::Query(Xapian::Query::OP_OR, xq, Xapian::Query(prefix+sterm, original_term_wqf_booster)); } // Push phrases for the multi-word expansions for (const auto& mw : multiwords) { vector phr; // We just do a basic split to keep things a bit simpler here // (no textsplit). This means though that no punctuation is // allowed in multi-word synonyms. stringToTokens(mw, phr); if (!prefix.empty()) prefix_vector(phr, prefix); xq = Xapian::Query(Xapian::Query::OP_OR, xq, Xapian::Query(Xapian::Query::OP_PHRASE, phr.begin(), phr.end())); m_curcl++; } pqueries.push_back(xq); } // User entry element had several terms: transform into a PHRASE or // NEAR xapian query, the elements of which can themselves be OR // queries if the terms get expanded by stemming or wildcards (we // don't do stemming for PHRASE though) void SearchDataClauseSimple::processPhraseOrNear( Rcl::Db &db, string& ermsg, TermProcQ *splitData, int mods, void *pq, bool useNear, int slack) { vector &pqueries(*(vector*)pq); Xapian::Query::op op = useNear ? Xapian::Query::OP_NEAR : Xapian::Query::OP_PHRASE; vector orqueries; vector >groups; bool useidxsynonyms = db.getSynGroups().getpath() == db.getConf()->getIdxSynGroupsFile(); string prefix; const FieldTraits *ftp; if (!m_field.empty() && db.fieldToTraits(m_field, &ftp, true)) { prefix = wrap_prefix(ftp->pfx); } if (mods & Rcl::SearchDataClause::SDCM_ANCHORSTART) { orqueries.push_back(Xapian::Query(prefix + start_of_field_term)); } // Max term count in a multiword. See below comment about slack adjustment int maxmwordlen = 0; // Go through the list and perform stem/wildcard expansion for each element auto nxit = splitData->nostemexps().begin(); for (auto it = splitData->terms().begin(); it != splitData->terms().end(); it++, nxit++) { LOGDEB0("ProcessPhrase: processing [" << *it << "]\n"); // Adjust when we do stem expansion. Not if disabled by caller, not inside phrases. bool nostemexp = *nxit || (op == Xapian::Query::OP_PHRASE && !o_expand_phrases && !(mods & Rcl::SearchDataClause::SDCM_EXPANDPHRASE)); int lmods = mods; if (nostemexp) lmods |= SearchDataClause::SDCM_NOSTEMMING; string sterm; vector exp; vector multiwords; if (!expandTerm(db, ermsg, lmods, *it, exp, sterm, prefix, &multiwords)) return; // Note: because of how expandTerm works, the multiwords can only come from the synonyms // expansion, which means that, if idxsynonyms is set, they have each been indexed as a // single term. So, if idxsynonyms is set, and is the current active synonyms file, we just // add them to the expansion. We have to increase the slack in this case, which will also // apply to single-word expansions and cause false matches, but this is better than missing // multiword matches (this is because, even if the multiword term was issued at the position // of its first word during indexing, the position of the first term after the multiword is // still increased by the number of words in the multiword). if (!multiwords.empty() && useidxsynonyms) { for (const auto& mword: multiwords) { int cnt = std::count(mword.begin(), mword.end(), ' ') + 1; if (cnt > maxmwordlen) maxmwordlen = cnt; } exp.insert(exp.end(), multiwords.begin(), multiwords.end()); } LOGDEB0("ProcessPhraseOrNear: exp size " << exp.size() << ", exp: " << stringsToString(exp) << "\n"); // groups is used for highlighting, we don't want prefixes in there. vector noprefs; for (const auto& prefterm : exp) { noprefs.push_back(prefterm.substr(prefix.size())); } groups.push_back(noprefs); orqueries.push_back(Xapian::Query(Xapian::Query::OP_OR, exp.begin(), exp.end())); m_curcl += exp.size(); if (m_curcl >= getMaxCl()) return; } if (mods & Rcl::SearchDataClause::SDCM_ANCHOREND) { orqueries.push_back(Xapian::Query(prefix + end_of_field_term)); } // Generate an appropriate PHRASE/NEAR query with adjusted slack // For phrases, give a relevance boost like we do for original terms LOGDEB2("PHRASE/NEAR: alltermcount " << splitData->alltermcount() << " lastpos " << splitData->lastpos() << "\n"); if (maxmwordlen > 1) { slack += maxmwordlen - 1; } Xapian::Query xq(op, orqueries.begin(), orqueries.end(), static_cast(orqueries.size()) + slack); if (op == Xapian::Query::OP_PHRASE) xq = Xapian::Query(Xapian::Query::OP_SCALE_WEIGHT, xq, original_term_wqf_booster); pqueries.push_back(xq); // Insert the search groups and slacks in the highlight data, with // a reference to the user entry that generated them: if (!m_exclude) { HighlightData::TermGroup tg; tg.orgroups = groups; tg.slack = slack; tg.grpsugidx = m_hldata.ugroups.size() - 1; tg.kind = (op == Xapian::Query::OP_PHRASE) ? HighlightData::TermGroup::TGK_PHRASE : HighlightData::TermGroup::TGK_NEAR; m_hldata.index_term_groups.push_back(tg); } } // Trim string beginning with ^ or ending with $ and convert to flags static int stringToMods(string& s) { int mods = 0; // Check for an anchored search trimstring(s); if (s.length() > 0 && s[0] == '^') { mods |= Rcl::SearchDataClause::SDCM_ANCHORSTART; s.erase(0, 1); } if (s.length() > 0 && s[s.length()-1] == '$') { mods |= Rcl::SearchDataClause::SDCM_ANCHOREND; s.erase(s.length()-1); } return mods; } /** * Turn user entry string (NOT raw query language, but possibly the contents of a phrase/near * clause out of the parser) into a list of Xapian queries. * We just separate words and phrases, and do wildcard and stem expansion, * * This is used to process data entered into an OR/AND/NEAR/PHRASE field of * the GUI (in the case of NEAR/PHRASE, clausedist adds dquotes to the user * entry). * * This appears awful, and it would seem that the split into * terms/phrases should be performed in the upper layer so that we * only receive pure term or near/phrase pure elements here, but in * fact there are things that would appear like terms to naive code, * and which will actually may be turned into phrases (ie: tom-jerry), * in a manner which intimately depends on the index implementation, * so that it makes sense to process this here. * * The final list contains one query for each term or phrase * - Elements corresponding to a stem-expanded part are an OP_OR * composition of the stem-expanded terms (or a single term query). * - Elements corresponding to phrase/near are an OP_PHRASE/NEAR * composition of the phrase terms (no stem expansion in this case) * @return the subquery count (either or'd stem-expanded terms or phrase word * count) */ bool SearchDataClauseSimple::processUserString( Rcl::Db &db, const string &iq, string &ermsg, string &pbterm, void *pq, int slack0, bool useNear) { vector &pqueries(*(vector*)pq); int mods = m_modifiers; LOGDEB("StringToXapianQ:pUS:: qstr [" << iq << "] fld [" << m_field << "] mods 0x"< phrases; TextSplit::stringToStrings(iq, phrases); // Process each element: textsplit into terms, handle stem/wildcard expansion and transform into // an appropriate Xapian::Query try { for (auto& wordorphrase : phrases) { LOGDEB0("strToXapianQ: phrase/word: [" << wordorphrase << "]\n"); int slack = slack0; // Anchoring modifiers int amods = stringToMods(wordorphrase); int terminc = amods != 0 ? 1 : 0; mods |= amods; // If there are multiple spans in this element, including // at least one composite, we have to increase the slack // else a phrase query including a span would fail. // Ex: "term0@term1 term2" is onlyspans-split as: // 0 term0@term1 0 12 // 2 term2 13 18 // The position of term2 is 2, not 1, so a phrase search // would fail. // We used to do word split, searching for // "term0 term1 term2" instead, which may have worse // performance, but will succeed. // We now adjust the phrase/near slack by comparing the term count // and the last position // The term processing pipeline: // split -> [unac/case ->] stops -> store terms TermProcQ tpq; TermProc *nxt = &tpq; TermProcStop tpstop(nxt, stops); nxt = &tpstop; //TermProcCommongrams tpcommon(nxt, stops); nxt = &tpcommon; //tpcommon.onlygrams(true); TermProcPrep tpprep(nxt); if (o_index_stripchars) nxt = &tpprep; int txtsplitflags = TextSplit::TXTS_ONLYSPANS; if (!getNoWildExp()) { txtsplitflags |= TextSplit::TXTS_KEEPWILD; } TextSplitQ splitter(txtsplitflags, nxt); tpq.setTSQ(&splitter); splitter.text_to_words(wordorphrase); if (!splitter.getproblemterm().empty()) { pbterm = splitter.getproblemterm(); } slack += tpq.lastpos() - int(tpq.terms().size()) + 1; LOGDEB0("strToXapianQ: termcount: " << tpq.terms().size() << "\n"); switch (tpq.terms().size() + terminc) { case 0: continue;// ?? case 1: { int lmods = mods; if (tpq.nostemexps().front()) lmods |= SearchDataClause::SDCM_NOSTEMMING; if (!m_exclude) { m_hldata.ugroups.push_back(tpq.terms()); } processSimpleSpan(db, ermsg, tpq.terms().front(), lmods, &pqueries); } break; default: if (!m_exclude) { m_hldata.ugroups.push_back(tpq.terms()); } processPhraseOrNear(db, ermsg, &tpq, mods, &pqueries, useNear, slack); } if (m_curcl >= getMaxCl()) { ermsg = maxXapClauseMsg; if (!o_index_stripchars) ermsg += maxXapClauseCaseDiacMsg; break; } } } catch (const Xapian::Error &e) { ermsg = e.get_msg(); } catch (const string &s) { ermsg = s; } catch (const char *s) { ermsg = s; } catch (...) { ermsg = "Caught unknown exception"; } if (!ermsg.empty()) { LOGERR("stringToXapianQueries: " << ermsg << "\n"); return false; } return true; } // Translate a simple OR or AND search clause. bool SearchDataClauseSimple::toNativeQuery(Rcl::Db &db, void *p) { LOGDEB("SearchDataClauseSimple::toNativeQuery: fld [" << m_field << "] val [" << m_text << "] stemlang [" << getStemLang() << "]\n"); m_hldata.clear(); // Transform (in)equalities into a range query switch (getrel()) { case REL_EQUALS: { SearchDataClauseRange cl(*this, gettext(), gettext()); bool ret = cl.toNativeQuery(db, p); m_reason = cl.getReason(); return ret; } case REL_LT: case REL_LTE: { SearchDataClauseRange cl(*this, "", gettext()); bool ret = cl.toNativeQuery(db, p); m_reason = cl.getReason(); return ret; } case REL_GT: case REL_GTE: { SearchDataClauseRange cl(*this, gettext(), ""); bool ret = cl.toNativeQuery(db, p); m_reason = cl.getReason(); return ret; } default: break; } Xapian::Query *qp = (Xapian::Query *)p; *qp = Xapian::Query(); Xapian::Query::op op; switch (m_tp) { case SCLT_AND: op = Xapian::Query::OP_AND; break; case SCLT_OR: op = Xapian::Query::OP_OR; break; default: LOGERR("SearchDataClauseSimple: bad m_tp " << m_tp << "\n"); m_reason = "Internal error"; return false; } vector pqueries; std::string pbterm; if (m_text.empty()) { // Simpler to just special-case the empty case here. pqueries = std::vector{Xapian::Query(std::string())}; } else if (!processUserString(db, m_text, m_reason, pbterm, &pqueries)) { return false; } if (pqueries.empty()) { LOGDEB("SearchDataClauseSimple: " << m_text << " resolved to null query\n"); if (!pbterm.empty()) m_reason = string("Resolved to null query. Problem term : [" + pbterm + string("]")); else m_reason = string("Resolved to null query. Term too long ? : [" + m_text + string("]")); return false; } *qp = Xapian::Query(op, pqueries.begin(), pqueries.end()); if (m_weight != 1.0) { *qp = Xapian::Query(Xapian::Query::OP_SCALE_WEIGHT, *qp, m_weight); } return true; } // Translate a range clause. This only works if a Xapian value slot // was attributed to the field. bool SearchDataClauseRange::toNativeQuery(Rcl::Db &db, void *p) { LOGDEB("SearchDataClauseRange::toNativeQuery: " << m_field << " :[" << m_text << ".." << m_t2 << "]\n"); m_hldata.clear(); Xapian::Query *qp = (Xapian::Query *)p; *qp = Xapian::Query(); if (m_field.empty() || (m_text.empty() && m_t2.empty())) { m_reason = "Range clause needs a field and a value"; return false; } // Get the value number for the field from the configuration const FieldTraits *ftp; if (!db.fieldToTraits(m_field, &ftp, true)) { m_reason = string("field ") + m_field + " not found in configuration"; return false; } if (ftp->valueslot == 0) { m_reason = string("No value slot specified in configuration for field ") + m_field; return false; } LOGDEB("SearchDataClauseRange: value slot " << ftp->valueslot << endl); // Build Xapian VALUE query. string errstr; try { if (m_text.empty()) { *qp = Xapian::Query(Xapian::Query::OP_VALUE_LE, ftp->valueslot, convert_field_value(*ftp, m_t2)); } else if (m_t2.empty()) { *qp = Xapian::Query(Xapian::Query::OP_VALUE_GE, ftp->valueslot, convert_field_value(*ftp, m_text)); } else { *qp = Xapian::Query(Xapian::Query::OP_VALUE_RANGE, ftp->valueslot, convert_field_value(*ftp, m_text), convert_field_value(*ftp, m_t2)); } } XCATCHERROR(errstr); if (!errstr.empty()) { LOGERR("SearchDataClauseRange: range query creation failed for slot "<valueslot<<"\n"); m_reason = "Range query creation failed\n"; *qp = Xapian::Query(); return false; } return true; } // Translate a FILENAME search clause. This always comes // from a "filename" search from the gui or recollq. A query language // "filename:"-prefixed field will not go through here, but through // the generic field-processing code. // // We do not split the entry any more (used to do some crazy thing // about expanding multiple fragments in the past). We just take the // value blanks and all and expand this against the indexed unsplit // file names bool SearchDataClauseFilename::toNativeQuery(Rcl::Db &db, void *p) { m_hldata.clear(); Xapian::Query *qp = (Xapian::Query *)p; *qp = Xapian::Query(); int maxexp = getSoftMaxExp(); if (maxexp == -1) maxexp = getMaxExp(); vector names; db.filenameWildExp(m_text, names, maxexp); *qp = Xapian::Query(Xapian::Query::OP_OR, names.begin(), names.end()); if (m_weight != 1.0) { *qp = Xapian::Query(Xapian::Query::OP_SCALE_WEIGHT, *qp, m_weight); } return true; } // Translate a dir: path filtering clause. See comments in .h bool SearchDataClausePath::toNativeQuery(Rcl::Db &db, void *p) { LOGDEB("SearchDataClausePath::toNativeQuery: [" << m_text << "]\n"); m_hldata.clear(); Xapian::Query *qp = (Xapian::Query *)p; *qp = Xapian::Query(); string ltext; #ifdef _WIN32 // Windows file names are case-insensitive, so we lowercase (same as when indexing) unacmaybefold(m_text, ltext, UNACOP_FOLD); #else ltext = m_text; #endif if (ltext.empty()) { LOGERR("SearchDataClausePath: empty path??\n"); m_reason = "Empty path ?"; return false; } vector orqueries; if (path_isabsolute(ltext)) orqueries.push_back(Xapian::Query(wrap_prefix(pathelt_prefix))); else ltext = path_tildexpand(ltext); vector vpath; stringToTokens(ltext, vpath, "/"); for (const auto& pathelt : vpath) { string sterm; vector exp; if (!expandTerm( db, m_reason, SDCM_PATHELT, pathelt, exp, sterm, wrap_prefix(pathelt_prefix))) { return false; } LOGDEB0("SDataPath::toNative: exp size " << exp.size() << ". Exp: " << stringsToString(exp) << "\n"); if (exp.size() == 1) orqueries.push_back(Xapian::Query(exp[0])); else orqueries.push_back(Xapian::Query(Xapian::Query::OP_OR, exp.begin(), exp.end())); m_curcl += exp.size(); if (m_curcl >= getMaxCl()) return false; } *qp = Xapian::Query(Xapian::Query::OP_PHRASE, orqueries.begin(), orqueries.end()); if (m_weight != 1.0) { *qp = Xapian::Query(Xapian::Query::OP_SCALE_WEIGHT, *qp, m_weight); } return true; } // Translate NEAR or PHRASE clause. bool SearchDataClauseDist::toNativeQuery(Rcl::Db &db, void *p) { LOGDEB("SearchDataClauseDist::toNativeQuery\n"); m_hldata.clear(); Xapian::Query *qp = (Xapian::Query *)p; *qp = Xapian::Query(); vector pqueries; // We produce a single phrase out of the user entry then use processUserString() to lowercase // and simplify the phrase terms etc. This will result into a single (complex) Xapian::Query. if (m_text.find('\"') != string::npos) { m_text = neutchars(m_text, "\""); } string s = cstr_dquote + m_text + cstr_dquote; bool useNear = (m_tp == SCLT_NEAR); if (!useNear && !o_expand_phrases && !(m_modifiers & SDCM_EXPANDPHRASE)) { // We are a phrase query. Make sure to disable stemming explicitely in case this is a single // quoted word because processUserString won't see it as a phrase by itself. m_modifiers |= SDCM_NOSTEMMING; } string pbterm; if (!processUserString(db, s, m_reason, pbterm, &pqueries, m_slack, useNear)) return false; if (pqueries.empty()) { LOGDEB("SearchDataClauseDist: [" << s << "]resolved to null query\n"); if (!pbterm.empty()) m_reason = string("Resolved to null query. Problem term : [" + pbterm + string("]")); else m_reason = string("Resolved to null query. Term too long ? : [" + m_text + string("]")); return true; } *qp = *pqueries.begin(); if (m_weight != 1.0) { *qp = Xapian::Query(Xapian::Query::OP_SCALE_WEIGHT, *qp, m_weight); } return true; } } // Namespace Rcl recoll-1.43.12/rcldb/searchdataxml.cpp0000644000175000017500000003336115121730573017070 0ustar dockesdockes/* Copyright (C) 2006-2024 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // Handle translation from rcl's SearchData structures to XML. Used for // complex search history storage in the GUI #include "autoconfig.h" #include #include #include #include #include "searchdata.h" #include "log.h" #include "base64.h" #include "picoxml.h" using namespace std; namespace Rcl { class SDataWalkerDump : public SdataWalker { public: SDataWalkerDump(ostream& _o, bool _asxml) : o(_o), asxml(_asxml) {} virtual ~SDataWalkerDump() {} std::string tabs; ostream& o; bool asxml; virtual bool clause(SearchDataClause *clp) override { clp->dump(o, tabs, asxml); return true; } virtual bool sdata(SearchData* sdp, bool enter) override{ if (enter) { sdp->dump(o, tabs, asxml); tabs += '\t'; } else { sdp->closeDump(o, tabs, asxml); if (!tabs.empty()) tabs.pop_back(); } return true; } }; static string tpToString(SClType tp) { switch (tp) { case SCLT_AND: return "AND"; case SCLT_OR: return "OR"; case SCLT_FILENAME: return "FN"; case SCLT_PHRASE: return "PH"; case SCLT_NEAR: return "NE"; case SCLT_RANGE: return "RG"; case SCLT_SUB: return "SU"; // Unsupported actually default: return "UN"; } } string SearchData::asXML() { ostringstream os; rdump(os, true); return os.str(); } void SearchData::rdump(ostream& o, bool asxml) { SDataWalkerDump printer(o, asxml); sdataWalk(this, printer); } void SearchData::dump(ostream& o, const std::string& tabs, bool asxml) const { if (asxml) { o << "" << "\n" << "" << "\n"; // List conjunction: default is AND, else print it. if (m_tp != SCLT_AND) o << "" << tpToString(m_tp) << "" << "\n"; } else { o << tabs << "SearchData: " << tpToString(m_tp) << " qs " << int(m_query.size()) << " ft " << m_filetypes.size() << " nft " << m_nfiletypes.size() << " hd " << m_haveDates << #ifdef EXT4_BIRTH_TIME " hbrd " << m_haveBrDates << #endif " maxs " << m_maxSize << " mins " << m_minSize << " wc " << m_haveWildCards << " subsp " << m_subspec << "\n"; } } void SearchData::closeDump(ostream& o, const std::string&, bool asxml) const { if (asxml) { o << "" << "\n"; if (m_haveDates) { if (m_dates.y1 > 0) { o << "" << "" << m_dates.d1 << "" << "" << m_dates.m1 << "" << "" << m_dates.y1 << "" << "" << "\n"; } if (m_dates.y2 > 0) { o << "" << "" << m_dates.d2 << "" << "" << m_dates.m2 << "" << "" << m_dates.y2 << "" << "" << "\n"; } } if (m_minSize != -1) { o << "" << m_minSize << "" << "\n"; } if (m_maxSize != -1) { o << "" << m_maxSize << "" << "\n"; } if (!m_filetypes.empty()) { o << ""; for (const auto& ft : m_filetypes) { o << ft << " "; } o << "" << "\n"; } if (!m_nfiletypes.empty()) { o << ""; for (const auto& nft : m_nfiletypes) { o << nft << " "; } o << "" << "\n"; } o << ""; } } void SearchDataClause::dump(ostream& o, const std::string& tabs, bool asxml) const { o << "SearchDataClause??"; } static void prolog(ostream& o, bool excl, SClType tp, const std::string& fld, const std::string& txt) { o << "" << "\n"; if (excl) o << "" << "\n"; if (tp != SCLT_AND) { o << "" << tpToString(tp) << "" << "\n"; } if (!fld.empty()) { o << "" << base64_encode(fld) << "" << "\n"; } o << "" << base64_encode(txt) << "" << "\n"; } void SearchDataClauseSimple::dump(ostream& o, const std::string& tabs, bool asxml) const { if (asxml) { prolog(o, getexclude(), getTp(), getfield(), gettext()); o << "" << "\n"; } else { o << tabs << "ClauseSimple: " << tpToString(m_tp) << " "; if (m_exclude) o << "- "; o << "[" ; if (!m_field.empty()) o << m_field << " : "; o << m_text << "]" << "\n"; } } void SearchDataClauseRange::dump(ostream& o, const std::string& tabs, bool asxml) const { if (asxml) { prolog(o, getexclude(), getTp(), getfield(), gettext()); const string& t = gettext2(); if (!t.empty()) { o << "" << base64_encode(gettext2()) << "" << "\n"; } o << "" << "\n"; } else { o << tabs << "ClauseRange: "; if (m_exclude) o << " - "; o << "[" << gettext() << "]" << "\n"; } } void SearchDataClauseDist::dump(ostream& o, const std::string& tabs, bool asxml) const { if (asxml) { prolog(o, getexclude(), getTp(), getfield(), gettext()); o << "" << getslack() << "" << "\n"; o << "" << "\n"; } else { if (m_tp == SCLT_NEAR) o << tabs << "ClauseDist: NEAR "; else o << tabs << "ClauseDist: PHRA "; if (m_exclude) o << " - "; o << "["; if (!m_field.empty()) o << m_field << " : "; o << m_text << "]" << "\n"; } } void SearchDataClauseFilename::dump(ostream& o, const std::string& tabs, bool asxml) const { if (asxml) { prolog(o, getexclude(), getTp(), getfield(), gettext()); o << "" << "\n"; } else { o << tabs << "ClauseFN: "; if (m_exclude) o << " - "; o << "[" << m_text << "]" << "\n"; } } void SearchDataClausePath::dump(ostream& o, const std::string& tabs, bool asxml) const { if (asxml) { if (getexclude()) { o << "" << base64_encode(gettext()) << "" << "\n"; } else { o << "" << base64_encode(gettext()) << "" << "\n"; } } else { o << tabs << "ClausePath: "; if (m_exclude) o << " - "; o << "[" << m_text << "]" << "\n"; } } void SearchDataClauseSub::dump(ostream& o, const std::string& tabs, bool asxml) const { if (asxml) { o << "" << "\n"; if (getexclude()) o << "" << "\n"; if (getTp() != SCLT_AND) { o << "" << tpToString(getTp()) << "" << "\n"; } o << "" << "\n"; } else { o << tabs << "ClauseSub "; } } ///////////////////// Reverse operation: build search data from XML class SDHXMLHandler : public PicoXMLParser { public: SDHXMLHandler(const std::string& in) : PicoXMLParser(in) { resetTemps(); } void startElement( const std::string& nm, const std::map& attrs) { LOGDEB2("SDHXMLHandler::startElement: name [" << nm << "]\n"); if (nm == "SD") { // Advanced search history entries have no type. So we're good // either if type is absent, or if it's searchdata auto attr = attrs.find("type"); if (attr != attrs.end() && attr->second != "searchdata") { LOGDEB("XMLTOSD: bad type: " << attr->second << endl); contentsOk = false; return; } resetTemps(); // A new search descriptor. Allocate data structure sd = std::make_shared(); if (!sd) { LOGERR("SDHXMLHandler::startElement: out of memory\n"); contentsOk = false; return; } } return; } void endElement(const string & nm) { LOGDEB2("SDHXMLHandler::endElement: name [" << nm << "]\n"); string curtxt{currentText}; trimstring(curtxt, " \t\n\r"); if (nm == "CLT") { if (curtxt == "OR") { sd->setTp(SCLT_OR); } } else if (nm == "CT") { whatclause = curtxt; } else if (nm == "NEG") { exclude = true; } else if (nm == "F") { field = base64_decode(curtxt); } else if (nm == "T") { text = base64_decode(curtxt); } else if (nm == "T2") { text2 = base64_decode(curtxt); } else if (nm == "S") { slack = atoi(curtxt.c_str()); } else if (nm == "C") { SearchDataClause *c; if (whatclause == "AND" || whatclause.empty()) { c = new SearchDataClauseSimple(SCLT_AND, text, field); c->setexclude(exclude); } else if (whatclause == "OR") { c = new SearchDataClauseSimple(SCLT_OR, text, field); c->setexclude(exclude); } else if (whatclause == "RG") { c = new SearchDataClauseRange(text, text2, field); c->setexclude(exclude); } else if (whatclause == "EX") { // Compat with old hist. We don't generete EX // (SCLT_EXCL) anymore it's replaced with OR + exclude // flag c = new SearchDataClauseSimple(SCLT_OR, text, field); c->setexclude(true); } else if (whatclause == "FN") { c = new SearchDataClauseFilename(text); c->setexclude(exclude); } else if (whatclause == "PH") { c = new SearchDataClauseDist(SCLT_PHRASE, text, slack, field); c->setexclude(exclude); } else if (whatclause == "NE") { c = new SearchDataClauseDist(SCLT_NEAR, text, slack, field); c->setexclude(exclude); } else { LOGERR("Bad clause type [" << whatclause << "]\n"); contentsOk = false; return; } sd->addClause(c); whatclause = ""; text.clear(); field.clear(); slack = 0; exclude = false; } else if (nm == "D") { d = atoi(curtxt.c_str()); } else if (nm == "M") { m = atoi(curtxt.c_str()); } else if (nm == "Y") { y = atoi(curtxt.c_str()); } else if (nm == "DMI") { di.d1 = d; di.m1 = m; di.y1 = y; hasdates = true; } else if (nm == "DMA") { di.d2 = d; di.m2 = m; di.y2 = y; hasdates = true; } else if (nm == "MIS") { sd->setMinSize(atoll(curtxt.c_str())); } else if (nm == "MAS") { sd->setMaxSize(atoll(curtxt.c_str())); } else if (nm == "ST") { string types = curtxt.c_str(); vector vt; stringToTokens(types, vt); for (unsigned int i = 0; i < vt.size(); i++) sd->addFiletype(vt[i]); } else if (nm == "IT") { vector vt; stringToTokens(curtxt, vt); for (unsigned int i = 0; i < vt.size(); i++) sd->remFiletype(vt[i]); } else if (nm == "YD") { string d; base64_decode(curtxt, d); sd->addClause(new SearchDataClausePath(d)); } else if (nm == "ND") { string d; base64_decode(curtxt, d); sd->addClause(new SearchDataClausePath(d, true)); } else if (nm == "SD") { // Closing current search descriptor. Finishing touches... if (hasdates) sd->setDateSpan(&di); resetTemps(); isvalid = contentsOk; } currentText.clear(); return; } void characterData(const std::string &str) { currentText += str; } // The object we set up std::shared_ptr sd; bool isvalid{false}; bool contentsOk{true}; private: void resetTemps() { currentText = whatclause = ""; text.clear(); text2.clear(); field.clear(); slack = 0; d = m = y = di.d1 = di.m1 = di.y1 = di.d2 = di.m2 = di.y2 = 0; hasdates = false; exclude = false; } // Temporary data while parsing. std::string currentText; std::string whatclause; std::string field, text, text2; int slack; int d, m, y; DateInterval di; bool hasdates; bool exclude; }; std::shared_ptr SearchData::fromXML(const string& xml, bool verbose) { SDHXMLHandler handler(xml); if (!handler.Parse() || !handler.isvalid) { if (verbose) { LOGERR("SearchData::fromXML: parse failed for [" << xml << "]\n"); } return std::shared_ptr(); } return handler.sd; } } // namespace Rcl recoll-1.43.12/rcldb/rclabsfromtext.cpp0000644000175000017500000004461615121730573017314 0ustar dockesdockes/* Copyright (C) 2004-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include //#define LOGGER_LOCAL_LOGINC 3 #include "log.h" #include "rcldb.h" #include "rcldb_p.h" #include "rclquery.h" #include "rclquery_p.h" #include "textsplit.h" #include "hldata.h" #include "chrono.h" #include "unacpp.h" #include "rcldoc.h" #include "searchdata.h" using namespace std; #undef DEBUGABSTRACT #ifdef DEBUGABSTRACT #define LOGABS LOGINF #else #define LOGABS LOGDEB1 #endif // We now let plaintorich do the highlight tags insertions which is // wasteful because we have most of the information (but the perf hit // is small because it's only called on the output fragments, not on // the whole text). The highlight zone computation code has been left // around just in case I change my mind. #undef COMPUTE_HLZONES namespace Rcl { #ifndef NO_STD_REGEX //// Fragment cleanup // Chars we turn to spaces in the Snippets static const string cstr_nc("\n\r\x0c\\"); // Things that we don't want to repeat in a displayed snippet. // e.g. > > > > > > static const string punctcls("[-<>._+,#*=|]"); static const string punctRE = "(" + punctcls + " *)(" + punctcls + " *)+"; static std::regex fixfrag_re(punctRE); static const string punctRep{"$2"}; static string fixfrag(const string& infrag) { return std::regex_replace(neutchars(infrag, cstr_nc), fixfrag_re, punctRep); } #else static string fixfrag(const string& infrag) { return infrag; } #endif // Fragment descriptor. A fragment is a text area with one or several // matched terms and some context. It is ranked according to the // matched term weights and the near/phrase matches get a boost. struct MatchFragment { // Start/End byte offsets of fragment in the document text size_t start; size_t stop; // Weight for this fragment (bigger better) double coef; #ifdef COMPUTE_HLZONES // Highlight areas (each is one or several contiguous match // terms). Because a fragment extends around a match, there // can be several contiguous or separate matches in a given // fragment. vector> hlzones; #endif // Position of the first matched term (for page number computations) size_t hitpos; // "best term" for this match (e.g. for use as ext app search term) string term; int line; MatchFragment(size_t sta, size_t sto, double c, #ifdef COMPUTE_HLZONES vector>& hl, #endif size_t pos, string& trm, int ln) : start(sta), stop(sto), coef(c), hitpos(pos), line(ln) { #ifdef COMPUTE_HLZONES hlzones.swap(hl); #endif term.swap(trm); } }; // Text splitter for finding the match areas in the document text. class TextSplitABS : public TextSplit { public: TextSplitABS(const string& rawtext, const vector& matchTerms, const HighlightData& hdata, unordered_map& wordcoefs, unsigned int ctxwords, Flags flags, unsigned int maxterms) : TextSplit(flags), m_rawtext(rawtext), m_terms(matchTerms.begin(), matchTerms.end()), m_hdata(hdata), m_wordcoefs(wordcoefs), m_ctxwords(ctxwords), maxtermcount(maxterms) { // Take note of the group (phrase/near) terms because we need // to compute the position lists for them. for (const auto& tg : hdata.index_term_groups) { if (tg.kind != HighlightData::TermGroup::TGK_TERM) { for (const auto& group : tg.orgroups) { for (const auto& term: group) { m_gterms.insert(term); } } } } } virtual void newline(size_t) override { m_line++; } // Accept a word and its position. If the word is a matched term, // add/update fragment definition. virtual bool takeword(const std::string& term, size_t pos, size_t bts, size_t bte) override { //LOGABS("abs:takeword: [" << term << "] pos " << pos << " bpos: "<< bts << ":" << bte << "\n"); // Limit time taken with monster documents. The resulting abstract will be incorrect or // inexistent, but this is better than taking forever (the default cutoff value comes from // the snippetMaxPosWalk configuration parameter, and is 10E6) if (maxtermcount && termcount++ > maxtermcount) { LOGINF("Rclabsfromtext: stopping because maxtermcount reached: "< maxtermcount / 100) { LOGINF("Rclabsfromtext: stopping: max fragments count: " << maxtermcount/100 << "\n"); retflags |= ABSRES_TRUNC; return false; } // Remember recent past m_prevterms.push_back({bts, bte}); if (m_prevterms.size() > m_ctxwords+1) { m_prevterms.pop_front(); } string dumb; if (o_index_stripchars) { if (!unacmaybefold(term, dumb, UNACOP_UNACFOLD)) { LOGINFO("abstract: unac failed for [" << term << "]\n"); return true; } } else { dumb = term; } if (m_terms.find(dumb) != m_terms.end()) { PRETEND_USE(m_rawtext); // This word is a search term. Extend or create fragment LOGABS("match: [" << dumb << "] pos " << pos << " bpos " << bts << ":" << bte << " remainingWords " << m_remainingWords << "\n"); LOGABS("Match text " << m_rawtext.substr(bts, bte - bts) << "\n"); double coef = m_wordcoefs[dumb]; if (!m_remainingWords) { // No current fragment. Start one m_curhitpos = baseTextPosition + pos; m_curfrag.first = m_prevterms.front().first; m_curfrag.second = m_prevterms.back().second; #ifdef COMPUTE_HLZONES m_curhlzones.push_back(pair(bts, bte)); #endif m_curterm = term; m_curtermcoef = coef; m_curfragline = m_line; } else { LOGABS("Extending current fragment: "< "<(bts, bte)); } #endif if (coef > m_curtermcoef) { m_curterm = term; m_curtermcoef = coef; } } #ifdef COMPUTE_HLZONES m_prevwordhit = true; #endif m_curfragcoef += coef; m_remainingWords = m_ctxwords + 1; if (m_extcount > 5) { // Limit expansion of contiguous fragments (this is to avoid common terms in search // causing long heavyweight meaningless fragments. Also, limit length). m_remainingWords = 1; m_extcount = 0; } // If the term is part of a near/phrase group, update its positions list if (m_gterms.find(dumb) != m_gterms.end()) { // Term group (phrase/near) handling m_plists[dumb].push_back(pos); m_gpostobytes[pos] = {bts, bte}; LOGABS("Recorded bpos for pos " << pos << ": " << bts << " " << bte << "\n"); } } #ifdef COMPUTE_HLZONES else { // Not a matched term m_prevwordhit = false; } #endif if (m_remainingWords) { // Fragment currently open. Time to close ? m_remainingWords--; m_curfrag.second = bte; if (m_remainingWords == 0) { LOGABS("FRAGMENT: from byte " << m_curfrag.first << " to byte " << m_curfrag.second << "\n"); LOGABS("FRAGMENT TEXT [" << m_rawtext.substr( m_curfrag.first, m_curfrag.second-m_curfrag.first) << "]\n"); // We used to not push weak fragments if we had a lot already. This can cause // problems if the fragments we drop are actually group fragments (which have not // got their boost yet). The right cut value is difficult to determine, because the // absolute values of the coefs depend on many things (index size, etc.) The old // test was if (m_totalcoef < 5.0 || m_curfragcoef >= 1.0) We now just avoid // creating a monster by testing the current fragments count at the top of the // function m_fragments.push_back(MatchFragment(m_curfrag.first, m_curfrag.second, m_curfragcoef, #ifdef COMPUTE_HLZONES m_curhlzones, #endif m_curhitpos, m_curterm, m_curfragline)); m_totalcoef += m_curfragcoef; m_curfragcoef = 0.0; m_curtermcoef = 0.0; } } return true; } const vector& getFragments() { return m_fragments; } // After the text is split: use the group terms positions lists to // find the group matches. void updgroups() { // Possibly store current incomplete fragment (if match was // close to the end of the text, so we did not close it): if (m_curtermcoef != 0.0) { m_fragments.push_back(MatchFragment(m_curfrag.first, m_curfrag.second, m_curfragcoef, #ifdef COMPUTE_HLZONES m_curhlzones, #endif m_curhitpos, m_curterm, m_curfragline)); m_totalcoef += m_curfragcoef; m_curfragcoef = 0.0; m_curtermcoef = 0.0; } LOGDEB("TextSplitABS: stored total " << m_fragments.size() << " fragments" << "\n"); vector tboffs; // Look for matches to PHRASE and NEAR term groups and finalize the matched regions list // (sort it by increasing start then decreasing length). for (unsigned int i = 0; i < m_hdata.index_term_groups.size(); i++) { if (m_hdata.index_term_groups[i].kind != HighlightData::TermGroup::TGK_TERM) { matchGroup(m_hdata, i, m_plists, m_gpostobytes, tboffs); } } // Sort the fragments by increasing start and decreasing width std::sort(m_fragments.begin(), m_fragments.end(), [](const MatchFragment& a, const MatchFragment& b) -> bool { if (a.start != b.start) return a.start < b.start; return a.stop - a.start > b.stop - a.stop; } ); // Sort the group regions by increasing start and decreasing width. std::sort(tboffs.begin(), tboffs.end(), [](const GroupMatchEntry& a, const GroupMatchEntry& b) -> bool { if (a.offs.first != b.offs.first) return a.offs.first < b.offs.first; return a.offs.second > b.offs.second; } ); // Give a boost to fragments which contain a group match (phrase/near), they are dear to the // user's heart. Lists are sorted, so we never go back in the fragment list (can always // start the search where we previously stopped). if (m_fragments.empty()) { return; } auto fragit = m_fragments.begin(); for (const auto& grpmatch : tboffs) { LOGABS("LOOKING FOR FRAGMENT: group: " << grpmatch.offs.first << "-" << grpmatch.offs.second<<" curfrag "<start<<"-"<stop<<"\n"); while (fragit->stop < grpmatch.offs.first) { fragit++; if (fragit == m_fragments.end()) { return; } } if (fragit->start <= grpmatch.offs.first && fragit->stop >= grpmatch.offs.second) { // grp in frag fragit->coef += 10.0; } } return; } int getretflags() { return retflags; } private: const string& m_rawtext; // Past terms because we need to go back for context before a hit deque> m_prevterms; // Data about the fragment we are building pair m_curfrag{0,0}; int m_curfragline{0}; double m_curfragcoef{0.0}; unsigned int m_remainingWords{0}; unsigned int m_extcount{0}; #ifdef COMPUTE_HLZONES vector> m_curhlzones; bool m_prevwordhit{false}; #endif // Current sum of fragment weights double m_totalcoef{0.0}; // Position of 1st term match (for page number computations) size_t m_curhitpos{0}; // "best" term string m_curterm; double m_curtermcoef{0.0}; int m_line{1}; // Group terms, extracted from m_hdata unordered_set m_gterms; // group/near terms word positions. unordered_map> m_plists; unordered_map > m_gpostobytes; // Input unordered_set m_terms; const HighlightData& m_hdata; unordered_map& m_wordcoefs; unsigned int m_ctxwords; // Result: begin and end byte positions of query terms/groups in text vector m_fragments; unsigned int termcount{0}; unsigned int maxtermcount{0}; int retflags{0}; }; int Query::Native::abstractFromText( Rcl::Db::Native *ndb, Xapian::docid docid, const vector& matchTerms, const multimap> byQ, double, int ctxwords, unsigned int maxtotaloccs, vector& vabs, Chrono& chron, bool sortbypage ) { PRETEND_USE(chron); LOGABS("abstractFromText: entry: " << chron.millis() << "mS\n"); std::string udi; if (!ndb->docidToUdi(docid, udi)) { LOGERR("Query::Native::abstractFromText: can't retrieve udi\n"); return ABSRES_ERROR; } string rawtext; if (!ndb->getRawText(udi, docid, rawtext)) { LOGDEB0("abstractFromText: can't fetch text\n"); return ABSRES_ERROR; } LOGABS("abstractFromText: got raw text: size "< wordcoefs; for (const auto& mment : byQ) { for (const auto& word : mment.second) { wordcoefs[word] = mment.first; } } // Note: getTerms() was already called by qualityTerms, so this is // a bit wasteful. I guess that the performance impact is // negligible though. To be checked ? We need the highlightdata for the // phrase/near groups. HighlightData hld; if (m_q->m_sd) { m_q->m_sd->getTerms(hld); } LOGABS("abstractFromText: getterms: " << chron.millis() << "mS\n"); TextSplitABS splitter(rawtext, matchTerms, hld, wordcoefs, ctxwords, TextSplit::TXTS_NONE, m_q->m_snipMaxPosWalk); splitter.text_to_words(rawtext); LOGABS("abstractFromText: text_to_words: " << chron.millis() << "mS\n"); splitter.updgroups(); // Sort the fragments by decreasing weight const vector& res1 = splitter.getFragments(); vector result(res1.begin(), res1.end()); if (sortbypage) { std::sort(result.begin(), result.end(), [](const MatchFragment& a, const MatchFragment& b) -> bool { return a.hitpos < b.hitpos; } ); } else { std::sort(result.begin(), result.end(), [](const MatchFragment& a, const MatchFragment& b) -> bool { return a.coef > b.coef; } ); } vector vpbreaks; ndb->getPagePositions(docid, vpbreaks); // Build the output snippets array by merging the fragments, their // main term and the page positions. unsigned int count = 0; for (const auto& entry : result) { string frag(fixfrag(rawtext.substr(entry.start, entry.stop - entry.start))); #ifdef COMPUTE_HLZONES // This would need to be modified to take tag parameters // instead of the const strings static const string starthit(""); static const string endhit(""); size_t inslen = 0; for (const auto& hlzone: entry.hlzones) { frag.replace(hlzone.first - entry.start + inslen, 0, starthit); inslen += starthit.size(); frag.replace(hlzone.second - entry.start + inslen, 0, endhit); inslen += endhit.size(); } #endif int page = 0; if (vpbreaks.size() > 1) { page = ndb->getPageNumberForPosition(vpbreaks, static_cast(entry.hitpos)); if (page < 0) page = 0; } LOGDEB0("=== FRAGMENT: p. " << page << " Coef: " << entry.coef << ": " << frag << "\n"); vabs.push_back(Snippet(page, frag, entry.line).setTerm(entry.term)); if (count++ >= maxtotaloccs) break; } return ABSRES_OK | splitter.getretflags(); } } recoll-1.43.12/rcldb/xmacros.h0000644000175000017500000000531415121730573015366 0ustar dockesdockes/* Copyright (C) 2007 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _xmacros_h_included_ #define _xmacros_h_included_ // Generic Xapian exception catching code. We do this quite often, // and I have no idea how to do this except for a macro #define XCATCHERROR(MSG) \ catch (const Xapian::Error &e) { \ MSG = e.get_msg(); \ if (MSG.empty()) MSG = "Empty error message"; \ } catch (const std::string &s) { \ MSG = s; \ if (MSG.empty()) MSG = "Empty error message"; \ } catch (const char *s) { \ MSG = s; \ if (MSG.empty()) MSG = "Empty error message"; \ } catch (std::exception& ex) { \ MSG = std::string("Caught std::exception: ") + ex.what(); \ } catch (...) { \ MSG = std::string("Caught unknown exception??"); \ } #define XAPTRY(STMTTOTRY, XAPDB, ERSTR) \ for (int tries = 0; tries < 2; tries++) { \ try { \ STMTTOTRY; \ ERSTR.erase(); \ break; \ } catch (const Xapian::DatabaseModifiedError &e) { \ ERSTR = e.get_msg(); \ XAPDB.reopen(); \ continue; \ } XCATCHERROR(ERSTR); \ break; \ } #endif recoll-1.43.12/rcldb/rclquery.h0000644000175000017500000001332515121730573015561 0ustar dockesdockes/* Copyright (C) 2008 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _rclquery_h_included_ #define _rclquery_h_included_ #include #include #include class PlainToRich; namespace Rcl { class Db; class Doc; class SearchData; enum abstract_result { ABSRES_ERROR = 0, ABSRES_OK = 1, ABSRES_TRUNC = 2, ABSRES_TERMMISS = 4 }; // Snippet data out of makeDocAbstract class Snippet { public: Snippet(int page, const std::string& snip, int ln = 0) : page(page), snippet(snip), line(ln) {} Snippet& setTerm(const std::string& trm) { term = trm; return *this; } int page{0}; std::string snippet; int line{0}; // This is the "best term" in the fragment, as determined by the qualityTerms() coef. It's only // used as a search term when launching an external app. We don't even try to use NEAR/PHRASE // groups for this, there are many cases where this would fail. std::string term; }; /** * An Rcl::Query is a question (SearchData) applied to a * database. Handles access to the results. Somewhat equivalent to a * cursor in an rdb. * */ class Query { public: Query(Db *db); ~Query(); Query(const Query &) = delete; Query& operator=(const Query &) = delete; /** Get explanation about last error */ std::string getReason() const { return m_reason; } /** Choose sort order. Must be called before setQuery */ void setSortBy(const std::string& fld, bool ascending = true); const std::string& getSortBy() const { return m_sortField; } bool getSortAscending() const { return m_sortAscending; } /** Return or filter results with identical content checksum */ void setCollapseDuplicates(bool on) { m_collapseDuplicates = on; } /** Accept data describing the search and query the index. This can * be called repeatedly on the same object which gets reinitialized each * time. */ bool setQuery(std::shared_ptr q); /** Set the query fetch slice size. Set to high for bulk fetches */ void setqquantum(int q) { m_qquantum = q; } /** Get results count for current query. * * @param useestimate Use get_matches_estimated() if true, else * get_matches_lower_bound() * @param checkatleast checkatleast parameter to get_mset(). Use -1 for * full scan. */ int getResCnt(int checkatleast=1000, bool useestimate=false); /** Get document at rank i in current query results. */ bool getDoc(int i, Doc &doc, bool fetchtext = false); /** Get possibly expanded list of query terms */ bool getQueryTerms(std::vector& terms); bool getDocTerms(const Doc& doc, std::vector>& terms); /** Build synthetic abstract for document, extracting chunks relevant for * the input query. This uses index data only (no access to the file) */ // Returned as a vector of Snippet objects int makeDocAbstract(const Doc &doc, PlainToRich *plaintorich, std::vector& abstract, int maxoccs= -1, int ctxwords= -1,bool sortbypage=false); // Returned as a vector of text snippets. This just calls the above with default parameters and // does a bit of formatting (page/line numbers if applicable). bool makeDocAbstract(const Doc &doc, PlainToRich *plaintorich, std::vector& abstract); /** Choose most interesting term and return the page number for its first match * @param term returns the chosen term * @return page number or -1 if term not found or other issue * could be done and saved while we compute the abstracts, quite a lot of waste here. */ int getFirstMatchPage(const Doc &doc, std::string& term); /** Retrieve a reference to the searchData we are using */ std::shared_ptr getSD() { return m_sd; } /** Expand query to look for documents like the one passed in */ std::vector expand(const Doc &doc); /** Return the Db we're set for */ Db *whatDb() const { return m_db; } /* make this public for access from embedded Db::Native */ class Native; Native *m_nq; private: std::string m_reason; // Error explanation Db *m_db; void *m_sorter{nullptr}; std::string m_sortField; bool m_sortAscending{true}; bool m_collapseDuplicates{false}; int m_resCnt{-1}; std::shared_ptr m_sd; int m_snipMaxPosWalk{1000000}; // Mset size. When a document is requested, we actually fetch a slice. Bigger slice: slower for // a single doc and more memory use, but faster for bulk retrievals. The default of 100 is a // reasonable compromise. // Note: times for retrieving (multiple times)all docs from a sample // 25k docs db (q: mime:*) // qquantum: 10 50 100 150 200 1000 // Seconds: 21 8.5 6.7 6.4 5.8 6.0 int m_qquantum{100}; }; } #endif /* _rclquery_h_included_ */ recoll-1.43.12/rcldb/expansiondbs.h0000644000175000017500000000431415121730573016406 0ustar dockesdockes/* Copyright (C) 2012 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _EXPANSIONDBS_H_INCLUDED_ #define _EXPANSIONDBS_H_INCLUDED_ #include #include #include #include "unacpp.h" #include "synfamily.h" /** Specialization and overall creation code for the term expansion mechanism * defined in synfamily.h */ namespace Rcl { /** A Capitals/Diacritics removal functor for using with * XapComputableSynFamMember. The input term transformation always uses * UNACFOLD. Post-expansion filtering uses either UNAC or FOLD */ class SynTermTransUnac : public SynTermTrans { public: /** Constructor * @param op defines if we remove diacritics, case or both */ SynTermTransUnac(UnacOp op) : m_op(op) {} virtual ~SynTermTransUnac() = default; virtual std::string name() { std::string nm("Unac: "); if (m_op & UNACOP_UNAC) nm += "UNAC "; if (m_op & UNACOP_FOLD) nm += "FOLD "; return nm; } virtual std::string operator()(const std::string& in) { std::string out; unacmaybefold(in, out, m_op); LOGDEB2("SynTermTransUnac(" << m_op << "): in [" << in << "] out [" << out << "]\n"); return out; } UnacOp m_op; }; /** Walk the Xapian term list and create all the expansion dbs in one go. */ extern bool createExpansionDbs(Xapian::WritableDatabase& wdb, const std::vector& langs); } #endif /* _EXPANSIONDBS_H_INCLUDED_ */ recoll-1.43.12/rcldb/expansiondbs.cpp0000644000175000017500000001326015121730573016741 0ustar dockesdockes/* Copyright (C) 2005 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "expansiondbs.h" #include #include #include "log.h" #include "utf8iter.h" #include "smallut.h" #include "chrono.h" #include "textsplit.h" #include "xmacros.h" #include "rcldb.h" #include "rcldb_p.h" #include "stemdb.h" using namespace std; namespace Rcl { /** * Create all expansion dbs used to transform user input term to widen a query * We use Xapian synonyms subsets to store the expansions. */ bool createExpansionDbs(Xapian::WritableDatabase& wdb, const vector& langs) { LOGDEB("StemDb::createExpansionDbs: languages: " < stemdbs; // Note: tried to make this to work with stack-allocated objects, couldn't. // Looks like a bug in copy constructors somewhere, can't guess where vector > stemmers; for (unsigned int i = 0; i < langs.size(); i++) { stemmers.push_back(std::shared_ptr (new SynTermTransStem(langs[i]))); stemdbs.push_back( XapWritableComputableSynFamMember(wdb, synFamStem, langs[i], stemmers.back().get())); stemdbs.back().recreate(); } // Unaccented stem dbs vector unacstemdbs; // We can reuse the same stemmer pointers, the objects are stateless. if (!o_index_stripchars) { for (unsigned int i = 0; i < langs.size(); i++) { unacstemdbs.push_back( XapWritableComputableSynFamMember( wdb, synFamStemUnac, langs[i], stemmers.back().get())); unacstemdbs.back().recreate(); } } SynTermTransUnac transunac(UNACOP_UNACFOLD); XapWritableComputableSynFamMember diacasedb(wdb, synFamDiCa, "all", &transunac); if (!o_index_stripchars) diacasedb.recreate(); Xapian::TermIterator it = wdb.allterms_begin(); // We'd want to skip to the first non-prefixed term, but this is a bit // complicated, so we just jump over most of the prefixed term and then // skip the rest one by one. it.skip_to(wrap_prefix("Z")); for ( ;it != wdb.allterms_end(); it++) { const string term{*it}; if (has_prefix(term)) continue; // Detect and skip CJK and other ngrammed terms. Utf8Iter utfit(term); if (utfit.eof()) // Empty term?? Seems to happen. continue; if (TextSplit::noStemming(*utfit)) { // LOGDEB("stemskipped: Skipping CJK\n"); continue; } string lower = term; // If the index is raw, compute the case-folded term which // is the input to the stem db, and add a synonym from the // stripped term to the cased and accented one, for accent // and case expansion at query time if (!o_index_stripchars) { unacmaybefold(term, lower, UNACOP_FOLD); diacasedb.addSynonym(term); } // Dont' apply stemming to terms which don't look like // natural language words. if (!Db::isSpellingCandidate(term)) { LOGDEB1("createExpansionDbs: skipped: [" << term << "]\n"); continue; } // Create stemming synonym for every language. The input is the // lowercase accented term for (unsigned int i = 0; i < langs.size(); i++) { stemdbs[i].addSynonym(lower); } // For a raw index, also maybe create a stem expansion for // the unaccented term. While this may be incorrect, it is // also necessary for searching in a diacritic-unsensitive // way on a raw index if (!o_index_stripchars) { string unac; unacmaybefold(lower, unac, UNACOP_UNAC); if (unac != lower) { for (unsigned int i = 0; i < langs.size(); i++) { unacstemdbs[i].addSynonym(unac); } } } } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("Db::createStemDb: map build failed: " << ermsg << "\n"); return false; } LOGDEB("StemDb::createExpansionDbs: done: " << cron.secs() << " S\n"); return true; } } recoll-1.43.12/rcldb/searchdata.h0000644000175000017500000005404515130147330016007 0ustar dockesdockes/* Copyright (C) 2004-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _SEARCHDATA_H_INCLUDED_ #define _SEARCHDATA_H_INCLUDED_ /** * Structures to hold data coming almost directly from the GUI * and handle its translation to Xapian queries. * This is not generic code, it reflects the choices made for the user * interface, and it also knows some specific of recoll's usage of Xapian * (ie: term prefixes) */ #include #include #include #include #include #include "rcldb.h" #include "smallut.h" #include "hldata.h" #include "rclutil.h" class RclConfig; class AdvSearch; extern const std::string cstr_minwilds; namespace Rcl { /** Search clause types */ enum SClType { SCLT_AND, SCLT_OR, SCLT_FILENAME, SCLT_PHRASE, SCLT_NEAR, SCLT_PATH, SCLT_RANGE, SCLT_SUB, }; class SearchDataClause; class SearchDataClauseDist; class SdataWalker; /** A SearchData object represents a Recoll user query, to be translated into a Xapian query tree. This could probably better called a 'question'. This is a mostly a list of SearchDataClause objects (possibly sublists) combined through either OR or AND. Clauses either reflect user entry in a query field: some raw text, a clause type (AND/OR/NEAR etc.), possibly a distance, or are the result of parsing query language input. A clause can also point to another SearchData representing a subquery. The content of each clause when added may not be fully parsed yet (e.g. may come directly from a GUI field). It will be parsed and may be translated to several queries in the Xapian sense, for example several terms and phrases as would result from ["this is a phrase" term1 term2] . This is why the clauses also have an AND/OR/... type. They are an intermediate form between the primary user input and the final Xapian::Query tree. For example, a phrase clause could be added either explicitly or using double quotes: {SCLT_PHRASE, [this is a phrase]} or as {SCLT_XXX, ["this is a phrase"]} For natural text clauses (not file names or value range queries), the first step in the processing towards the Xapian query always transforms the text into possible index terms: capitals and diacritics stripped or not, depending on the index type. */ class SearchData { public: SearchData(SClType tp, const std::string& stemlang) : m_tp(tp), m_stemlang(stemlang) { if (m_tp != SCLT_OR && m_tp != SCLT_AND) m_tp = SCLT_OR; } SearchData() : m_tp(SCLT_AND) { } ~SearchData(); SearchData(const SearchData &) = delete; SearchData& operator=(const SearchData&) = delete; /** Is there anything but a file name search in here ? */ bool fileNameOnly(); /** Do we have wildcards anywhere apart from filename searches ? */ bool haveWildCards() {return m_haveWildCards;} /** Translate to Xapian query. rcldb knows about the void* */ bool toNativeQuery(Rcl::Db &db, void *); /** We become the owner of cl and will delete it */ bool addClause(SearchDataClause *cl); /** If this is a simple query (one field only, no distance clauses), * add phrase made of query terms to query, so that docs containing the * user terms in order will have higher relevance. This must be called * before toNativeQuery(). * @param threshold: don't use terms more frequent than the value * (proportion of docs where they occur) */ bool maybeAddAutoPhrase(Rcl::Db &db, double threshold); const std::string& getStemLang() {return m_stemlang;} void setMinSize(int64_t size) {m_minSize = size;} void setMaxSize(int64_t size) {m_maxSize = size;} enum SubdocSpec {SUBDOC_ANY = -1, SUBDOC_NO = 0, SUBDOC_YES = 1}; void setSubSpec(int spec) { switch (spec) { case SUBDOC_ANY: case SUBDOC_NO: case SUBDOC_YES: m_subspec = spec; } } int getSubSpec() {return m_subspec;} /** Set date span for filtering results */ void setDateSpan(DateInterval *dip) {m_dates = *dip; m_haveDates = true;} #ifdef EXT4_BIRTH_TIME /** Set brtime span for filtering results */ void setBrDateSpan(DateInterval *dip) {m_brdates = *dip; m_haveBrDates = true;} #endif /** Add file type for filtering results */ void addFiletype(const std::string& ft) {m_filetypes.push_back(ft);} /** Add file type to not wanted list */ void remFiletype(const std::string& ft) {m_nfiletypes.push_back(ft);} /** Retrieve error description */ std::string getReason() {return m_reason;} /** Return term expansion data. Mostly used by caller for highlighting */ void getTerms(HighlightData& hldata) const; /** * Get/set the description field which is retrieved from xapian after * initializing the query. It is stored here for usage in the GUI. */ std::string getDescription() {return m_description;} void setDescription(const std::string& d) {m_description = d;} /** Return an XML version of the contents (e.g. for storage in search history by the GUI) * * * * AND|OR * * [] * AND|OR|FN|PH|NE * [base64data] * [base64data] * slack * * * [base64 path] * [base64 path] * * * 162014 <--! datemin --> * 3062014 <--! datemax --> * minsize * maxsize * space-sep mtypes * space-sep mtypes * * */ std::string asXML(); /** Convert back the XML to SearchData */ static std::shared_ptr fromXML(const std::string& xml, bool verbose = true); void setTp(SClType tp) { m_tp = tp; } SClType getTp() { return m_tp; } void setNoWildExp(bool x) { m_nowildexp = x; } bool getNoWildExp() { return m_nowildexp; } void setMaxExpand(int max) { m_softmaxexpand = max; } bool getAutoDiac() {return m_autodiacsens;} bool getAutoCase() {return m_autocasesens;} int getMaxExp() {return m_maxexp;} int getMaxCl() {return m_maxcl;} int getSoftMaxExp() {return m_softmaxexpand;} // Recursively dump the tree to o void rdump(std::ostream& o, bool asxml=false); // Print out my data only void dump(std::ostream& o, const std::string& tabs, bool asxml=false) const; void closeDump(std::ostream& o, const std::string& tabs, bool asxml=false) const; friend class ::AdvSearch; friend bool sdataWalk(SearchData*, SdataWalker&); private: // Combine type. Only SCLT_AND or SCLT_OR here SClType m_tp; // The clauses std::vector m_query; // Restricted set of filetypes if not empty. std::vector m_filetypes; // Excluded set of file types if not empty std::vector m_nfiletypes; // Autophrase if set. Can't be part of the normal chain because // it uses OP_AND_MAYBE std::shared_ptr m_autophrase; // Special stuff produced by input which looks like a clause but means // something else (date, size specs, etc.) bool m_haveDates{false}; DateInterval m_dates; // Restrict to date interval // Note we don't use ifdef EXT4_BIRTH_TIME here because it would affect the unofficial // librecollABI and force configuring the krunner and KIO worker in consequence. bool m_haveBrDates{false}; DateInterval m_brdates; // Restrict to date interval int64_t m_maxSize{-1}; int64_t m_minSize{-1}; // Filtering for subdocs: -1:any, 0: only free-standing, 1: only subdocs int m_subspec{SUBDOC_ANY}; bool m_nowildexp{false}; // Printable expanded version of the complete query, retrieved/set // from rcldb after the Xapian::setQuery() call std::string m_description; // Error diag std::string m_reason; bool m_haveWildCards{false}; std::string m_stemlang; // Parameters set at the start of ToNativeQuery because they need // an rclconfig. Actually this does not make sense and it would be // simpler to just pass an rclconfig to the constructor; bool m_autodiacsens{false}; bool m_autocasesens{true}; int m_maxexp{10000}; int m_maxcl{100000}; // Parameters which are not part of the main query data but may influence // translation in special cases. // Maximum TermMatch (e.g. wildcard) expansion. This is normally set // from the configuration with a high default, but may be set to a lower // value during "find-as-you-type" operations from the GUI int m_softmaxexpand{-1}; // Collapse bogus subqueries generated by the query parser, mostly // so that we can check if this is an autophrase candidate (else // Xapian will do it anyway) void simplify(); bool expandFileTypes(Rcl::Db &db, std::vector& exptps); bool clausesToQuery(Rcl::Db &db, SClType tp, std::vector& query, std::string& reason, void *d); }; class SearchDataClause { public: enum Modifier {SDCM_NONE=0, SDCM_NOSTEMMING=0x1, SDCM_ANCHORSTART=0x2, SDCM_ANCHOREND=0x4, SDCM_CASESENS=0x8, SDCM_DIACSENS=0x10, SDCM_NOTERMS=0x20, // Don't include terms for highlighting SDCM_NOSYNS = 0x40, // Don't perform synonym expansion // Aargh special case. pathelts are case/diac-sensitive // even in a stripped index SDCM_PATHELT = 0x80, SDCM_FILTER = 0x100, // Terms inside phrases are not expanded if this is not set (by 'x' modifier) SDCM_EXPANDPHRASE = 0x200, SDCM_NOWILDEXP = 0x400, }; enum Relation {REL_CONTAINS, REL_EQUALS, REL_LT, REL_LTE, REL_GT, REL_GTE}; SearchDataClause(SClType tp) : m_tp(tp), m_parentSearch(nullptr), m_haveWildCards(0), m_modifiers(SDCM_NONE), m_weight(1.0), m_exclude(false), m_rel(REL_CONTAINS) {} virtual ~SearchDataClause() = default; SearchDataClause(const SearchDataClause &) = default; SearchDataClause& operator=(const SearchDataClause&) = default; virtual SearchDataClause* clone() = 0; virtual bool toNativeQuery(Rcl::Db &db, void *) = 0; bool isFileName() const {return m_tp == SCLT_FILENAME ? true: false;} virtual std::string getReason() const {return m_reason;} virtual void getTerms(HighlightData&) const {} SClType getTp() const { return m_tp; } void setTp(SClType tp) { m_tp = tp; } void setParent(SearchData *p) { m_parentSearch = p; } std::string getStemLang() { return (m_modifiers & SDCM_NOSTEMMING) || nullptr == m_parentSearch ? std::string() : m_parentSearch->getStemLang(); } bool getAutoDiac() { return m_parentSearch ? m_parentSearch->getAutoDiac() : false; } bool getAutoCase() { return m_parentSearch ? m_parentSearch->getAutoCase() : true; } bool getNoWildExp() { if (m_modifiers & SDCM_NOWILDEXP) return true; return m_parentSearch ? m_parentSearch->getNoWildExp() : false; } int getMaxExp() { return m_parentSearch ? m_parentSearch->getMaxExp() : 10000; } size_t getMaxCl() { return m_parentSearch ? m_parentSearch->getMaxCl() : 100000; } int getSoftMaxExp() { return m_parentSearch ? m_parentSearch->getSoftMaxExp() : -1; } virtual void addModifier(Modifier mod) { m_modifiers = m_modifiers | mod; } virtual unsigned int getModifiers() { return m_modifiers; } virtual void setWeight(float w) { m_weight = w; } virtual bool getexclude() const { return m_exclude; } virtual void setexclude(bool onoff) { m_exclude = onoff; } virtual void setrel(Relation rel) { m_rel = rel; } virtual Relation getrel() { return m_rel; } virtual void dump(std::ostream& o, const std::string& tabs, bool asxml=false) const; friend class SearchData; protected: std::string m_reason; SClType m_tp; SearchData *m_parentSearch; bool m_haveWildCards; unsigned int m_modifiers; float m_weight; bool m_exclude; Relation m_rel; }; /** * "Simple" data clause with user-entered query text. This can include * multiple phrases and words, but no specified distance. */ class TermProcQ; class SearchDataClauseSimple : public SearchDataClause { public: SearchDataClauseSimple(SClType tp, const std::string& txt, const std::string& fld = std::string()) : SearchDataClause(tp), m_text(txt), m_field(fld), m_curcl(0) { m_haveWildCards = (txt.find_first_of(cstr_minwilds) != std::string::npos); } SearchDataClauseSimple(const std::string& txt, SClType tp) : SearchDataClause(tp), m_text(txt), m_curcl(0) { m_haveWildCards = (txt.find_first_of(cstr_minwilds) != std::string::npos); } virtual ~SearchDataClauseSimple() = default; virtual SearchDataClauseSimple *clone() override{ return new SearchDataClauseSimple(*this); } /** Translate to Xapian query */ virtual bool toNativeQuery(Rcl::Db &, void *) override; virtual void getTerms(HighlightData& hldata) const override { hldata.append(m_hldata); } virtual const std::string& gettext() const { return m_text; } virtual const std::string& getfield() const { return m_field; } virtual void setfield(const std::string& field) { m_field = field; } virtual void dump(std::ostream& o, const std::string& tabs, bool asxml=false) const override; friend class SearchDataVisitor; protected: std::string m_text; // Raw user entry text. std::string m_field; // Field specification if any HighlightData m_hldata; // Current count of Xapian clauses, to check against expansion limit size_t m_curcl; bool processUserString(Rcl::Db &db, const std::string &iq, std::string &ermsg, std::string& pbterm, void* pq, int slack = 0, bool useNear = false); bool expandTerm(Rcl::Db &db, std::string& ermsg, int mods, const std::string& term, std::vector& exp, std::string& sterm, const std::string& prefix, std::vector* multiwords = nullptr); // After splitting entry on whitespace: process non-phrase element void processSimpleSpan(Rcl::Db &db, std::string& ermsg, const std::string& span, int mods, void *pq); // Process phrase/near element void processPhraseOrNear(Rcl::Db &db, std::string& ermsg, TermProcQ *splitData, int mods, void *pq, bool useNear, int slack); }; class SearchDataClauseRange : public SearchDataClauseSimple { public: SearchDataClauseRange(const std::string& t1, const std::string& t2, const std::string& fld = std::string()) : SearchDataClauseSimple(SCLT_RANGE, t1, fld), m_t2(t2) {} // This is for 'upgrading' a clauseSimple with eq/gt/lt... rel to // a range. Either of t1 or t2 or both can be set to the original // text, which is why they are passed as separate parameters SearchDataClauseRange(const SearchDataClauseSimple& cl, const std::string& t1, const std::string& t2) : SearchDataClauseSimple(cl) { m_text = t1; m_t2 = t2; } virtual ~SearchDataClauseRange() = default; virtual SearchDataClauseRange *clone() override { return new SearchDataClauseRange(*this); } virtual void dump(std::ostream& o, const std::string& tabs, bool asxml=false) const override; virtual const std::string& gettext2() const { return m_t2; } virtual bool toNativeQuery(Rcl::Db &db, void *) override; protected: std::string m_t2; }; /** * Filename search clause. This is special because term expansion is only * performed against the unsplit file name terms. * * There is a big advantage in expanding only against the * field, especially for file names, because this makes searches for * "*xx" much faster (no need to scan the whole main index). */ class SearchDataClauseFilename : public SearchDataClauseSimple { public: SearchDataClauseFilename(const std::string& txt) : SearchDataClauseSimple(txt, SCLT_FILENAME) { // File name searches don't count when looking for wild cards. m_haveWildCards = false; addModifier(SDCM_FILTER); } virtual ~SearchDataClauseFilename() = default; virtual SearchDataClauseFilename *clone() override { return new SearchDataClauseFilename(*this); } virtual bool toNativeQuery(Rcl::Db &, void *) override; virtual void dump(std::ostream& o, const std::string& tabs, bool asxml=false) const override; }; /** * Pathname filtering clause. This is special because of history: * - Pathname filtering used to be performed as a post-processing step * done with the url fields of doc data records. * - Then it was done as special phrase searchs on path elements prefixed * with XP. * Up to this point dir filtering data was stored as part of the searchdata * object, not in the SearchDataClause tree. Only one, then a list, * of clauses where stored, and they were always ANDed together. * * In order to allow for OR searching, dir clauses are now stored in a * specific SearchDataClause, but this is still special because the field has * non-standard phrase-like processing, reflected in index storage by * an empty element representing / (as "XP"). * * A future version should use a standard phrase with an anchor to the * start if the path starts with /. As this implies an index format * change but is no important enough to warrant it, this has to wait for * the next format change. */ class SearchDataClausePath : public SearchDataClauseSimple { public: SearchDataClausePath(const std::string& txt, bool excl = false) : SearchDataClauseSimple(SCLT_PATH, txt, "dir") { m_exclude = excl; m_haveWildCards = false; addModifier(SDCM_FILTER); } virtual ~SearchDataClausePath() = default; virtual SearchDataClausePath *clone() override { return new SearchDataClausePath(*this); } virtual bool toNativeQuery(Rcl::Db &, void *) override; virtual void dump(std::ostream& o, const std::string& tabs, bool asxml=false) const override; }; /** * A clause coming from a NEAR or PHRASE entry field. There is only one * std::string group, and a specified distance, which applies to it. */ class SearchDataClauseDist : public SearchDataClauseSimple { public: SearchDataClauseDist(SClType tp, const std::string& txt, int slack, const std::string& fld = std::string()) : SearchDataClauseSimple(tp, txt, fld), m_slack(slack) {} virtual ~SearchDataClauseDist() = default; virtual SearchDataClauseDist *clone() override { return new SearchDataClauseDist(*this); } virtual bool toNativeQuery(Rcl::Db &, void *) override; virtual int getslack() const { return m_slack; } virtual void setslack(int slack) { m_slack = slack; } virtual void dump(std::ostream& o, const std::string& tabs, bool asxml=false) const override; private: int m_slack; }; /** Subquery */ class SearchDataClauseSub : public SearchDataClause { public: SearchDataClauseSub(std::shared_ptr sub) : SearchDataClause(SCLT_SUB), m_sub(sub) {} virtual ~SearchDataClauseSub() = default; virtual SearchDataClauseSub *clone() override { return new SearchDataClauseSub(*this); } virtual bool toNativeQuery(Rcl::Db &db, void *p) override { bool ret = m_sub->toNativeQuery(db, p); if (!ret) m_reason = m_sub->getReason(); return ret; } virtual void getTerms(HighlightData& hldata) const override { m_sub.get()->getTerms(hldata); } virtual std::shared_ptr getSub() { return m_sub; } virtual void dump(std::ostream& o, const std::string& tabs, bool asxml=false) const override; protected: std::shared_ptr m_sub; }; class SdataWalker { public: virtual ~SdataWalker() {}; virtual bool clause(SearchDataClause*) { return true; } virtual bool sdata(SearchData*, bool) { return true; } }; bool sdataWalk(SearchData* top, SdataWalker& walker); } // Namespace Rcl #endif /* _SEARCHDATA_H_INCLUDED_ */ recoll-1.43.12/rcldb/stoplist.h0000644000175000017500000000277015121730573015576 0ustar dockesdockes/* Copyright (C) 2006 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _STOPLIST_H_INCLUDED_ #define _STOPLIST_H_INCLUDED_ #include #include namespace Rcl { /** * A StopList is just a bunch of strings read from a file. * * Some of the string may contain whitespace (that's for experimentation with * stop n-grams), so we take care of dquotes while reading the file. We also * lowercase and remove accents. The source file should be utf-8. */ class StopList { public: StopList() {} StopList(const std::string &filename) {setFile(filename);} bool setFile(const std::string &filename); bool isStop(const std::string &term) const; bool hasStops() const {return !m_stops.empty();} private: std::set m_stops; }; } #endif /* _STOPLIST_H_INCLUDED_ */ recoll-1.43.12/rcldb/rcldb.h0000644000175000017500000006322315121730573015003 0ustar dockesdockes/* Copyright (C) 2004-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _DB_H_INCLUDED_ #define _DB_H_INCLUDED_ #include #include #include #include // rcldb defines an interface for a 'real' text database. The current // implementation uses xapian only, and xapian-related code is in rcldb.cpp // If support was added for other backend, the xapian code would be moved in // rclxapian.cpp, another file would be created for the new backend, and the // configuration/compile/link code would be adjusted to allow choosing. There // is no plan for supporting multiple different backends. // // In no case does this try to implement a useful virtualized text-db interface // The main goal is simplicity and good matching to usage inside the recoll // user interface. In other words, this is not exhaustive or well-designed or // reusable. // // Unique Document Identifier: uniquely identifies a document in its // source storage (file system or other). Used for up to date checks // etc. "udi". Our user is responsible for making sure it's not too // big, cause it's stored as a Xapian term (< 150 bytes would be // reasonable) class RclConfig; class Aspell; struct FieldTraits; class SynGroups; namespace Rcl { class Doc; class StopList; // Omega compatible values. We leave a hole for future omega values. Not sure // it makes any sense to keep any level of omega compat given that the index // is incompatible anyway. enum value_slot { // Omega-compatible values: VALUE_LASTMOD = 0, // 4 byte big endian value - seconds since 1970. VALUE_MD5 = 1, // 16 byte MD5 checksum of original document. VALUE_SIZE = 2, // sortable_serialise() ////////// Recoll only: // Doc sig as chosen by app (ex: mtime+size VALUE_SIG = 10, }; class SearchData; class TermIter; class Query; /** Used for returning result lists for index terms matching some criteria */ class TermMatchEntry { public: TermMatchEntry() {} TermMatchEntry(const std::string& t, int f, int d) : term(t), wcf(f), docs(d) {} TermMatchEntry(const std::string& t) : term(t) {} bool operator==(const TermMatchEntry &o) const { return term == o.term; } bool operator<(const TermMatchEntry &o) const { return term < o.term; } std::string term; int wcf{0}; // Total count of occurrences within collection. int docs{0}; // Number of documents countaining term. }; /** Term match result list header: statistics and global info */ class TermMatchResult { public: TermMatchResult(bool strip_prefixes = false) : m_prefix_stripped(strip_prefixes) { clear(); } void clear() { entries.clear(); } bool m_prefix_stripped; // Term expansion std::vector entries; // If a field was specified, this is the corresponding index prefix std::string prefix; // Terms generated by spelling proximity: used to inform the user (transmitted through // Highlightdata) std::vector fromspelling; }; class DbStats { public: DbStats() {} // Index-wide stats unsigned int dbdoccount{0}; double dbavgdoclen{0}; size_t mindoclen{0}; size_t maxdoclen{0}; std::vector failedurls; /* Only set if requested */ }; /** * Wrapper class for the native database. */ class Db { public: // A place for things we don't want visible here. class Native; friend class Native; /* General stuff (valid for query or update) ****************************/ // @param cfp Configuration: we make a local copy. Db(const RclConfig *cfp); ~Db(); Db(const Db&) = delete; Db& operator=(const Db&) = delete; enum OpenMode {DbRO, DbUpd, DbTrunc}; enum OpenFlags {DbOFNone=0, DbOFNoTmpDb=0x1}; bool isWriteMode(OpenMode mode) { return mode == DbUpd || mode == DbTrunc; } enum OpenError {DbOpenNoError, DbOpenMainDb, DbOpenExtraDb}; bool open(OpenMode mode, OpenError *error = nullptr, int flags = 0); bool close(); bool isopen(); /** Get explanation about last error */ std::string getReason() const {return m_reason;} /** Return all possible stemmer names */ static std::vector getStemmerNames(); /** Return existing stemming databases */ std::vector getStemLangs(); /** Check if index stores the documents' texts. Only valid after open */ bool storesDocText(); /** Test word for spelling correction candidate: not too long, no special chars... * @param with_aspell test for use with aspell, else for xapian speller */ static bool isSpellingCandidate(const std::string& term, bool with_aspell=true); /** Return spelling suggestion */ bool getSpellingSuggestions(const std::string& word, std::vector& suggs); /* The next two, only for searchdata, should be somehow hidden */ /* Return configured stop words */ const StopList& getStopList() const {return *m_stops;} /* Field name to prefix translation (ie: author -> 'A') */ bool fieldToTraits(const std::string& fldname, const FieldTraits **ftpp, bool isquery = false); /* Update-related methods ******************************************/ /** Test if the db entry for the given udi is up to date. * * This is done by comparing the input and stored sigs. This is * used both when indexing and querying (before opening a document * using stale info). * * **This assumes that the udi pertains to the main index (idxi==0).** * * Side-effect when the db is writeable and the document up to * date: set the existence flag for the file document and all * subdocs if any (for later use by 'purge()') * * @param udi Unique Document Identifier (as chosen by indexer). * @param sig New signature (as computed by indexer). * @param xdocid[output] Non-zero if doc existed. Should be considered * as opaque, to be used for a possible later call to setExistingFlags() * Note that if inplaceReset is set, the return value is non-zero but not * an actual docid, it's only used as a flag in this case. * @param osig[output] old signature. */ bool needUpdate(const std::string &udi, const std::string& sig, unsigned int *xdocid = nullptr, std::string *osig = nullptr); /** * Unset the existence bits for the documents from a specific backend, and set them for all the * others. This must be called before indexing the backend, so that purge() can be called after * indexing and only affect the documents for the specified backend. * * @param backend the backend name (e.g. "FS", "BGL", ...) */ bool preparePurge(const std::string& backend); /** Set the existence flags for the document and its eventual subdocuments * * This can be called by the indexer after needUpdate() has returned true, * if the indexer does not wish to actually re-index (e.g.: the doc is * known to cause errors). */ void setExistingFlags(const std::string& udi, unsigned int docid); /** Indicate if we are doing a systematic reindex. This complements needUpdate() return */ bool inFullReset() {return m_inPlaceReset || m_mode == DbTrunc;} /** Add or update document identified by unique identifier. * @param config Config object to use. Can be the same as the member config * or a clone, to avoid sharing when called in multithread context. * @param udi the Unique Document Identifier is opaque to us. * Maximum size 150 bytes. * @param parent_udi the UDI for the container document. In case of complex * embedding, this is not always the immediate parent but the UDI for * the container file (which may be a farther ancestor). It is * used for purging subdocuments when a file ceases to exist and * to set the existence flags of all subdocuments of a container * that is found to be up to date. In other words, the * parent_udi is the UDI for the ancestor of the document which * is subject to needUpdate() and physical existence tests (some * kind of file equivalent). Empty for top-level docs. Should * probably be renamed container_udi. * @param doc container for document data. Should have been filled as * much as possible depending on the document type. * ** doc will be modified in a destructive way ** */ bool addOrUpdate(const std::string &udi, const std::string &parent_udi, Doc &doc); #ifdef IDX_THREADS void closeQueue(); void waitUpdIdle(); #endif /** Delete document(s) for given UDI, including subdocs */ bool purgeFile(const std::string &udi, bool *existed = nullptr); /** Delete subdocs with an out of date sig. We do this to purge obsolete subdocs during a partial update where no general purge will be done */ bool purgeOrphans(const std::string &udi); /** Remove documents that no longer exist in the file system. This * depends on the update map, which is built during * indexing (needUpdate() / addOrUpdate()). * * This should only be called after a full walk of * the file system, else the update map will not be complete, and * many documents will be deleted that shouldn't, which is why this * has to be called externally, rcldb can't know if the indexing * pass was complete or partial. */ bool purge(); /** Create stem expansion database for given languages. */ bool createStemDbs(const std::vector &langs); /** Delete stem expansion database for given language. */ bool deleteStemDb(const std::string &lang); /* Query-related methods ************************************/ /** Return total docs in db */ int docCnt(); /** Return count of docs which have an occurrence of term */ int termDocCnt(const std::string& term); /** Add extra Xapian database for querying. * @param dir must point to something which can be passed as parameter * to a Xapian::Database constructor (directory or stub). */ bool addQueryDb(const std::string &dir); /** Remove extra database. if dir == "", remove all. */ bool rmQueryDb(const std::string &dir); /** Set the extra indexes to the input list. */ bool setExtraQueryDbs(const std::vector& dbs); /** Check if document comes from the main index (this is used to decide if we can update the index for it */ bool fromMainIndex(const Doc& doc); /** Retrieve the stored doc text. This returns false if the index does not store raw text or other problems (discriminate with storesDocText(). On success, the data is stored in doc.text */ bool getDocRawText(Doc& doc); /** Retrieve an index designator for the document result. This is used * by the GUI document history feature for remembering where a * doc comes from and allowing later retrieval (if the ext index * is still active...). */ std::string whatIndexForResultDoc(const Doc& doc); /** Tell if directory seems to hold xapian db */ static bool testDbDir(const std::string &dir, bool *stripped = nullptr); /** Return the index terms that match the input string * Expansion is performed either with either wildcard or regexp processing * Stem expansion is performed if lang is not empty * * @param typ_sens defines the kind of expansion: none, wildcard, * regexp or stemming. "none" may still expand case, * diacritics and synonyms, depending on the casesens, diacsens and * synexp flags. * @param lang sets the stemming language(s). Can be a space-separated list * @param term is the term to expand * @param result is the main output * @param max defines the maximum result count * @param field if set, defines the field within with the expansion should * be performed. Only used for wildcards and regexps, stemming is * always global. If this is set, the resulting output terms * will be appropriately prefixed and the prefix value will be set * in the TermMatchResult header */ enum MatchType {ET_NONE=0, ET_WILD=1, ET_REGEXP=2, ET_STEM=3, ET_DIACSENS=8, ET_CASESENS=16, ET_SYNEXP=32, ET_PATHELT=64}; int matchTypeTp(int tp) { return tp & 7; } bool termMatch(int typ_sens, const std::string &lang, const std::string &term, TermMatchResult& result, int max = -1, const std::string& field = "", std::vector *multiwords = nullptr); bool dbStats(DbStats& stats, bool listFailed); /** Return min and max years for doc mod times in db */ bool maxYearSpan(int *minyear, int *maxyear); /** Return all mime types in index. This can be different from the ones defined in the config because of 'file' command usage. Inserts the types at the end of the parameter */ bool getAllDbMimeTypes(std::vector&); /** Compute a list of all the directories containing indexed documents, down to a given depth @param depth depth belowr a possible computed common prefix, that is, if all directories are relative to /home/you, a depth of 2 would get you /home/you/1/2 but not /home/you/1/2/3 @param[out] commonprefix common prefix path for the list. May be "/". @param[out] dirs the computed list (full paths including the prefix). */ bool dirlist(int depth, std::string& commonprefix, std::vector& dirs); /** Wildcard expansion specific to file names. Internal/sdata use only */ bool filenameWildExp(const std::string& exp, std::vector& names, int max); /** Set parameters for synthetic abstract generation */ void setAbstractParams(int idxTrunc, int synthLen, int syntCtxLen); int getAbsCtxLen() const { return m_synthAbsWordCtxLen; } int getAbsLen() const { return m_synthAbsLen; } /** Decide if we expand queries to more common terms which spell almost like the user term */ void setUseSpellFuzz(bool onoff) { m_usingSpellFuzz = onoff; } /** Set maximum spelling distance when considering terms for spelling expansion */ void setMaxSpellDist(int max) { m_maxSpellDistance = max; } int getMaxSpellDist() { return m_maxSpellDistance; } /** Get document for given udi and db index * * Used to retrieve ancestor documents. * @param udi The unique document identifier. * @param idxdoc A document from the same database as an opaque way to pass * the database id (e.g.: when looking for parent in a multi-database * context). * @param[out] doc The output Recoll document. * @return True for success. */ bool getDoc(const std::string &udi, const Doc& idxdoc, Doc &doc); /** Get document for given udi and index directory. * * Used by the 'history' feature. This supposes that the extra db is still active. * @param udi The unique document identifier. * @param dbdir The index directory, from storage, as returned by * whatIndexForResultDoc() at the time of the query. Can be * empty to mean "main index" (allows the history to avoid * storing the main dbdir value). * @param[out] doc The output Recoll document. * @return True for success. */ bool getDoc(const std::string &udi, const std::string& dbdir, Doc &doc, bool fetchtext=false); /** Same as from dbdir but use index integer index (main==0). Mostly for the python module */ bool getDoc(const std::string& udi, int idxi, Doc& doc, bool fetchtext=false); /** Retrieve the UDI for a query result document. We do this lazily: it's not always * needed and it takes about 20% of the document fetch time because of the need to * access the postlist. This both returns the UDI and sets it in the meta array. */ std::string fetchUdi(Doc& doc); /** Test if documents has sub-documents. * * This can always be detected for file-level documents, using the * postlist for the parent term constructed with udi. * * For non file-level documents (e.g.: does an email inside an * mbox have attachments ?), detection is dependant on the filter * having set an appropriate flag at index time. Higher level code * can't detect it because the doc for the parent may have been * seen before any children. The flag is stored as a value in the * index. */ bool hasSubDocs(Doc &idoc); /** Get subdocuments of given document. * * For file-level documents, these are all docs indexed by the * parent term built on idoc.udi. For embedded documents, the * parent doc is looked for, then its subdocs list is * filtered using the idoc ipath as a prefix. */ bool getSubDocs(Doc& idoc, std::vector& subdocs); /** Get container (top level file) document. * * If the input is not a subdocument, this returns a copy of the input. */ bool getContainerDoc(Doc &idoc, Doc& ctdoc); /** Get duplicates (md5) of document */ bool docDups(const Doc& idoc, std::vector& odocs); /* The following are mainly for the aspell module */ /** Whole term list walking. */ TermIter *termWalkOpen(); bool termWalkNext(TermIter *, std::string &term); void termWalkClose(TermIter *); /** Test term existence */ bool termExists(const std::string& term); /** Test if terms stem to different roots. */ bool stemDiffers(const std::string& lang, const std::string& term, const std::string& base); const RclConfig *getConf() {return m_config;} /** * Activate the "in place reset" mode where all documents are * considered as needing update. It should be set at the start of * the indexing pass. */ void setInPlaceReset() {m_inPlaceReset = true;} /** Flush interval get/set. This is used by the first indexing pass to override the config value and flush more rapidly initially so that the user can quickly play with queries */ int getFlushMb() { return m_flushMb; } void setFlushMb(int mb) { m_flushMb = mb; } bool doFlush(); // Read and store a synonyms groups file. Use empty fn to reset. Different uses at query // and index times. See the comments for m_syngroups for a detailed explanation. bool setSynGroupsFile(const std::string& fn); const SynGroups& getSynGroups() {return *m_syngroups;} // Mark all documents with an UDI having @param udi as prefix as // existing. Only works if the UDIs for the store are // hierarchical of course. Used by FsIndexer to avoid purging // files for a topdir which is on a removable file system and // currently unmounted (topdir does not exist or is empty. bool udiTreeMarkExisting(const std::string& udi); /* This has to be public for access by embedded Query::Native */ Native *m_ndb{nullptr}; private: const RclConfig *m_config; std::string m_reason; // Error explanation // Xapian directories for additional databases to query std::vector m_extraDbs; OpenMode m_mode{Db::DbRO}; // File existence vector: this is filled during the indexing pass. Any // document whose bit is not set at the end is purged std::vector updated; // Text bytes indexed since beginning long long m_curtxtsz{0}; // Text bytes at last flush long long m_flushtxtsz{0}; // Text bytes at last fsoccup check long long m_occtxtsz{0}; // First fs occup check ? int m_occFirstCheck{1}; // Synonym groups. This has two different uses, at query or indexing time. The main use is at // query time. // - Query time: this is set by the upper level query program (GUI or recollq, not accessible // from Python at the moment for no special reason). The synonym file name comes from // whatever upper level pref. It is used during query expansion to OR the synonym terms. // There is no strict reason that this has to be an Rcl::Db member, as it is only used when // building each query. It could be a SearchData member, or even a parameter to // Query::setQuery(). Otoh, building the syngroups structure from a file may be expensive and // it's unlikely to change with every query, so it makes sense to cache it, and Rcl::Db is // not a bad place for this. // - Index time: the data comes from the idxsynonyms parameter which has no default value. It is // ONLY used for generating multiword terms to allow phrase/proximity searches to work with // multiword synonyms. Ex.: if we have an (applejack "apple jack") synonym group, without // idxsynonyms, if "apple jack" is found in a text the indexer will issue two terms at // positions x and x+1 so that a search for the "apple jack" synonym at position x will // fail. If idxsynonyms is set, the indexer will also issue a multiword "apple jack" term at // position x so that phrase/prox searches will work. Another approach would have been to have // a "phrase within phrase" at query time, but this is not supported by Xapian. std::unique_ptr m_syngroups; // Aspell object if needed Aspell *m_aspell{nullptr}; /*************** * Parameters cached out of the configuration files. Logically const * after init */ // Stop terms: those don't get indexed. std::unique_ptr m_stops; // Truncation length for stored meta fields int m_idxMetaStoredLen{150}; // This is how long an abstract we keep or build from beginning of // text when indexing. It only has an influence on the size of the // db as we are free to shorten it again when displaying int m_idxAbsTruncLen{250}; // Document text truncation length int m_idxTextTruncateLen{0}; // This is the size of the abstract that we synthetize out of query // term contexts at *query time* int m_synthAbsLen{250}; // This is how many words (context size) we keep around query terms // when building the abstract int m_synthAbsWordCtxLen{4}; // Flush threshold. Megabytes of text indexed before we flush. int m_flushMb{-1}; // Maximum file system occupation percentage int m_maxFsOccupPc{0}; // Limit Xapian stored object sizes. Note that these are last ditch efforts to prevent a hard // Xapian error, and are partly redundant with other limits in the doc preparation pipeline. // The hard Xapian limit for this is roughly of the order of 100 MB, maybe depending on version, // largely over what we may actually want to store. The values can be changed in the config. int m_maxdbdatarecordkbs{1000}; // 1MB int m_maxdbdstoredtextmbs{50}; // 50MB // Using spelling approximation? bool m_usingSpellFuzz{true}; // Maximum dam-lev distance when considering terms for spelling fuzz int m_maxSpellDistance{1}; int m_autoSpellRarityThreshold{200000}; int m_autoSpellSelectionThreshold{20}; // Database directory std::string m_basedir; // When this is set, all documents are considered as needing a reindex. // This implements an alternative to just erasing the index before // beginning, with the advantage that, for small index formats updates, // between releases the index remains available while being recreated. bool m_inPlaceReset{false}; static bool o_nospell_chars[256]; /******* End logical constnesss */ #ifdef IDX_THREADS friend void *DbUpdWorker(void*); #endif // IDX_THREADS // Internal form of setExistingFlags: no locking void i_setExistingFlags(const std::string& udi, unsigned int docid); // Reinitialize when adding/removing additional dbs bool adjustdbs(); // Match the input term (which must be in index form, diacase stripped as needed) and actual // index contents, possibly using wildcard or regexp matching. If typ_sens is ET_NONE, this is // just an index lookup. Accumulate the results in the TermMatchResult mutable input. bool idxTermMatch(int typ_sens, const std::string &term, TermMatchResult& result, int max = -1, const std::string& field = std::string()); // Flush when idxflushmb is reached bool maybeflush(int64_t moretext); bool docExists(const std::string& uniterm); void spellExpand(const std::string& term, const std::string& field, std::vector& expansion); // At the end of an indexing using multiple output Xapian indexes: compact the whole and replace // current index. Everything must be committed and idle. Throws Xapian exception in case of // error. This can only be called by close() and it deletes m_ndb. void mergeAndCompact(); }; // This has to go somewhere, and as it needs the Xapian version, this is // the most reasonable place. std::string version_string(); } #endif /* _DB_H_INCLUDED_ */ recoll-1.43.12/rcldb/rcldb.cpp0000644000175000017500000014305715132215764015344 0ustar dockesdockes /* Copyright (C) 2004-2022 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include "safeunistd.h" #include #include #include #include #include #include #include #include using namespace std; #include "xapian.h" #include "rclconfig.h" #include "log.h" #include "rcldb.h" #include "rcldb_p.h" #include "stemdb.h" #include "textsplit.h" #include "transcode.h" #include "unacpp.h" #include "conftree.h" #include "pathut.h" #include "rclutil.h" #include "smallut.h" #include "chrono.h" #include "rclvalues.h" #include "md5ut.h" #include "cancelcheck.h" #include "termproc.h" #include "expansiondbs.h" #include "internfile.h" #include "wipedir.h" #include "zlibut.h" #include "idxstatus.h" #include "rcldoc.h" #include "stoplist.h" #include "daterange.h" #ifdef RCL_USE_ASPELL #include "rclaspell.h" #endif namespace Rcl { // Recoll index format version is stored in user metadata. When this change, // we can't open the db and will have to reindex. const string cstr_RCL_IDX_VERSION_KEY("RCL_IDX_VERSION_KEY"); const string cstr_RCL_IDX_VERSION("1"); const string cstr_RCL_IDX_DESCRIPTOR_KEY("RCL_IDX_DESCRIPTOR_KEY"); const string cstr_mbreaks("rclmbreaks"); // Some prefixes that we could get from the fields file, but are not going to ever change. const string fileext_prefix = "XE"; const string mimetype_prefix = "T"; const string pathelt_prefix = "XP"; const string udi_prefix("Q"); const string parent_prefix("F"); // Special terms to mark begin/end of field (for anchored searches). string start_of_field_term; string end_of_field_term; // Special term for page breaks. Note that we use a complicated mechanism for multiple page // breaks at the same position, when it would have been probably simpler to use XXPG/n terms // instead (did not try to implement though). A change would force users to reindex. const string page_break_term = "XXPG/"; // Special term to mark documents with children. const string has_children_term("XXC/"); // Field name for the unsplit file name. Has to exist in the field file // because of usage in termmatch() const string unsplitFilenameFieldName = "rclUnsplitFN"; const string unsplitfilename_prefix = "XSFS"; // Synthetic abstract marker (to discriminate from abstract actually found in document) const string cstr_syntAbs("?!#@"); string version_string(){ return string("Recoll ") + string(PACKAGE_VERSION) + string(" + Xapian ") + string(Xapian::version_string()); } /* Rcl::Db methods ///////////////////////////////// */ bool Db::o_nospell_chars[256]; Db::Db(const RclConfig *cfp) { m_config = new RclConfig(*cfp); m_config->getConfParam("maxfsoccuppc", &m_maxFsOccupPc); m_config->getConfParam("idxflushmb", &m_flushMb); m_config->getConfParam("idxmetastoredlen", &m_idxMetaStoredLen); m_config->getConfParam("idxtexttruncatelen", &m_idxTextTruncateLen); m_config->getConfParam("autoSpellRarityThreshold", &m_autoSpellRarityThreshold); m_config->getConfParam("autoSpellSelectionThreshold", &m_autoSpellSelectionThreshold); m_config->getConfParam("maxdbdatarecordkbs", &m_maxdbdatarecordkbs); m_config->getConfParam("maxdbstoredtextmbs", &m_maxdbdstoredtextmbs); if (start_of_field_term.empty()) { if (o_index_stripchars) { start_of_field_term = "XXST"; end_of_field_term = "XXND"; } else { start_of_field_term = "XXST/"; end_of_field_term = "XXND/"; } memset(o_nospell_chars, 0, sizeof(o_nospell_chars)); for (unsigned char c : " !\"#$%&()*+,-./0123456789:;<=>?@[\\]^_`{|}~") { o_nospell_chars[(unsigned int)c] = 1; } } m_ndb = new Native(this); m_syngroups = std::make_unique(); m_stops = std::make_unique(); } Db::~Db() { LOGDEB2("Db::~Db\n"); if (nullptr == m_ndb) return; LOGDEB("Db::~Db: isopen " << m_ndb->m_isopen << " m_iswritable " << m_ndb->m_iswritable << "\n"); this->close(); delete m_ndb; #ifdef RCL_USE_ASPELL delete m_aspell; #endif delete m_config; } vector Db::getStemmerNames() { vector res; stringToStrings(Xapian::Stem::get_available_languages(), res); return res; } bool Db::open(OpenMode mode, OpenError *error, int flags) { if (error) *error = DbOpenMainDb; if (nullptr == m_ndb || m_config == nullptr) { m_reason = "Null configuration or Xapian Db"; return false; } LOGDEB("Db::open: m_isopen " << m_ndb->m_isopen << " m_iswritable " << m_ndb->m_iswritable << " mode " << mode << "\n"); m_inPlaceReset = false; if (m_ndb->m_isopen) { // We used to return an error here but I see no reason to if (!close()) return false; } if (!m_config->getStopfile().empty()) m_stops->setFile(m_config->getStopfile()); if (isWriteMode(mode)) { // Check for an index-time synonyms file. We use this to // generate multiword terms for multiword synonyms string synfile = m_config->getIdxSynGroupsFile(); if (path_exists(synfile)) { setSynGroupsFile(synfile); } } string dir = m_config->getDbDir(); string ermsg; try { if (isWriteMode(mode)) { m_ndb->openWrite(dir, mode, flags); updated = vector(m_ndb->xwdb.get_lastdocid() + 1, false); // We used to open a readonly object in addition to the r/w one because some operations // were faster when performed through a Database: no forced flushes on allterms_begin(), // used in subDocs(). This issue has been gone for a long time (now: Xapian 1.2) and the // separate objects seem to trigger other Xapian issues, so the query db is now a clone // of the update one. m_ndb->xrdb = m_ndb->xwdb; LOGDEB("Db::open: lastdocid: " << m_ndb->xwdb.get_lastdocid() << "\n"); } else { m_ndb->openRead(dir); for (auto& db : m_extraDbs) { if (error) *error = DbOpenExtraDb; LOGDEB("Db::Open: adding query db [" << &db << "]\n"); // An error here used to be non-fatal (1.13 and older) but I can't see why std::string ermsg1; try { m_ndb->xrdb.add_database(Xapian::Database(db)); } XCATCHERROR(ermsg1); if (!ermsg1.empty()) { m_reason += "error adding external Xapian index: " + db + " : " + ermsg1; return false; } } } if (error) *error = DbOpenMainDb; // Check index format version. Must not try to check a just created or truncated db if (mode != DbTrunc && m_ndb->xrdb.get_doccount() > 0) { string version = m_ndb->xrdb.get_metadata(cstr_RCL_IDX_VERSION_KEY); if (version.compare(cstr_RCL_IDX_VERSION)) { m_ndb->m_noversionwrite = true; LOGERR("Rcl::Db::open: file index [" << version << "], software [" << cstr_RCL_IDX_VERSION << "]\n"); throw Xapian::DatabaseError("Recoll index version mismatch", "", ""); } } m_mode = mode; m_ndb->m_isopen = true; m_basedir = dir; if (error) *error = DbOpenNoError; return true; } XCATCHERROR(ermsg); m_reason += "error opening Xapian index " + dir + " : " + ermsg; LOGERR("Db::open: exception while opening [" << dir << "]: " << ermsg << "\n"); return false; } bool Db::storesDocText() { if (!m_ndb || !m_ndb->m_isopen) { LOGERR("Db::storesDocText: called on non-opened db\n"); return false; } return m_ndb->m_storetext; } // Note: xapian has no close call, we delete and recreate the db bool Db::close() { if (nullptr == m_ndb) return false; LOGDEB("Db::close: isopen " << m_ndb->m_isopen << " iswritable " << m_ndb->m_iswritable << "\n"); if (m_ndb->m_isopen == false) { return true; } string ermsg; try { bool w = m_ndb->m_iswritable; if (w) { LOGDEB("Rcl::Db:close: xapian will close. May take some time\n"); #ifdef IDX_THREADS m_ndb->m_wqueue.closeShop(); if (m_ndb->m_tmpdbinitidx > 0) { m_ndb->m_mwqueue.closeShop(); } waitUpdIdle(); #endif if (!m_ndb->m_noversionwrite) { m_ndb->xwdb.set_metadata(cstr_RCL_IDX_VERSION_KEY, cstr_RCL_IDX_VERSION); m_ndb->xwdb.commit(); } #ifdef IDX_THREADS if (m_ndb->m_tmpdbinitidx > 0) { mergeAndCompact(); } #endif // IDX_THREADS } LOGDEB("Rcl::Db:close() xapian close done.\n"); deleteZ(m_ndb); m_ndb = new Native(this); return true; } XCATCHERROR(ermsg); LOGERR("Db:close: exception while deleting/recreating db object: " << ermsg << "\n"); return false; } void Db::mergeAndCompact() { #ifdef IDX_THREADS if (m_ndb->m_tmpdbinitidx <= 0) return; // Note: the commits() have been called by waitUpdIdle() above. LOGINF("Rcl::Db::close: starting merge of " << m_ndb->m_tmpdbinitidx << " temporary indexes\n"); for (int i = 0; i < m_ndb->m_tmpdbinitidx; i++) { m_ndb->xwdb.add_database(m_ndb->m_tmpdbs[i]); } string dbdir = m_config->getDbDir(); std::set oldfiles; std::string errs; if (!listdir(dbdir, errs, oldfiles)) { LOGERR("Db::close: failed listing existing db files in " << dbdir << ": " << errs << "\n"); throw Xapian::DatabaseError("Failed listing db files", errs); } std::string tmpdir = path_cat(dbdir, "tmp"); m_ndb->xwdb.compact(tmpdir); // Get rid of the temporary indexes and their directories deleteZ(m_ndb); // Back up the current index by moving it aside. auto backupdir = path_cat(dbdir, "backup"); path_makepath(backupdir, 0700); for (const auto& fn : oldfiles) { auto ofn = path_cat(dbdir, fn); auto nfn = path_cat(backupdir, fn); if (path_isfile(ofn) && !path_rename(ofn, nfn)) { LOGERR("Db::close: failed renaming " << ofn << " to " << nfn << "\n"); throw Xapian::DatabaseError("Failed renaming db file for backup", ofn + "->" + nfn); } } // Move the new index in place std::set nfiles; if (!listdir(tmpdir, errs, nfiles)) { LOGERR("Db::close: failed listing newdb files in " << tmpdir << ": " << errs << "\n"); throw Xapian::DatabaseError("Failed listing new db files", errs); } for (const auto& fn : nfiles) { auto ofn = path_cat(tmpdir, fn); auto nfn = path_cat(dbdir, fn); if (path_isfile(ofn) && !path_rename(ofn, nfn)) { LOGERR("Db::close: failed renaming " << ofn << " to " << nfn << "\n"); throw Xapian::DatabaseError("Failed renaming new db file to dbdir", ofn + "->" + nfn); } } // Get rid of the old index wipedir(backupdir, true, true); LOGINF("Rcl::Db::close: merge and compact done\n"); #endif // IDX_THREADS } int Db::docCnt() { int res = -1; if (!m_ndb || !m_ndb->m_isopen) return -1; XAPTRY(res = m_ndb->xrdb.get_doccount(), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::docCnt: got error: " << m_reason << "\n"); return -1; } return res; } int Db::termDocCnt(const string& _term) { int res = -1; if (!m_ndb || !m_ndb->m_isopen) return -1; string term = _term; if (o_index_stripchars) if (!unacmaybefold(_term, term, UNACOP_UNACFOLD)) { LOGINFO("Db::termDocCnt: unac failed for [" << _term << "]\n"); return 0; } if (m_stops->isStop(term)) { LOGDEB1("Db::termDocCnt [" << term << "] in stop list\n"); return 0; } XAPTRY(res = m_ndb->xrdb.get_termfreq(term), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::termDocCnt: got error: " << m_reason << "\n"); return -1; } return res; } // Reopen the db with a changed list of additional dbs bool Db::adjustdbs() { if (m_mode != DbRO) { LOGERR("Db::adjustdbs: mode not RO\n"); return false; } if (m_ndb && m_ndb->m_isopen) { if (!close()) return false; if (!open(m_mode)) { return false; } } return true; } // Set the extra indexes to the input list. bool Db::setExtraQueryDbs(const std::vector& dbs) { LOGDEB0("Db::setExtraQueryDbs: ndb " << m_ndb << " iswritable " << ((m_ndb)?m_ndb->m_iswritable:0) << " dbs [" << stringsToString(dbs) << "]\n"); if (!m_ndb) { return false; } if (m_ndb->m_iswritable) { return false; } m_extraDbs.clear(); for (const auto& dir : dbs) { m_extraDbs.push_back(path_canon(dir)); } return adjustdbs(); } bool Db::addQueryDb(const string &_dir) { string dir = _dir; LOGDEB0("Db::addQueryDb: ndb " << m_ndb << " iswritable " << ((m_ndb)?m_ndb->m_iswritable:0) << " db [" << dir << "]\n"); if (!m_ndb) return false; if (m_ndb->m_iswritable) return false; dir = path_canon(dir); if (find(m_extraDbs.begin(), m_extraDbs.end(), dir) == m_extraDbs.end()) { m_extraDbs.push_back(dir); } return adjustdbs(); } bool Db::rmQueryDb(const string &dir) { if (!m_ndb) return false; if (m_ndb->m_iswritable) return false; if (dir.empty()) { m_extraDbs.clear(); } else { auto it = find(m_extraDbs.begin(), m_extraDbs.end(), dir); if (it != m_extraDbs.end()) { m_extraDbs.erase(it); } } return adjustdbs(); } // Determining what index a doc result comes from is based on the // modulo of the docid against the db count. Ref: // http://trac.xapian.org/wiki/FAQ/MultiDatabaseDocumentID bool Db::fromMainIndex(const Doc& doc) { return m_ndb->whatDbIdx(doc.xdocid) == 0; } std::string Db::whatIndexForResultDoc(const Doc& doc) { size_t idx = m_ndb->whatDbIdx(doc.xdocid); if (idx == (size_t)-1) { LOGERR("whatIndexForResultDoc: whatDbIdx returned -1 for " << doc.xdocid << "\n"); return string(); } // idx is [0..m_extraDbs.size()] 0 is for the main index, else // idx-1 indexes into m_extraDbs if (idx == 0) { return m_basedir; } else { return m_extraDbs[idx-1]; } } bool Db::testDbDir(const string &dir, bool *stripped_p) { string aerr; bool mstripped = true; LOGDEB("Db::testDbDir: [" << dir << "]\n"); try { Xapian::Database db(dir); // If the prefix for udi is wrapped, it's an unstripped index. Q is guaranteed to exist if // there is at least one doc in the index. Xapian::TermIterator term = db.allterms_begin(":Q:"); if (term == db.allterms_end()) { mstripped = true; } else { mstripped = false; } LOGDEB("testDbDir: " << dir << " is a " << (mstripped ? "stripped" : "raw") << " index\n"); } XCATCHERROR(aerr); if (!aerr.empty()) { LOGERR("Db::Open: error while trying to open database from [" << dir << "]: " << aerr<<"\n"); return false; } if (stripped_p) *stripped_p = mstripped; return true; } bool Db::isopen() { if (nullptr == m_ndb) return false; return m_ndb->m_isopen; } // Try to translate field specification into field prefix. bool Db::fieldToTraits(const string& fld, const FieldTraits **ftpp, bool isquery) { if (m_config && m_config->getFieldTraits(fld, ftpp, isquery)) return true; *ftpp = nullptr; return false; } class TermProcIdx : public TermProc { public: TermProcIdx() : TermProc(nullptr), m_ts(nullptr), m_lastpagepos(0), m_pageincr(0) {} void setTSD(TextSplitDb *ts) {m_ts = ts;} bool takeword(const std::string &term, size_t pos, size_t, size_t) override { // Compute absolute position (pos is relative to current segment), and remember relative. m_ts->curpos = static_cast(pos); pos += m_ts->basepos; // Don't try to add empty term Xapian doesnt like it... Safety check // this should not happen. if (term.empty()) return true; string ermsg; try { // Index without prefix, using the field-specific weighting LOGDEB1("Emitting term at " << pos << " : [" << term << "]\n"); if (!m_ts->ft.pfxonly) { if (!o_no_term_positions) { m_ts->doc.add_posting(term, static_cast(pos), m_ts->ft.wdfinc); } else { m_ts->doc.add_term(term, m_ts->ft.wdfinc); } } #ifdef TESTING_XAPIAN_SPELL if (Db::isSpellingCandidate(term, false)) { m_ts->wdb.add_spelling(term); } #endif // Index the prefixed term. if (!m_ts->ft.pfx.empty()) { if (!o_no_term_positions) { m_ts->doc.add_posting(m_ts->ft.pfx + term, static_cast(pos), m_ts->ft.wdfinc); } else { m_ts->doc.add_term(m_ts->ft.pfx + term, m_ts->ft.wdfinc); } } return true; } XCATCHERROR(ermsg); LOGERR("Db: xapian add_posting error " << ermsg << "\n"); return false; } void newpage(size_t pos) override { pos += m_ts->basepos; if (pos < baseTextPosition) { LOGDEB("newpage: not in body: " << pos << "\n"); return; } if (!o_no_term_positions) m_ts->doc.add_posting(m_ts->ft.pfx + page_break_term, static_cast(pos)); if (pos == static_cast(m_lastpagepos)) { m_pageincr++; LOGDEB2("newpage: same pos, pageincr " << m_pageincr << " lastpagepos " << m_lastpagepos << "\n"); } else { LOGDEB2("newpage: pos change, pageincr " << m_pageincr << " lastpagepos " << m_lastpagepos << "\n"); if (m_pageincr > 0) { // Remember the multiple page break at this position unsigned int relpos = m_lastpagepos - baseTextPosition; LOGDEB2("Remembering multiple page break. Relpos " << relpos << " cnt " << m_pageincr << "\n"); m_pageincrvec.push_back({relpos, m_pageincr}); } m_pageincr = 0; } m_lastpagepos = static_cast(pos); } virtual bool flush() override { if (m_pageincr > 0) { unsigned int relpos = m_lastpagepos - baseTextPosition; LOGDEB2("Remembering multiple page break. Position " << relpos << " cnt " << m_pageincr << "\n"); m_pageincrvec.push_back(pair(relpos, m_pageincr)); m_pageincr = 0; } return TermProc::flush(); } TextSplitDb *m_ts; // Auxiliary page breaks data for positions with multiple page breaks. int m_lastpagepos; // increment of page breaks at same pos. Normally 0, 1.. when several // breaks at the same pos int m_pageincr; vector > m_pageincrvec; }; // Let our user set the parameters for abstract processing void Db::setAbstractParams(int idxtrunc, int syntlen, int syntctxlen) { LOGDEB1("Db::setAbstractParams: trunc " << idxtrunc << " syntlen " << syntlen << " ctxlen " << syntctxlen << "\n"); if (idxtrunc >= 0) m_idxAbsTruncLen = idxtrunc; if (syntlen > 0) m_synthAbsLen = syntlen; if (syntctxlen > 0) m_synthAbsWordCtxLen = syntctxlen; } bool Db::setSynGroupsFile(const string& fn) { return m_syngroups->setfile(fn); } // Add document in internal form to the database: index the terms in the title abstract and body and // add special terms for file name, date, mime type etc., create the document data record (more // metadata), and update database. bool Db::addOrUpdate(const string &udi, const string &parent_udi, Doc &doc) { LOGDEB("Db::add: udi [" << udi << "] parent [" << parent_udi << "]\n"); if (nullptr == m_ndb) return false; // This document is potentially going to be passed to the index update thread. The reference // counters are not mt-safe, so we need to do this through a pointer. The reference is just // there to avoid changing too much code (the previous version passed a copy). std::unique_ptr newdocument_ptr = std::make_unique(); Xapian::Document& newdocument(*newdocument_ptr.get()); // The term processing pipeline: TermProcIdx tpidx; TermProc *nxt = &tpidx; TermProcStop tpstop(nxt, *m_stops);nxt = &tpstop; //TermProcCommongrams tpcommon(nxt, m_stops); nxt = &tpcommon; TermProcMulti tpmulti(nxt, *m_syngroups); if (m_syngroups->getmultiwordsmaxlength() > 1) { nxt = &tpmulti; } TermProcPrep tpprep(nxt); if (o_index_stripchars) nxt = &tpprep; TextSplitDb splitter(m_ndb->xwdb, newdocument, nxt); tpidx.setTSD(&splitter); // Udi unique term: this is used for file existence/uptodate // checks, and unique id for the replace_document() call. string uniterm = Native::make_uniterm(udi); string rawztext; // Doc compressed text if (doc.metaonly) { // Only updating an existing doc with new extended attributes data. Need to read the old // doc and its data record first. This is so different from the normal processing that it // uses a fully separate code path (with some duplication unfortunately) if (!m_ndb->docToXdocMetaOnly(&splitter, udi, doc, newdocument)) { return false; } } else { if (!m_ndb->docToXdoc(&splitter, parent_udi, uniterm, doc, newdocument, rawztext, tpidx.m_pageincrvec)) { return false; } } #ifdef IDX_THREADS if (m_ndb->m_havewriteq) { DbUpdTask *tp = new DbUpdTask(DbUpdTask::AddOrUpdate, udi, uniterm, std::move(newdocument_ptr), doc.text.length(), rawztext); if (!m_ndb->m_wqueue.put(tp)) { LOGERR("Db::addOrUpdate:Cant queue task\n"); return false; } return true; } #endif return m_ndb->addOrUpdateWrite(udi, uniterm, std::move(newdocument_ptr), doc.text.length(), rawztext); } #ifdef IDX_THREADS void Db::closeQueue() { if (m_ndb->m_iswritable && m_ndb->m_havewriteq) { m_ndb->m_wqueue.closeShop(); } } void Db::waitUpdIdle() { if (m_ndb->m_iswritable && m_ndb->m_havewriteq) { Chrono chron; m_ndb->m_wqueue.waitIdle(); if (m_ndb->m_tmpdbinitidx > 0) { m_ndb->m_mwqueue.waitIdle(); } // We flush here just for correct measurement of the thread work time string ermsg; try { LOGINF("DbMUpdWorker: flushing main index\n"); m_ndb->xwdb.commit(); for (int i = 0; i < m_ndb->m_tmpdbinitidx; i++) { LOGDEB("DbMUpdWorker: flushing index " << i << "\n"); m_ndb->m_tmpdbs[i].commit(); } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("Db::waitUpdIdle: flush() failed: " << ermsg << "\n"); } m_ndb->m_totalworkns += chron.nanos(); LOGINFO("Db::waitUpdIdle: total xapian work " << std::to_string(m_ndb->m_totalworkns/1000000) << " mS\n"); } } #endif // Flush when idxflushmbs is reached bool Db::maybeflush(int64_t moretext) { if (m_flushMb > 0) { m_curtxtsz += moretext; if ((m_curtxtsz - m_flushtxtsz) / MB >= m_flushMb) { LOGINF("Db::add/delete: txt size >= " << m_flushMb << " Mb, flushing\n"); return doFlush(); } } return true; } bool Db::doFlush() { if (!m_ndb) { LOGERR("Db::doFLush: no ndb??\n"); return false; } #ifdef IDX_THREADS if (m_ndb->m_tmpdbinitidx > 0) { std::lock_guard lock(m_ndb->m_initidxmutex); for (int i = 0; i < m_ndb->m_tmpdbinitidx; i++) { m_ndb->m_tmpdbflushflags[i] = 1; } } #endif string ermsg; try { statusUpdater()->update(DbIxStatus::DBIXS_FLUSH, ""); LOGINF("DbMUpdWorker: flushing main index\n"); m_ndb->xwdb.commit(); } XCATCHERROR(ermsg); statusUpdater()->update(DbIxStatus::DBIXS_NONE, ""); if (!ermsg.empty()) { LOGERR("Db::doFlush: flush() failed: " << ermsg << "\n"); return false; } m_flushtxtsz = m_curtxtsz; return true; } void Db::setExistingFlags(const string& udi, unsigned int docid) { if (m_mode == DbRO) return; if (docid == (unsigned int)-1) { LOGERR("Db::setExistingFlags: called with bogus docid !!\n"); return; } #ifdef IDX_THREADS std::unique_lock lock(m_ndb->m_mutex); #endif i_setExistingFlags(udi, docid); } void Db::i_setExistingFlags(const string& udi, unsigned int docid) { // Set the up to date flag for the document and its subdocs. needUpdate() can also be called at // query time (for preview up to date check), so no error if the updated bitmap is of size 0, // and also this now happens when fsIndexer() calls udiTreeMarkExisting() after an error, so the // message level is now debug if (docid >= updated.size()) { if (updated.size()) { LOGDEB("needUpdate: existing docid beyond updated.size() " "(probably ok). Udi [" << udi << "], docid " << docid << ", updated.size() " << updated.size() << "\n"); } return; } else { updated[docid] = true; } // Set the existence flag for all the subdocs (if any) vector docids; if (!m_ndb->subDocs(udi, 0, docids)) { LOGERR("Rcl::Db::needUpdate: can't get subdocs\n"); return; } for (const auto docid : docids) { if (docid < updated.size()) { LOGDEB2("Db::needUpdate: docid " << docid << " set\n"); updated[docid] = true; } } } // Before running indexing for a specific backend: set the existence bits for all backends except // the specified one, so that the corresponding documents are not purged after the update. The "FS" // backend is special because the documents usually have no rclbes field (but we prepare for the // time when they might have one). // - If this is the FS backend: unset all the bits, set them for all backends but FS (docs without // a backend field will stay off). // - Else set all the bits, unset them for the specified backend (docs without a backend field // will stay on). bool Db::preparePurge(const std::string& _backend) { auto backend = stringtolower(_backend); TermMatchResult result; if (!idxTermMatch(ET_WILD, "*", result, -1, Doc::keybcknd)) { LOGERR("Rcl::Db:preparePurge: termMatch failed\n"); return false; } if ("fs" == backend) { updated = vector(m_ndb->xwdb.get_lastdocid() + 1, false); for (const auto& entry : result.entries) { auto stripped = strip_prefix(entry.term); if (stripped.empty() || "fs" == stripped) continue; Xapian::PostingIterator docid = m_ndb->xrdb.postlist_begin(entry.term); while (docid != m_ndb->xrdb.postlist_end(entry.term)) { if (*docid < updated.size()) { updated[*docid] = true; } docid++; } } } else { updated = vector(m_ndb->xwdb.get_lastdocid() + 1, true); for (const auto& entry : result.entries) { auto stripped = strip_prefix(entry.term); if (stripped.empty() || backend != strip_prefix(entry.term)) continue; Xapian::PostingIterator docid = m_ndb->xrdb.postlist_begin(entry.term); while (docid != m_ndb->xrdb.postlist_end(entry.term)) { if (*docid < updated.size()) { updated[*docid] = false; } docid++; } } } return true; } // Test if doc given by udi has changed since last indexed (test sigs) bool Db::needUpdate(const string &udi, const string& sig, unsigned int *docidp, string *osigp) { if (nullptr == m_ndb) return false; if (osigp) osigp->clear(); if (docidp) *docidp = 0; // If we are doing an in place or full reset, no need to test. if (m_inPlaceReset || m_mode == DbTrunc) { // For in place reset, pretend the doc existed, to enable // subdoc purge. The value is only used as a boolean in this case. if (docidp && m_inPlaceReset) { *docidp = -1; } return true; } string uniterm = Native::make_uniterm(udi); string ermsg; #ifdef IDX_THREADS // Need to protect against interaction with the doc update/insert // thread which also updates the existence map, and even multiple // accesses to the readonly Xapian::Database are not allowed // anyway std::unique_lock lock(m_ndb->m_mutex); #endif // Try to find the document indexed by the uniterm. Xapian::PostingIterator docid; XAPTRY(docid = m_ndb->xrdb.postlist_begin(uniterm), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::needUpdate: xapian::postlist_begin failed: " << m_reason << "\n"); return false; } if (docid == m_ndb->xrdb.postlist_end(uniterm)) { // No document exists with this path: we do need update LOGDEB("Db::needUpdate:yes (new): [" << uniterm << "]\n"); return true; } Xapian::Document xdoc; XAPTRY(xdoc = m_ndb->xrdb.get_document(*docid), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::needUpdate: get_document error: " << m_reason << "\n"); return true; } if (docidp) { *docidp = *docid; } // Retrieve old file/doc signature from value string osig; XAPTRY(osig = xdoc.get_value(VALUE_SIG), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::needUpdate: get_value error: " << m_reason << "\n"); return true; } LOGDEB2("Db::needUpdate: oldsig [" << osig << "] new [" << sig << "]\n"); if (osigp) { *osigp = osig; } // Compare new/old sig if (sig != osig) { LOGDEB("Db::needUpdate:yes: olsig [" << osig << "] new [" << sig << "] [" << uniterm<<"]\n"); // Db is not up to date. Let's index the file return true; } // Up to date. Set the existance flags in the map for the doc and // its subdocs. LOGDEB("Db::needUpdate:no: [" << uniterm << "]\n"); i_setExistingFlags(udi, *docid); return false; } // Return existing stem db languages vector Db::getStemLangs() { LOGDEB("Db::getStemLang\n"); vector langs; if (nullptr == m_ndb || m_ndb->m_isopen == false) return langs; StemDb db(m_ndb->xrdb); db.getMembers(langs); return langs; } /** * Delete stem db for given language */ bool Db::deleteStemDb(const string& lang) { LOGDEB("Db::deleteStemDb(" << lang << ")\n"); if (nullptr == m_ndb || m_ndb->m_isopen == false || !m_ndb->m_iswritable) return false; XapWritableSynFamily db(m_ndb->xwdb, synFamStem); return db.deleteMember(lang); } /** * Create database of stem to parents associations for a given language. * We walk the list of all terms, stem them, and create another Xapian db * with documents indexed by a single term (the stem), and with the list of * parent terms in the document data. */ bool Db::createStemDbs(const vector& langs) { LOGDEB("Db::createStemDbs\n"); if (nullptr == m_ndb || m_ndb->m_isopen == false || !m_ndb->m_iswritable) { LOGERR("createStemDb: db not open or not writable\n"); return false; } return createExpansionDbs(m_ndb->xwdb, langs); } /** * This is called at the end of an indexing session, to delete the documents for files that are no * longer there. It depends on the state of the 'updated' bitmap and will delete all documents * for which the existence bit is off. * This can ONLY be called after an appropriate call to unsetExistbits() and a full backend document * set walk, else the file existence flags will be wrong. */ bool Db::purge() { if (nullptr == m_ndb) { LOGERR("Db::purge: null m_ndb??\n"); return false; } LOGDEB("Db::purge: m_isopen "<m_isopen<<" m_iswritable "<m_iswritable<<"\n"); if (m_ndb->m_isopen == false || m_ndb->m_iswritable == false) return false; #ifdef IDX_THREADS waitUpdIdle(); std::unique_lock lock(m_ndb->m_mutex); #endif // IDX_THREADS // For Xapian versions up to 1.0.1, deleting a non-existant document would trigger an exception // that would discard any pending update. This could lose both previous added documents or // deletions. Adding the flush before the delete pass ensured that any added document would go // to the index. Kept here because it doesn't really hurt. m_reason.clear(); try { statusUpdater()->update(DbIxStatus::DBIXS_FLUSH, ""); m_ndb->xwdb.commit(); } XCATCHERROR(m_reason); statusUpdater()->update(DbIxStatus::DBIXS_NONE, ""); if (!m_reason.empty()) { LOGERR("Db::purge: 1st flush failed: " << m_reason << "\n"); return false; } // Walk the 'updated' bitmap and delete any Xapian document whose flag is not set (we did not // see its source during indexing). int purgecount = 0; for (Xapian::docid docid = 1; docid < updated.size(); ++docid) { if (!updated[docid]) { if ((purgecount+1) % 100 == 0) { try { CancelCheck::instance().checkCancel(); } catch(CancelExcept) { LOGINFO("Db::purge: partially cancelled\n"); break; } } try { if (m_flushMb > 0) { // We use an average term length of 5 for estimating the doc sizes which is // probably not accurate but gives rough consistency with what we do for // add/update. I should fetch the doc size from the data record, but this would // be bad for performance. Xapian::termcount trms = m_ndb->xwdb.get_doclength(docid); maybeflush(trms * 5); } m_ndb->deleteDocument(docid); LOGDEB("Db::purge: deleted document #" << docid << "\n"); } catch (const Xapian::DocNotFoundError &) { LOGDEB0("Db::purge: document #" << docid << " not found\n"); } catch (const Xapian::Error &e) { LOGERR("Db::purge: document #" << docid << ": " << e.get_msg() << "\n"); } catch (...) { LOGERR("Db::purge: document #" << docid << ": unknown error\n"); } purgecount++; } } m_reason.clear(); try { statusUpdater()->update(DbIxStatus::DBIXS_FLUSH, ""); m_ndb->xwdb.commit(); } XCATCHERROR(m_reason); statusUpdater()->update(DbIxStatus::DBIXS_NONE, ""); if (!m_reason.empty()) { LOGERR("Db::purge: 2nd flush failed: " << m_reason << "\n"); return false; } return true; } // Test for doc existence. bool Db::docExists(const string& uniterm) { #ifdef IDX_THREADS // Need to protect read db against multiaccess. std::unique_lock lock(m_ndb->m_mutex); #endif string ermsg; try { Xapian::PostingIterator docid = m_ndb->xrdb.postlist_begin(uniterm); if (docid == m_ndb->xrdb.postlist_end(uniterm)) { return false; } else { return true; } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("Db::docExists(" << uniterm << ") " << ermsg << "\n"); } return false; } /* Delete document(s) for given unique identifier (doc and descendents) */ bool Db::purgeFile(const string &udi, bool *existed) { LOGDEB("Db:purgeFile: [" << udi << "]\n"); if (nullptr == m_ndb || !m_ndb->m_iswritable) return false; string uniterm = Native::make_uniterm(udi); bool exists = docExists(uniterm); if (existed) *existed = exists; if (!exists) return true; #ifdef IDX_THREADS if (m_ndb->m_havewriteq) { string rztxt; DbUpdTask *tp = new DbUpdTask(DbUpdTask::Delete, udi, uniterm, nullptr, (size_t)-1, rztxt); if (!m_ndb->m_wqueue.put(tp)) { LOGERR("Db::purgeFile:Cant queue task\n"); return false; } return true; } #endif /* We get there is IDX_THREADS is not defined or there is no queue */ return m_ndb->purgeFileWrite(false, udi, uniterm); } // Delete subdocs with an out of date sig. We do this to purge obsolete subdocs during a partial // update where no general purge will be done. bool Db::purgeOrphans(const string &udi) { LOGDEB("Db:purgeOrphans: [" << udi << "]\n"); if (nullptr == m_ndb || !m_ndb->m_iswritable) return false; string uniterm = Native::make_uniterm(udi); #ifdef IDX_THREADS if (m_ndb->m_havewriteq) { string rztxt; DbUpdTask *tp = new DbUpdTask(DbUpdTask::PurgeOrphans, udi, uniterm, nullptr, (size_t)-1, rztxt); if (!m_ndb->m_wqueue.put(tp)) { LOGERR("Db::purgeFile:Cant queue task\n"); return false; } return true; } #endif /* We get there is IDX_THREADS is not defined or there is no queue */ return m_ndb->purgeFileWrite(true, udi, uniterm); } bool Db::dbStats(DbStats& res, bool listfailed) { if (!m_ndb || !m_ndb->m_isopen) return false; Xapian::Database xdb = m_ndb->xrdb; XAPTRY(res.dbdoccount = xdb.get_doccount(); res.dbavgdoclen = xdb.get_avlength(); res.mindoclen = xdb.get_doclength_lower_bound(); res.maxdoclen = xdb.get_doclength_upper_bound(); , xdb, m_reason); if (!m_reason.empty()) return false; if (!listfailed) { return true; } // listfailed is set : look for failed docs string ermsg; try { for (unsigned int docid = 1; docid < xdb.get_lastdocid(); docid++) { try { Xapian::Document doc = xdb.get_document(docid); string sig = doc.get_value(VALUE_SIG); if (sig.empty() || sig.back() != '+') { continue; } string data = doc.get_data(); ConfSimple parms(data); if (!parms.ok()) { } else { string url, ipath; parms.get(Doc::keyipt, ipath); parms.get(Doc::keyurl, url); // Turn to local url or not? It seems to make more // sense to keep the original urls as seen by the // indexer. // m_config->urlrewrite(dbdir, url); if (!ipath.empty()) { url += " | " + ipath; } res.failedurls.push_back(url); } } catch (Xapian::DocNotFoundError) { continue; } } } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("Db::dbStats: " << ermsg << "\n"); return false; } return true; } // Retrieve document defined by Unique doc identifier. This is used // by the GUI history feature and by open parent/getenclosing // ! The return value is always true except for fatal errors. Document // existence should be tested by looking at doc.pc bool Db::getDoc(const string &udi, const Doc& idxdoc, Doc &doc) { LOGDEB1("Db:getDoc: [" << udi << "]\n"); int idxi = idxdoc.idxi; return getDoc(udi, idxi, doc); } bool Db::getDoc(const string &udi, const std::string& dbdir, Doc &doc, bool fetchtext) { LOGDEB1("Db::getDoc(udi, dbdir): (" << udi << ", " << dbdir << ")\n"); int idxi = -1; if (dbdir.empty() || dbdir == m_basedir) { idxi = 0; } else { for (unsigned int i = 0; i < m_extraDbs.size(); i++) { if (dbdir == m_extraDbs[i]) { idxi = int(i + 1); break; } } } LOGDEB1("Db::getDoc(udi, dbdir): idxi: " << idxi << "\n"); if (idxi < 0) { LOGERR("Db::getDoc(udi, dbdir): dbdir not in current extra dbs\n"); return false; } return getDoc(udi, idxi, doc, fetchtext); } bool Db::getDoc(const string& udi, int idxi, Doc& doc, bool fetchtext) { LOGDEB0("Db::getDoc: udi [" << udi << "] idxi " << idxi << "\n"); // Initialize what we can in any case. If this is history, caller will make partial display in // case of error if (nullptr == m_ndb) return false; doc.meta[Rcl::Doc::keyrr] = "100%"; doc.pc = 100; Xapian::Document xdoc; Xapian::docid docid = m_ndb->getDoc(udi, idxi, xdoc); if (docid) { string data = xdoc.get_data(); doc.meta[Doc::keyudi] = udi; return m_ndb->dbDataToRclDoc(docid, xdoc, data, doc, fetchtext); } else { // Document found in history no longer in the database. We return true (because their might // be other ok docs further) but indicate the error with pc = -1 doc.pc = -1; LOGINFO("Db:getDoc: no such doc in current index: [" << udi << "]\n"); return true; } } // Retrieve UDI for query result document. We do this lazily because it's actually rarely needed and // takes about 20% of the document fetch time because of the need to access the term list. std::string Db::fetchUdi(Doc& doc) { std::string& udi = doc.meta[Doc::keyudi]; if (!udi.empty()) { return udi; } if (!doc.xdocid) { return udi; } if (!m_ndb || !m_ndb->m_isopen) { m_reason = "Db::fetchUdi: called on non-opened db\n"; return udi; } m_ndb->docidToUdi(doc.xdocid, udi); return udi; } bool Db::getDocRawText(Doc& doc) { if (!m_ndb || !m_ndb->m_isopen) { LOGERR("Db::getDocRawText: called on non-opened db\n"); return false; } return m_ndb->getRawText(fetchUdi(doc), doc.xdocid, doc.text); } bool Db::hasSubDocs(Doc &idoc) { if (nullptr == m_ndb) return false; string inudi = fetchUdi(idoc); if (inudi.empty()) { LOGERR("Db::hasSubDocs: no input udi or empty\n"); return false; } LOGDEB1("Db::hasSubDocs: idxi " << idoc.idxi << " inudi [" << inudi << "]\n"); // Not sure why we perform both the subDocs() call and the test on // has_children. The former will return docs if the input is a // file-level document, but the latter should be true both in this // case and if the input is already a subdoc, so the first test // should be redundant. Does not hurt much in any case, to be // checked one day. vector docids; if (!m_ndb->subDocs(inudi, idoc.idxi, docids)) { LOGDEB("Db::hasSubDocs: lower level subdocs failed\n"); return false; } if (!docids.empty()) return true; // Check if doc has an "has_children" term if (m_ndb->hasTerm(inudi, idoc.idxi, has_children_term)) return true; return false; } // Retrieve all subdocuments of a given one, which may not be a file-level // one (in which case, we have to retrieve this first, then filter the ipaths) bool Db::getSubDocs(Doc &idoc, vector& subdocs) { if (nullptr == m_ndb) return false; string inudi = fetchUdi(idoc); if (inudi.empty()) { LOGERR("Db::getSubDocs: no input udi or empty\n"); return false; } string rootudi; string ipath = idoc.ipath; LOGDEB0("Db::getSubDocs: idxi " << idoc.idxi << " inudi [" << inudi << "] ipath [" << ipath << "]\n"); if (ipath.empty()) { // File-level doc. Use it as root rootudi = inudi; } else { // See if we have a parent term Xapian::Document xdoc; if (!m_ndb->getDoc(inudi, idoc.idxi, xdoc)) { LOGERR("Db::getSubDocs: can't get Xapian document\n"); return false; } Xapian::TermIterator xit; XAPTRY(xit = xdoc.termlist_begin(); xit.skip_to(wrap_prefix(parent_prefix)), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::getSubDocs: xapian error: " << m_reason << "\n"); return false; } if (xit == xdoc.termlist_end() || get_prefix(*xit) != parent_prefix) { LOGERR("Db::getSubDocs: parent term not found\n"); return false; } rootudi = strip_prefix(*xit); } LOGDEB("Db::getSubDocs: root: [" << rootudi << "]\n"); // Retrieve all subdoc xapian ids for the root vector docids; if (!m_ndb->subDocs(rootudi, idoc.idxi, docids)) { LOGDEB("Db::getSubDocs: lower level subdocs failed\n"); return false; } // Retrieve doc, filter, and build output list for (int tries = 0; tries < 2; tries++) { try { for (const auto docid : docids) { Xapian::Document xdoc = m_ndb->xrdb.get_document(docid); string data = xdoc.get_data(); Doc doc; doc.meta[Doc::keyrr] = "100%"; doc.pc = 100; if (!m_ndb->dbDataToRclDoc(docid, xdoc, data, doc)) { LOGERR("Db::getSubDocs: doc conversion error\n"); return false; } if (ipath.empty() || FileInterner::ipathContains(ipath, doc.ipath)) { subdocs.push_back(doc); } } return true; } catch (const Xapian::DatabaseModifiedError &e) { m_reason = e.get_msg(); m_ndb->xrdb.reopen(); continue; } XCATCHERROR(m_reason); break; } LOGERR("Db::getSubDocs: Xapian error: " << m_reason << "\n"); return false; } bool Db::getContainerDoc(Doc &idoc, Doc& ctdoc) { if (nullptr == m_ndb) return false; string inudi = fetchUdi(idoc); if (!inudi.empty()) { LOGERR("Db::getContainerDoc: no input udi or empty\n"); return false; } string rootudi; string ipath = idoc.ipath; LOGDEB0("Db::getContainerDoc: idxi " << idoc.idxi << " inudi [" << inudi << "] ipath [" << ipath << "]\n"); if (ipath.empty()) { // File-level doc ?? ctdoc = idoc; return true; } // See if we have a parent term Xapian::Document xdoc; if (!m_ndb->getDoc(inudi, idoc.idxi, xdoc)) { LOGERR("Db::getContainerDoc: can't get Xapian document\n"); return false; } Xapian::TermIterator xit; XAPTRY(xit = xdoc.termlist_begin(); xit.skip_to(wrap_prefix(parent_prefix)), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::getContainerDoc: xapian error: " << m_reason << "\n"); return false; } if (xit == xdoc.termlist_end() || get_prefix(*xit) != parent_prefix) { LOGERR("Db::getContainerDoc: parent term not found\n"); return false; } rootudi = strip_prefix(*xit); if (!getDoc(rootudi, idoc.idxi, ctdoc)) { LOGERR("Db::getContainerDoc: can't get container document\n"); return false; } return true; } // Walk an UDI section (all UDIs beginning with input prefix), and mark all docs and subdocs as // existing. Caller beware: Makes sense or not depending on the UDI structure for the data store. In // practise, used for absent FS mountable volumes. bool Db::udiTreeMarkExisting(const string& udi) { LOGDEB("Db::udiTreeMarkExisting: " << udi << "\n"); string prefix = wrap_prefix(udi_prefix); string expr = udi + "*"; #ifdef IDX_THREADS std::unique_lock lock(m_ndb->m_mutex); #endif bool ret = m_ndb->idxTermMatch_p( int(ET_WILD), expr, prefix, [this, &udi](const string& term, Xapian::termcount, Xapian::doccount) { Xapian::PostingIterator docid; XAPTRY(docid = m_ndb->xrdb.postlist_begin(term), m_ndb->xrdb, m_reason); if (!m_reason.empty()) { LOGERR("Db::udiTreeWalk: xapian::postlist_begin failed: " << m_reason << "\n"); return false; } if (docid == m_ndb->xrdb.postlist_end(term)) { LOGDEB("Db::udiTreeWalk:no doc for " << term << " ??\n"); return false; } i_setExistingFlags(udi, *docid); LOGDEB0("Db::udiTreeWalk: uniterm: " << term << "\n"); return true; }); return ret; } } // End namespace Rcl recoll-1.43.12/rcldb/synfamily.h0000644000175000017500000001664715121730573015740 0ustar dockesdockes/* Copyright (C) 2012 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _SYNFAMILY_H_INCLUDED_ #define _SYNFAMILY_H_INCLUDED_ /** * The Xapian synonyms mechanism can be used for many things beyond actual * synonyms, anything that would turn a string into a group of equivalents. * Unfortunately, it has only one keyspace. * This class partitions the Xapian synonyms keyspace by using prefixes and * can provide different applications each with a family of keyspaces. * Two characters are reserved by the class and should not be used inside * either family or member names: ':' and ';' * A synonym key for family "stemdb", member "french", key "somestem" * looks like: * :stemdb:french:somestem -> somestem expansions * A special entry is used to list all the members for a family, e.g.: * :stemdb;members -> french, english ... */ #include #include #include #include "log.h" #include "xmacros.h" #include "strmatcher.h" namespace Rcl { class XapSynFamily { public: /** * Construct from readable xapian database and family name (ie: Stm) */ XapSynFamily(Xapian::Database xdb, const std::string& familyname) : m_rdb(xdb) { m_prefix1 = std::string(":") + familyname; } virtual ~XapSynFamily() = default; /** Retrieve all members of this family (e.g: french english german...) */ virtual bool getMembers(std::vector&); /** Debug: list map for one member to stdout */ virtual bool listMap(const std::string& membername); /** Expand term to list of synonyms for given member */ bool synExpand(const std::string& membername, const std::string& term, std::vector& result); // The prefix shared by all synonym entries inside a family member virtual std::string entryprefix(const std::string& member) { return m_prefix1 + ":" + member + ":"; } // The key for the "list of members" entry virtual std::string memberskey() { return m_prefix1 + ";" + "members"; } Xapian::Database& getdb() { return m_rdb; } protected: Xapian::Database m_rdb; std::string m_prefix1; }; /** Modify ops for a synonyms family * * A method to add a synonym entry inside a given member would make sense, * but would not be used presently as all these ops go through * ComputableSynFamMember objects */ class XapWritableSynFamily : public XapSynFamily { public: /** Construct with Xapian db open for r/w */ XapWritableSynFamily(Xapian::WritableDatabase db, const std::string& familyname) : XapSynFamily(db, familyname), m_wdb(db) {} virtual ~XapWritableSynFamily() = default; /** Delete all entries for one member (e.g. french), and remove from list * of members */ virtual bool deleteMember(const std::string& membername); /** Add to list of members. Idempotent, does not affect actual expansions */ virtual bool createMember(const std::string& membername); Xapian::WritableDatabase getdb() {return m_wdb;} protected: Xapian::WritableDatabase m_wdb; }; /** A functor which transforms a string */ class SynTermTrans { public: virtual ~SynTermTrans() = default; virtual std::string operator()(const std::string&) = 0; virtual std::string name() {return "SynTermTrans: unknown";} }; /** A member (set of root-synonyms associations) of a SynFamily for * which the root is computable from the input term. * The objects use a functor member to compute the term root on input * (e.g. compute the term sterm or casefold it */ class XapComputableSynFamMember { public: XapComputableSynFamMember(Xapian::Database xdb, std::string familyname, std::string membername, SynTermTrans* trans) : m_family(xdb, familyname), m_membername(membername), m_trans(trans), m_prefix(m_family.entryprefix(m_membername)) {} virtual ~XapComputableSynFamMember() = default; /** Expand a term to its list of synonyms. If filtertrans is set we * keep only the results which transform to the same value as the input * This is used for example for filtering the result of case+diac * expansion when only either case or diac expansion is desired. */ bool synExpand(const std::string& term, std::vector& result, SynTermTrans *filtertrans = nullptr); /** Same with also wildcard/regexp expansion of entry against the keys. * The input matcher will be modified to fit our key format. */ bool synKeyExpand(StrMatcher* in, std::vector& result, SynTermTrans *filtertrans = nullptr); private: XapSynFamily m_family; std::string m_membername; SynTermTrans *m_trans; std::string m_prefix; }; /** Computable term root SynFamily member, modify ops */ class XapWritableComputableSynFamMember { public: XapWritableComputableSynFamMember( Xapian::WritableDatabase xdb, std::string familyname, std::string membername, SynTermTrans* trans) : m_family(xdb, familyname), m_membername(membername), m_trans(trans), m_prefix(m_family.entryprefix(m_membername)) {} virtual ~XapWritableComputableSynFamMember() = default; virtual bool addSynonym(const std::string& term) { LOGDEB2("addSynonym:me " << this << " term [" << term << "] m_trans " << m_trans << "\n"); std::string transformed = (*m_trans)(term); LOGDEB2("addSynonym: transformed [" << transformed << "]\n"); if (transformed == term) return true; std::string ermsg; try { m_family.getdb().add_synonym(m_prefix + transformed, term); } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("XapWritableComputableSynFamMember::addSynonym: xapian error " << ermsg << "\n"); return false; } return true; } void clear() { m_family.deleteMember(m_membername); } void recreate() { clear(); m_family.createMember(m_membername); } private: XapWritableSynFamily m_family; std::string m_membername; SynTermTrans *m_trans; std::string m_prefix; }; // // Prefixes are centrally defined here to avoid collisions // // Lowercase accented stem to expansion. Family member name: language static const std::string synFamStem("Stm"); // Lowercase unaccented stem to expansion. Family member name: language static const std::string synFamStemUnac("StU"); // Lowercase unaccented term to case and accent variations. Only one // member, named "all". This set is used for separate case/diac // expansion by post-filtering the results of dual expansion. static const std::string synFamDiCa("DCa"); } // end namespace Rcl #endif /* _SYNFAMILY_H_INCLUDED_ */ recoll-1.43.12/rcldb/rcldb_p.h0000644000175000017500000004230015121730573015313 0ustar dockesdockes/* Copyright (C) 2007 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _rcldb_p_h_included_ #define _rcldb_p_h_included_ #include "autoconfig.h" #include #include #include #include #include #include #ifndef XAPIAN_AT_LEAST // Added in Xapian 1.4.2. Define it here for older versions #define XAPIAN_AT_LEAST(A,B,C) \ (XAPIAN_MAJOR_VERSION > (A) || \ (XAPIAN_MAJOR_VERSION == (A) && \ (XAPIAN_MINOR_VERSION > (B) || \ (XAPIAN_MINOR_VERSION == (B) && XAPIAN_REVISION >= (C))))) #endif #ifdef IDX_THREADS #include "workqueue.h" #endif // IDX_THREADS #include "termproc.h" #include "xmacros.h" #include "log.h" #include "rclconfig.h" #include "cstr.h" #include "rclutil.h" #include "md5.h" namespace Rcl { class Query; // Some prefixes that we could get from the fields file, but are not going to ever change. extern const std::string pathelt_prefix; extern const std::string mimetype_prefix; extern const std::string udi_prefix; extern const std::string parent_prefix; extern const std::string unsplitFilenameFieldName; extern const std::string fileext_prefix; extern std::string start_of_field_term; extern std::string end_of_field_term; extern const std::string page_break_term; extern const std::string has_children_term; // Synthetic abstract marker (to discriminate from abstract actually found in document) extern const std::string cstr_syntAbs; extern const std::string cstr_mbreaks; // Field name for the unsplit file name. Has to exist in the field file // because of usage in termmatch() extern const std::string unsplitFilenameFieldName; extern const std::string unsplitfilename_prefix; extern const std::string cstr_RCL_IDX_VERSION_KEY; extern const std::string cstr_RCL_IDX_VERSION; extern const std::string cstr_RCL_IDX_DESCRIPTOR_KEY; inline bool has_prefix(const std::string& trm) { if (o_index_stripchars) { return !trm.empty() && 'A' <= trm[0] && trm[0] <= 'Z'; } else { return !trm.empty() && trm[0] == ':'; } } inline std::string strip_prefix(const std::string& trm) { if (!has_prefix(trm)) return trm; std::string::size_type st = 0; if (o_index_stripchars) { st = trm.find_first_not_of("ABCDEFIJKLMNOPQRSTUVWXYZ"); #ifdef _WIN32 // We have a problem there because we forgot to lowercase the drive // name. So if the found character is a colon consider the drive name as // the first non capital even if it is uppercase if (st != std::string::npos && st >= 2 && trm[st] == ':') { st -= 1; } #endif } else { st = trm.find_first_of(":", 1) + 1; } if (st == std::string::npos) { return std::string(); // ?? } return trm.substr(st); } inline std::string get_prefix(const std::string& trm) { if (!has_prefix(trm)) return std::string(); std::string::size_type st = 0; if (o_index_stripchars) { st = trm.find_first_not_of("ABCDEFIJKLMNOPQRSTUVWXYZ"); if (st == std::string::npos) { return std::string(); // ?? } #ifdef _WIN32 // We have a problem there because we forgot to lowercase the drive // name. So if the found character is a colon consider the drive name as // the first non capital even if it is uppercase if (st >= 2 && trm[st] == ':') { st -= 1; } #endif return trm.substr(0, st); } else { st = trm.find_first_of(":", 1) + 1; if (st == std::string::npos) { return std::string(); // ?? } return trm.substr(1, st-2); } } inline std::string wrap_prefix(const std::string& pfx) { if (o_index_stripchars) { return pfx; } else { return cstr_colon + pfx + cstr_colon; } } #ifdef IDX_THREADS // Task for the index update thread. This can be: // - add/update for a new / update document // - delete for a deleted document // - purgeOrphans when a multidoc file is updated during a partial pass (no general purge). // We want to remove the subDocs that possibly don't exist anymore. We find them by their // different sig. // txtlen and doc are only valid for add/update else, len is (size_t)-1 and doc is empty class DbUpdTask { public: enum Op {AddOrUpdate, Delete, PurgeOrphans, Flush}; // Note that udi and uniterm are strictly equivalent and are // passed both just to avoid recomputing uniterm which is // available on the caller site. // Take some care to avoid sharing string data (if string impl is cow) DbUpdTask(Op _op, const std::string& ud, const std::string& un, std::unique_ptr d, size_t tl, std::string& rztxt) : op(_op), udi(ud.begin(), ud.end()), uniterm(un.begin(), un.end()), doc(std::move(d)), txtlen(tl) { rawztext.swap(rztxt); } // Udi and uniterm equivalently designate the doc Op op; std::string udi; std::string uniterm; std::unique_ptr doc; // txtlen is used to update the flush interval. It's -1 for a // purge because we actually don't know it, and the code fakes a // text length based on the term count. size_t txtlen; std::string rawztext; // Compressed doc text }; #endif // IDX_THREADS class TextSplitDb; // A class for data and methods that would have to expose Xapian-specific stuff if they were in // Rcl::Db. There could actually be 2 different ones for indexing or query as there is not much in // common. class Db::Native { public: Db *m_rcldb; // Parent bool m_isopen{false}; bool m_iswritable{false}; bool m_noversionwrite{false}; //Set if open failed because of version mismatch! bool m_storetext{false}; #ifdef IDX_THREADS WorkQueue m_wqueue; std::mutex m_mutex; long long m_totalworkns{0}; bool m_havewriteq{false}; void maybeStartThreads(); friend void *DbUpdWorker(void*); //// Temporary mergeable indexes parameters and data // Count from config. May be overriden by general thread config int m_tmpdbcnt{0}; // After startup: actual number of initialized temporary indexes int m_tmpdbinitidx{0}; std::mutex m_initidxmutex; WorkQueue m_mwqueue; std::vector m_tmpdbs; std::vector> m_tmpdbdirs; std::vector m_tmpdbflushflags; friend void *DbMUpdWorker(void*); #endif // IDX_THREADS // Indexing Xapian::WritableDatabase xwdb; // Querying (active even if the wdb is too) Xapian::Database xrdb; Native(Db *db); ~Native(); Native(const Native &) = delete; Native& operator=(const Native &) = delete; void openWrite(const std::string& dir, Db::OpenMode mode, int flags); void openRead(const std::string& dir); // Determine if an existing index is of the full-text-storing kind // by looking at the index metadata. Stores the result in m_storetext void storesDocText(Xapian::Database&); // Final steps of doc update, part which need to be single-threaded bool addOrUpdateWrite(const std::string& udi, const std::string& uniterm, std::unique_ptr doc, size_t txtlen, std::string& rawztext); /** Delete all documents which are contained in the input document, which must be a file-level * one. * * @param onlyOrphans if true, only delete documents which have not the same signature as the * input. This is used to delete docs which do not exist any more in the file after an update, * for example the tail messages after a folder truncation). If false, delete all. * @param udi the parent document identifier. * @param uniterm equivalent to udi, passed just to avoid recomputing. */ bool purgeFileWrite(bool onlyOrphans, const std::string& udi, const std::string& uniterm); /** Check if file system too full according to its state and our parameters */ bool fsFull(); bool getPagePositions(Xapian::docid docid, std::vector& vpos); int getPageNumberForPosition(const std::vector& pbreaks, int pos); bool dbDataToRclDoc(Xapian::docid docid, Xapian::Document& xdoc, std::string &data, Doc &doc, bool fetchtext = false); size_t whatDbIdx(Xapian::docid id); Xapian::docid whatDbDocid(Xapian::docid); /** Retrieve a Xapian::Document and Xapian::docid, given the external Unique Document * Identifier, using the posting list for the UDI-derived term. * * @param udi the unique document identifier (e.g. for fsindexer, opaque hashed path+ipath). * @param idxi the database index, at query time, when using external databases. * @param[out] xdoc the xapian document. * @return 0 if not found */ Xapian::docid getDoc(const std::string& udi, int idxi, Xapian::Document& xdoc); /** Retrieve the unique document identifier for a given Xapian document, using the document * termlist */ bool xdocToUdi(Xapian::Document& xdoc, std::string &udi); bool docidToUdi(Xapian::docid xid, std::string& udi); /** Check if doc is indexed by term */ bool hasTerm(const std::string& udi, int idxi, const std::string& term); /** Turn processed document into Xapian document by creating postings, data record etc. */ bool docToXdoc( TextSplitDb *splitter, const std::string& parent_udi, const std::string& uniterm, Doc& doc, Xapian::Document& xdoc, std::string& rawztext, std::vector >& pageincrvec); /** Update existing Xapian document for pure extended attrs change */ bool docToXdocMetaOnly( TextSplitDb *splitter, const std::string &udi, Doc &doc, Xapian::Document& xdoc); /** Remove all terms currently indexed for field defined by idx prefix */ bool clearField(Xapian::Document& xdoc, const std::string& pfx, Xapian::termcount wdfdec); /** Check if term wdf is 0 and remove term if so */ bool clearDocTermIfWdf0(Xapian::Document& xdoc, const std::string& term); /** Compute the list of subdocuments for a given udi. We look for documents indexed by a parent * term matching the udi, the posting list for the parentterm(udi) (As suggested by James * Aylett) * * Note that this is not currently recursive: all subdocs are supposed to be children of the * standalone file doc. * I.e.: in a mail folder, all messages, attachments, attachments of attached messages etc. must * have the folder file document as parent. * * Finer grain parent-child relationships are defined by the indexer (rcldb user), using the * ipath. */ bool subDocs(const std::string &udi, int idxi, std::vector& docids); /** Final matcher. All term transformations are done, we are just matching the input * expression against index stored terms. * @param matchtyp match type: can be ET_NONE, ET_WILDCARD or ET_REGEXP. * @param expr prefix-less expression to be matched against. * @param client function to be called when a matching term is found. The term parameter * will have no prefix. * @return false for error (Xapian issue mostly). */ bool idxTermMatch_p(int matchtyp, const std::string &expr, const std::string& prefix, std::function client); /** Check if a page position list is defined */ bool hasPages(Xapian::docid id); // Document stored text Xapian metadata key. We initially used the document id, but this does // not work for merging temporary indexes (collisions). We now use the doc unique term. std::string rawtextMetaKey(const std::string& uniterm) { std::string digest; return MD5String(uniterm, digest); } // Initial key used for the stored text Xapian metadata key. This subsists in old indexes, so // it's used as a fallback when querying if we don't find the new key. Initial comment: // Xapian's Olly Betts advises to use a key which will sort the same as the docid (which we do), // and to use Xapian's pack.h:pack_uint_preserving_sort() which is efficient but hard to // read. I'd wager that this does not make much of a difference. 10 ascii bytes gives us 10 // billion docs, which is enough (says I). std::string rawtextMetaKey(Xapian::docid did) { char buf[30]; snprintf(buf, sizeof(buf), "%010d", did); return buf; } bool getRawText(const std::string& udi, Xapian::docid docid, std::string& rawtext); void deleteDocument(Xapian::docid docid) { std::string metareason; XAPTRY(xwdb.set_metadata(rawtextMetaKey(docid), std::string()), xwdb, metareason); if (!metareason.empty()) { LOGERR("deleteDocument: set_metadata error: " << metareason << "\n"); // not fatal } xwdb.delete_document(docid); } std::string rcldocToDbData( Doc& doc, Xapian::Document& newdocument, std::vector >& pageincrvec); // Compute the unique term used to link documents to their origin. // "Q" + external udi static inline std::string make_uniterm(const std::string& udi) { std::string uniterm(wrap_prefix(udi_prefix)); uniterm.append(udi); return uniterm; } // Compute parent term used to link documents to their parent document (if any) // "F" + parent external udi static inline std::string make_parentterm(const std::string& udi) { std::string pterm(wrap_prefix(parent_prefix)); pterm.append(udi); return pterm; } }; // This is the term position offset at which we index the body text. Abstract, keywords, etc.. are // stored before this. static const unsigned int baseTextPosition = 100000; static const int MB = 1024 * 1024; // The splitter breaks text into words and adds postings to the Xapian // document. We use a single object to split all of the document // fields and position jumps to separate fields class TextSplitDb : public TextSplitP { public: Xapian::Document &doc; // Xapian document // Base for document section. Gets large increment when we change // sections, to avoid cross-section proximity matches. Xapian::termpos basepos; // Current relative position. This is the remembered value from // the splitter callback. The term position is reset for each call // to text_to_words(), so that the last value of curpos is the // section size (last relative term position), and this is what // gets added to basepos in addition to the inter-section increment // to compute the first position of the next section. Xapian::termpos curpos; Xapian::WritableDatabase& wdb; TextSplitDb(Xapian::WritableDatabase& _wdb, Xapian::Document &d, TermProc *prc) : TextSplitP(prc), doc(d), basepos(1), curpos(0), wdb(_wdb) {} // Reimplement text_to_words to insert the begin and end anchor terms. virtual bool text_to_words(const std::string &in) override { std::string ermsg; if (!o_no_term_positions) { try { // Index the possibly prefixed start term. doc.add_posting(ft.pfx + start_of_field_term, basepos, ft.wdfinc); ++basepos; } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("Db: xapian add_posting error " << ermsg << "\n"); goto out; } } if (!TextSplitP::text_to_words(in)) { LOGDEB("TextSplitDb: TextSplit::text_to_words failed\n"); goto out; } if (!o_no_term_positions) { try { // Index the possibly prefixed end term. doc.add_posting(ft.pfx + end_of_field_term, basepos + curpos + 1, ft.wdfinc); ++basepos; } XCATCHERROR(ermsg); if (!ermsg.empty()) { LOGERR("Db: xapian add_posting error " << ermsg << "\n"); goto out; } } out: basepos += curpos + 100; return true; } void setTraits(const FieldTraits& ftp) { ft = ftp; if (!ft.pfx.empty()) ft.pfx = wrap_prefix(ft.pfx); } friend class TermProcIdx; private: FieldTraits ft; }; } // namespace Rcl // Append element to the data record #define RECORD_APPEND(R, NM, VAL) {R += NM + "=" + VAL + "\n";} #endif /* _rcldb_p_h_included_ */ recoll-1.43.12/rcldb/daterange.cpp0000644000175000017500000001124715121730573016201 0ustar dockesdockes/* The dates-to-query routine is is lifted quasi-verbatim but * modified from xapian-omega:date.cc. Copyright info: * * Copyright 1999,2000,2001 BrightStation PLC * Copyright 2001 James Aylett * Copyright 2001,2002 Ananova Ltd * Copyright 2002 Intercede 1749 Ltd * Copyright 2002,2003,2006 Olly Betts * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include "autoconfig.h" #include "daterange.h" #include #include #include #include "log.h" #include "rclconfig.h" #include "smallut.h" #include "rclutil.h" using namespace std; namespace Rcl { static inline void bufprefix(char *buf, string pre) { const char* prechar = pre.c_str(); if (o_index_stripchars) { for (size_t i= 0; i< pre.length(); i++) { buf[i] = prechar[i]; } } else { buf[0] = ':'; for (size_t i= 1; i< pre.length()+1; i++) { buf[i] = prechar[i-1]; } buf[pre.length()+1] = ':'; } } static inline size_t bpoffs(string pre) { return o_index_stripchars ? pre.length() : pre.length()+2; } static Xapian::Query anydate_range_filter( const std::string& daypref, const std::string& monpref, const std::string& yearpref, int y1, int m1, int d1, int y2, int m2, int d2) { // We're doing at most 8 digits + prefix char buf[200]; vector v; // Deal with days till the end of the first month if any bufprefix(buf, daypref); auto offs = bpoffs(daypref); snprintf(buf + offs, sizeof(buf) - offs, "%04d%02d", y1, m1); int d_last = monthdays(m1, y1); int d_end = d_last; if (y1 == y2 && m1 == m2 && d2 < d_last) { d_end = d2; } if (d1 > 1 || d_end < d_last) { for ( ; d1 <= d_end ; d1++) { offs = 6 + bpoffs(daypref); snprintf(buf + offs, sizeof(buf) - offs, "%02d", d1); v.push_back(Xapian::Query(buf)); } } else { bufprefix(buf, monpref); v.push_back(Xapian::Query(buf)); } if (y1 == y2 && m1 == m2) { return Xapian::Query(Xapian::Query::OP_OR, v.begin(), v.end()); } // Months till the end of first year int m_last = (y1 < y2) ? 12 : m2 - 1; bufprefix(buf, monpref); while (++m1 <= m_last) { offs = 4 + bpoffs(monpref); snprintf(buf + offs, sizeof(buf) - offs, "%02d", m1); v.push_back(Xapian::Query(buf)); } // Years inbetween and first months of the last year if (y1 < y2) { bufprefix(buf, yearpref); while (++y1 < y2) { offs = bpoffs(yearpref); snprintf(buf + offs, sizeof(buf) - offs, "%04d", y1); v.push_back(Xapian::Query(buf)); } bufprefix(buf, monpref); snprintf(buf + bpoffs(monpref), sizeof(buf) - offs, "%04d", y2); for (m1 = 1; m1 < m2; m1++) { offs = 4 + bpoffs(monpref); snprintf(buf + offs, sizeof(buf) - offs, "%02d", m1); v.push_back(Xapian::Query(buf)); } } // Last month offs = 4 + bpoffs(monpref); snprintf(buf + offs, sizeof(buf) - offs, "%02d", m2); // Deal with any final partial month if (d2 < monthdays(m2, y2)) { bufprefix(buf, daypref); for (d1 = 1 ; d1 <= d2; d1++) { offs = 6 + bpoffs(daypref); snprintf(buf + offs, sizeof(buf) - offs, "%02d", d1); v.push_back(Xapian::Query(buf)); } } else { bufprefix(buf, monpref); v.push_back(Xapian::Query(buf)); } return Xapian::Query(Xapian::Query::OP_OR, v.begin(), v.end()); } Xapian::Query date_range_filter(int y1, int m1, int d1, int y2, int m2, int d2) { return anydate_range_filter(xapday_prefix, xapmonth_prefix, xapyear_prefix, y1, m1, d1, y2, m2, d2); } #ifdef EXT4_BIRTH_TIME Xapian::Query brdate_range_filter(int y1, int m1, int d1, int y2, int m2, int d2) { return anydate_range_filter(xapbriday_prefix, xapbrimonth_prefix, xapbriyear_prefix, y1, m1, d1, y2, m2, d2); } #endif } recoll-1.43.12/rclgrep/0000755000175000017500000000000015121730573014106 5ustar dockesdockesrecoll-1.43.12/rclgrep/meson.build0000644000175000017500000000460315121730573016253 0ustar dockesdockes#rclgrep_incdirs = [librecoll_incdir, '..', '../query',] rclgrep_incdirs = [librecoll_incdir, '..',] rclgrep_sources = [ 'rclgrep.cpp', '../bincimapmime/convert.cc', '../bincimapmime/mime-parsefull.cc', '../bincimapmime/mime-parseonlyheader.cc', '../bincimapmime/mime-printbody.cc', '../bincimapmime/mime.cc', '../common/cstr.cpp', '../common/rclconfig.cpp', '../common/rclinit.cpp', '../common/rclutil.cpp', '../common/textsplit.cpp', '../common/kosplitter.cpp', '../common/cjksplitter.cpp', '../common/cnsplitter.cpp', '../common/webstore.cpp', '../index/exefetcher.cpp', '../index/fetcher.cpp', '../index/fsfetcher.cpp', '../index/idxdiags.cpp', '../index/mimetype.cpp', '../index/webqueuefetcher.cpp', '../internfile/extrameta.cpp', '../internfile/htmlparse.cpp', '../internfile/internfile.cpp', '../internfile/mh_exec.cpp', '../internfile/mh_execm.cpp', '../internfile/mh_html.cpp', '../internfile/mh_mail.cpp', '../internfile/mh_mbox.cpp', '../internfile/mh_text.cpp', '../internfile/mh_xslt.cpp', '../internfile/mimehandler.cpp', '../internfile/myhtmlparse.cpp', '../internfile/txtdcode.cpp', '../internfile/uncomp.cpp', '../rcldb/rcldoc.cpp', '../unac/unac.cpp', '../utils/base64.cpp', '../utils/boolexp.cpp', '../utils/cancelcheck.cpp', '../utils/chrono.cpp', '../utils/circache.cpp', '../utils/closefrom.cpp', '../utils/cmdtalk.cpp', '../utils/conftree.cpp', '../utils/copyfile.cpp', '../utils/cpuconf.cpp', '../utils/execmd.cpp', '../utils/fileudi.cpp', '../utils/fstreewalk.cpp', '../utils/idfile.cpp', '../utils/log.cpp', '../utils/md5.cpp', '../utils/md5ut.cpp', '../utils/mimeparse.cpp', '../utils/miniz.cpp', '../utils/netcon.cpp', '../utils/pathut.cpp', '../utils/pxattr.cpp', '../utils/readfile.cpp', '../utils/smallut.cpp', '../utils/transcode.cpp', '../utils/utf8iter.cpp', '../utils/wipedir.cpp', '../utils/zlibut.cpp', ] rclgrep_deps = [libxml, libxslt, libz] if get_option('libmagic') rclgrep_deps += libmagic endif if get_option('idxthreads') rclgrep_deps += dependency('threads') endif rclgrep = executable( 'rclgrep', rclgrep_sources, include_directories: rclgrep_incdirs, dependencies: rclgrep_deps, install: true, ) recoll-1.43.12/rclgrep/rclgrep.cpp0000644000175000017500000004511415121730573016255 0ustar dockesdockes/* Copyright (C) 2004 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include #include #ifndef _WIN32 #include #include #else #include #endif #include #include "safeunistd.h" #include #include #include #include #include #include #include #include #include #include "log.h" #include "rclinit.h" #include "rclconfig.h" #include "smallut.h" #include "readfile.h" #include "pathut.h" #include "rclutil.h" #include "cancelcheck.h" #include "execmd.h" #include "internfile.h" #include "rcldoc.h" #include "fstreewalk.h" // Command line options static int op_flags; #define OPT_A 0x1 #define OPT_B 0x2 #define OPT_C 0x4 #define OPT_H 0x8 #define OPT_L 0x10 #define OPT_R 0x20 #define OPT_T 0x40 #define OPT_V 0x80 #define OPT_Z 0x100 #define OPT_a 0x200 #define OPT_c 0x400 #define OPT_e 0x800 #define OPT_f 0x1000 #define OPT_h 0x2000 #define OPT_i 0x4000 #define OPT_l 0x8000 #define OPT_n 0x10000 #define OPT_p 0x20000 #define OPT_q 0x40000 #define OPT_r 0x80000 #define OPT_s 0x100000 #define OPT_u 0x200000 #define OPT_v 0x400000 #define OPT_w 0x800000 #define OPT_x 0x1000000 enum OptVal {OPTVAL_RECOLL_CONFIG=1000, OPTVAL_HELP, OPTVAL_INCLUDE, OPTVAL_EXCLUDE, OPTVAL_EXCLUDEFROM}; static struct option long_options[] = { {"regexp", required_argument, 0, 'e'}, {"file", required_argument, 0, 'f'}, {"invert-match", required_argument, 0, 'v'}, {"word-regexp", 0, 0, 'w'}, {"line-regexp", 0, 0, 'x'}, {"config", required_argument, 0, OPTVAL_RECOLL_CONFIG}, {"count", 0, 0, 'c'}, {"files-without-match", 0, 0, 'L'}, {"files-with-match", 0, 0, 'l'}, {"with-filename", 0, 0, 'H'}, {"no-filename", 0, 0, 'h'}, {"line-number", 0, 0, 'n'}, {"help", 0, 0, OPTVAL_HELP}, {"after-context", required_argument, 0, 'A'}, {"before-context", required_argument, 0, 'B'}, {"context", required_argument, 0, 'C'}, {"recurse", 0, 0, 'r'}, {"include", required_argument, 0, OPTVAL_INCLUDE}, {"version", 0, 0, 'V'}, {"silent", 0, 0, 'q'}, {"quiet", 0, 0, 'q'}, {"no-messages", 0, 0, 's'}, {"dereference-recursive", 0, 0, 'R'}, {"text", 0, 0, 'a'}, //not implemented {"exclude", required_argument, 0, OPTVAL_EXCLUDE}, {"exclude-from", required_argument, 0, OPTVAL_EXCLUDEFROM}, {0, 0, 0, 0} }; std::string thisprog; static const char usage [] = "\n" "rclgrep [--help] \n" " Print help\n" "rclgrep [pattern] []\n" " Search files and (recursively) directories for a match of .\n" " -e PATTERNS, --regexp=PATTERNS patterns to search for. Can be given multiple times.\n" " if -e is used, all non-option arguments will be used as paths (no [pattern] argument).\n" " -f FILE, --file=FILE get patterns from the file argument, one per line\n" " -r, --recurse: operate recursively on directories. This is the default except if no paths\n" " are given in which case rclgrep searches stdin. Use -r to cause recursing on . in this case\n" " --include=FN file name pattern for files to be searched. Can be given multiple times\n" " --exclude=FN file name pattern for files not to be searched. Can be given multiple times\n" " --exclude-from=FILE take file name exclusion patterns from FILE\n" " --config : specify configuration directory (default ~/.config/rclgrep)\n" " -v,-w,-x,-c,-L,-l,-H,-n,-A,-B,-C,-q,-s,-R : see grep manual.\n" ; static void Usage(FILE* fp = stdout) { fprintf(fp, "%s: Usage: %s", path_getsimple(thisprog).c_str(), usage); exit(1); } std::vector g_expressions; int g_reflags = SimpleRegexp::SRE_NOSUB; static RclConfig *config; namespace Rcl { // This is needed to satisfy a reference from one of the recoll files. std::string version_string() { return std::string("rclgrep ") + std::string(PACKAGE_VERSION); } } // Working directory before we change: it's simpler to change early // but some options need the original for computing absolute paths. static std::string orig_cwd; static std::string current_topdir; // Context management. We need to store the last seen lines in case we need to print them as // context. static int beforecontext; // Lines of context before match static int aftercontext; // Lines of context after match // Store line for before-context static void dequeshift(std::deque& q, int n, const std::string& ln) { if (n <= 0) return; if (q.size() >= unsigned(n)) { q.pop_front(); } q.push_back(ln); } // Show context lines before the match static void dequeprint(std::deque& q) { for (const auto& ln : q) { std::cout << ln; } } void grepit(std::istream& instream, const Rcl::Doc& doc) { std::string ppath; std::string indic; std::string nindic; if (op_flags & OPT_H) { ppath = fileurltolocalpath(doc.url); if (path_isabsolute(ppath) && ppath.size() > current_topdir.size()) { ppath = ppath.substr(current_topdir.size()); } ppath += ":"; ppath += doc.ipath; indic = "::"; nindic = "--"; } int matchcount = 0; std::deque beflines; int lnum = 0; std::string ln; bool inmatch{false}; int aftercount = 0; for (;;) { std::string line; getline(instream, line, '\n'); if (!instream.good()) { break; } ++lnum; if ((op_flags & OPT_n) && !(op_flags & OPT_c)) { ln = std::to_string(lnum) + ":"; } bool ismatch = false; for (const auto e_p : g_expressions) { auto match = e_p->simpleMatch(line); if (((op_flags & OPT_v) ^ match)) { ismatch = true; break; } } if (ismatch) { if (op_flags&OPT_q) { exit(0); } // We have a winner line. if (op_flags & OPT_c) { matchcount++; } else { // Stop printing after-context aftercount = 0; // If this is the beginning/first matching line, possibly output the before context if (!inmatch && beforecontext) { dequeprint(beflines); } inmatch=true; std::cout << ppath << indic << ln << line << "\n"; if (beforecontext && !beflines.empty()) { beflines.pop_front(); } } } else { if (op_flags&OPT_q) { continue; } // Non-matching line. if (inmatch && aftercontext && !(op_flags&OPT_c)) { aftercount = aftercontext; } inmatch = false; if (aftercount) { std::cout << ppath << nindic << ln << line << "\n"; aftercount--; if (aftercount == 0) std::cout << "--\n"; } else if (beforecontext) { dequeshift(beflines, beforecontext, ppath + nindic + ln + line + "\n"); } } } if (op_flags & OPT_L) { if (matchcount == 0) { std::cout << ppath << "\n"; } } else if (op_flags & OPT_l) { if (matchcount) { std::cout << ppath << "\n"; } } else if ((op_flags & OPT_c) && matchcount) { std::cout << ppath << "::" << matchcount << "\n"; } } bool processpath(RclConfig *config, const std::string& path) { LOGDEB1("processpath: [" << path << "]\n"); if (path.empty()) { // stdin Rcl::Doc doc; doc.url = std::string("file://") + "(standard input)"; grepit(std::cin, doc); } else { struct PathStat st; if (path_fileprops(path, &st, false) < 0) { std::cerr << path << " : "; perror("stat"); return false; } config->setKeyDir(path_getfather(path)); std::string mimetype; FileInterner interner(path, st, config, FileInterner::FIF_none); if (!interner.ok()) { return false; } mimetype = interner.getMimetype(); FileInterner::Status fis = FileInterner::FIAgain; Rcl::Doc doc; while (fis == FileInterner::FIAgain) { doc.erase(); try { fis = interner.internfile(doc); } catch (CancelExcept) { LOGERR("fsIndexer::processone: interrupted\n"); return false; } if (fis == FileInterner::FIError) { return false; } if (doc.url.empty()) doc.url = path_pathtofileurl(path); std::istringstream str(doc.text); grepit(str, doc); } } return true; } class WalkerCB : public FsTreeWalkerCB { public: WalkerCB(const std::vector& fnincl, RclConfig *config) : m_fnincludes(fnincl), m_config(config) {} virtual FsTreeWalker::Status processone( const std::string& fn, FsTreeWalker::CbFlag flg, const struct PathStat&) override { if (flg == FsTreeWalker::FtwRegular) { if (m_fnincludes.empty()) { processpath(m_config, fn); } else { for (const auto& pat : m_fnincludes) { if (fnmatch(pat.c_str(), path_getsimple(fn).c_str(), 0) == 0) { processpath(m_config, fn); break; } } } } return FsTreeWalker::FtwOk; } const std::vector& m_fnincludes; RclConfig *m_config{nullptr}; }; bool recursive_grep(RclConfig *config, const std::string& top, const std::vector& fnincludes, const std::vector& fnexcludes) { // std::cerr << "recursive_grep: top : [" << top << "]\n"; WalkerCB cb(fnincludes, config); int opts = FsTreeWalker::FtwTravNatural; if (op_flags & OPT_R) { opts |= FsTreeWalker::FtwFollow; } FsTreeWalker walker(opts); walker.setSkippedNames(fnexcludes); current_topdir = top; if (path_isdir(top)) { path_catslash(current_topdir); } walker.walk(top, cb); return true; } bool processpaths(RclConfig *config, const std::vector &_paths, const std::vector& fnincludes, const std::vector& fnexcludes) { if (_paths.empty()) return true; std::vector paths; std::string origcwd = config->getOrigCwd(); for (const auto& path : _paths) { paths.push_back(path_canon(path, &origcwd)); } std::sort(paths.begin(), paths.end()); auto uit = std::unique(paths.begin(), paths.end()); paths.resize(uit - paths.begin()); for (const auto& path : paths) { LOGDEB("processpaths: " << path << "\n"); if (path_isdir(path)) { recursive_grep(config, path, fnincludes, fnexcludes); } else { if (!path_readable(path)) { if (!(op_flags & OPT_s)) { std::cerr << "Can't read: " << path << "\n"; } continue; } processpath(config, path); } } return true; } std::string make_config() { std::string confdir; const char *cp = nullptr; cp = getenv("XDG_CONFIG_HOME"); if (nullptr != cp) { confdir = cp; } else { confdir = path_cat(path_home(), ".config"); } confdir = path_cat(confdir, "rclgrep"); if (!path_makepath(confdir, 0755)) { std::cerr << "Could not create configuration directory " << confdir << " : "; perror(""); exit(1); } std::string mainconf = path_cat(confdir, "recoll.conf"); if (!path_exists(mainconf)) { FILE *fp = fopen(mainconf.c_str(), "w"); if (nullptr == fp) { std::cerr << "Could not create configuration file " << mainconf << " : "; perror(""); exit(1); } fprintf(fp, "# rclgrep default configuration. Will only be created by the program if it\n"); fprintf(fp, "# does not exist, you can add your own customisations in here\n"); fprintf(fp, "helperlogfilename = /dev/null\n"); fprintf(fp, "textunknownasplain = 1\n"); fprintf(fp, "loglevel = 1\n"); fclose(fp); } return confdir; } static void add_expressions(const std::string& exps) { std::vector vexps; stringToTokens(exps, vexps, "\n"); for (const auto& pattern : vexps) { if (op_flags & OPT_x) { auto newpat = std::string("^(") + pattern + ")$"; g_expressions.push_back(new SimpleRegexp(newpat, g_reflags)); } else if (op_flags & OPT_w) { auto newpat = std::string("(^|[^a-zA-Z0-9_])(") + pattern + ")([^a-zA-Z0-9_]|$)"; g_expressions.push_back(new SimpleRegexp(newpat, g_reflags)); } else { g_expressions.push_back(new SimpleRegexp(pattern, g_reflags)); } } } std::vector g_expstrings; static void buildexps() { for (const auto& s : g_expstrings) add_expressions(s); } static void exps_from_file(const std::string& fn) { std::string data; std::string reason; if (!file_to_string(fn, data, -1, -1, &reason)) { std::cerr << "Could not read " << fn << " : " << reason << "\n"; exit(1); } g_expstrings.push_back(data); } std::string excludes_from_file(const std::string& fn) { std::string data; std::string reason; if (!file_to_string(fn, data, -1, -1, &reason)) { std::cerr << "Could not read " << fn << " : " << reason << "\n"; exit(1); } return data; } static std::vector buildexcludes(const std::vector& data) { std::vector ret; for (const auto& lst : data) { std::vector v; stringToTokens(lst, v, "\n"); for (const auto& s : v) { ret.push_back(s); } } return ret; } int main(int argc, char *argv[]) { int ret; std::string a_config; std::vector fnincludes; std::vector fnexcludedata; while ((ret = getopt_long(argc, argv, "A:B:C:HLRVce:f:hilnp:qrsvwx", long_options, NULL)) != -1) { switch (ret) { case 'A': op_flags |= OPT_A; aftercontext = atoi(optarg); break; case 'B': op_flags |= OPT_B; beforecontext = atoi(optarg); break; case 'C': op_flags |= OPT_C; aftercontext = beforecontext = atoi(optarg); break; case 'H': op_flags |= OPT_H; break; case 'L': op_flags |= OPT_L|OPT_c; break; case 'R': op_flags |= OPT_R; break; case 'V': std::cout << Rcl::version_string() << "\n"; return 0; case 'c': op_flags |= OPT_c; break; case 'e': op_flags |= OPT_e; g_expstrings.push_back(optarg); break; case 'f': op_flags |= OPT_f; exps_from_file(optarg);break; case 'h': op_flags |= OPT_h; break; case 'i': op_flags |= OPT_i; g_reflags |= SimpleRegexp::SRE_ICASE; break; case 'l': op_flags |= OPT_l|OPT_c; break; case 'n': op_flags |= OPT_n; break; case 'p': op_flags |= OPT_p; fnincludes.push_back(optarg); break; case 'q': op_flags |= OPT_q; break; case 'r': op_flags |= OPT_r|OPT_H; break; case 's': op_flags |= OPT_s; break; case 'v': op_flags |= OPT_v; break; case 'w': op_flags |= OPT_w; break; case 'x': op_flags |= OPT_x; break; case OPTVAL_RECOLL_CONFIG: a_config = optarg; break; case OPTVAL_HELP: Usage(stdout); break; case OPTVAL_INCLUDE: fnincludes.push_back(optarg); break; case OPTVAL_EXCLUDE: fnexcludedata.push_back(optarg); break; case OPTVAL_EXCLUDEFROM: fnexcludedata.push_back(excludes_from_file(optarg)); break; default: Usage(); break; } } int aremain = argc - optind; if (!(op_flags & (OPT_e|OPT_f))) { if (aremain == 0) Usage(); std::string patterns = argv[optind++]; aremain--; g_expstrings.push_back(patterns); } buildexps(); // If there are more than 1 file args and -h was not used, we want to print file names. if ((aremain > 1 || (aremain == 1 && path_isdir(argv[optind]))) && !(op_flags & OPT_h)) { op_flags |= OPT_H; } if (a_config.empty()) { a_config = make_config(); } std::string reason; int flags = 0; config = recollinit(flags, nullptr, nullptr, reason, &a_config); if (config == 0 || !config->ok()) { std::cerr << "Configuration problem: " << reason << "\n"; exit(1); } // Get rid of log messages Logger::getTheLog()->setLogLevel(Logger::LLFAT); orig_cwd = path_cwd(); std::string rundir; config->getConfParam("idxrundir", rundir); if (!rundir.empty()) { if (!rundir.compare("tmp")) { rundir = tmplocation(); } LOGDEB2("rclgrep: changing current directory to [" << rundir << "]\n"); if (!path_chdir(rundir)) { LOGSYSERR("main", "chdir", rundir); } } std::vector paths; if (aremain == 0 && !(op_flags & OPT_r)) { // Read from stdin processpath(config, std::string()); } else { if (aremain == 0) { paths.push_back("."); } else { while (aremain--) { paths.push_back(argv[optind++]); } } } auto fnexcludes = buildexcludes(fnexcludedata); bool status = processpaths(config, paths, fnincludes, fnexcludes); if (op_flags&OPT_q) { exit(1); } return status ? 0 : 1; } recoll-1.43.12/INSTALL0000644000175000017500000016164115121730572013511 0ustar dockesdockes More documentation can be found in the doc/ directory or at http://www.recoll.org Link: home: Recoll user manual Link: up: Recoll user manual Link: prev: 4.3. API Link: next: 5.2. Supporting packages Chapter 5. Installation and configuration Prev Next ---------------------------------------------------------------------- Chapter 5. Installation and configuration 5.1. Installing a binary copy Recoll binary copies are always distributed as regular packages for your system. They can be obtained either through the system's normal software distribution framework (e.g. Debian/Ubuntu apt, FreeBSD ports, etc.), or from some type of "backports" repository providing versions newer than the standard ones, or found on the Recoll WEB site in some cases. There used to exist another form of binary install, as pre-compiled source trees, but these are just less convenient than the packages and don't exist any more. The package management tools will usually automatically deal with hard dependencies for packages obtained from a proper package repository. You will have to deal with them by hand for downloaded packages (for example, when dpkg complains about missing dependencies). In all cases, you will have to check or install supporting applications for the file types that you want to index beyond those that are natively processed by Recoll (text, HTML, email files, and a few others). You should also maybe have a look at the configuration section (but this may not be necessary for a quick test with default parameters). Most parameters can be more conveniently set from the GUI interface. ---------------------------------------------------------------------- Prev Next 4.3. API Home 5.2. Supporting packages Link: home: Recoll user manual Link: up: Chapter 5. Installation and configuration Link: prev: Chapter 5. Installation and configuration Link: next: 5.3. Building from source 5.2. Supporting packages Prev Chapter 5. Installation and configuration Next ---------------------------------------------------------------------- 5.2. Supporting packages Recoll uses external applications to index some file types. You need to install them for the file types that you wish to have indexed (these are run-time optional dependencies. None is needed for building or running Recoll except for indexing their specific file type). After an indexing pass, the commands that were found missing can be displayed from the recoll File menu. The list is stored in the missing text file inside the configuration directory. A list of common file types which need external commands follows. Many of the handlers need the iconv command, which is not always listed as a dependency. Please note that, due to the relatively dynamic nature of this information, the most up to date version is now kept on http://www.recoll.org/pages/features.html along with links to the home pages or best source/patches pages, and misc tips. The list below is not updated often and may be quite stale. For many Linux distributions, most of the commands listed can be installed from the package repositories. However, the packages are sometimes outdated, or not the best version for Recoll, so you should take a look at http://www.recoll.org/pages/features.html if a file type is important to you. As of Recoll release 1.14, a number of XML-based formats that were handled by ad hoc handler code now use the xsltproc command, which usually comes with libxslt. These are: abiword, fb2 (ebooks), kword, openoffice, svg. Now for the list: o Openoffice files need unzip and xsltproc. o PDF files need pdftotext which is part of Poppler (usually comes with the poppler-utils package). Avoid the original one from Xpdf. o Postscript files need pstotext. The original version has an issue with shell character in file names, which is corrected in recent packages. See http://www.recoll.org/pages/features.html for more detail. o MS Word needs antiword. It is also useful to have wvWare installed as it may be be used as a fallback for some files which antiword does not handle. o MS Excel and PowerPoint are processed by internal Python handlers. o MS Open XML (docx) needs xsltproc. o Wordperfect files need wpd2html from the libwpd (or libwpd-tools on Ubuntu) package. o RTF files need unrtf, which, in its older versions, has much trouble with non-western character sets. Many Linux distributions carry outdated unrtf versions. Check http://www.recoll.org/pages/features.html for details. o TeX files need untex or detex. Check http://www.recoll.org/pages/features.html for sources if it's not packaged for your distribution. o dvi files need dvips. o djvu files need djvutxt and djvused from the DjVuLibre package. o Audio files: Recoll releases 1.14 and later use a single Python handler based on mutagen for all audio file types. o Pictures: Recoll uses the Exiftool Perl package to extract tag information. Most image file formats are supported. Note that there may not be much interest in indexing the technical tags (image size, aperture, etc.). This is only of interest if you store personal tags or textual descriptions inside the image files. o chm: files in Microsoft help format need Python and the pychm module (which needs chmlib). o ICS: up to Recoll 1.13, iCalendar files need Python and the icalendar module. icalendar is not needed for newer versions, which use internal code. o Zip archives need Python (and the standard zipfile module). o Rar archives need Python, the rarfile Python module and the unrar utility. o Midi karaoke files need Python and the Midi module o Konqueror webarchive format with Python (uses the Tarfile module). o Mimehtml web archive format (support based on the email handler, which introduces some mild weirdness, but still usable). Text, HTML, email folders, and Scribus files are processed internally. Lyx is used to index Lyx files. Many handlers need iconv and the standard sed and awk. ---------------------------------------------------------------------- Prev Up Next Chapter 5. Installation and configuration Home 5.3. Building from source Link: home: Recoll user manual Link: up: Chapter 5. Installation and configuration Link: prev: 5.2. Supporting packages Link: next: 5.4. Configuration overview 5.3. Building from source Prev Chapter 5. Installation and configuration Next ---------------------------------------------------------------------- 5.3. Building from source 5.3.1. Prerequisites If you can install any or all of the following through the package manager for your system, all the better. Especially Qt is a very big piece of software, but you will most probably be able to find a binary package. You may have to compile Xapian but this is easy. The shopping list: o C++ compiler. Up to Recoll version 1.13.04, its absence can manifest itself by strange messages about a missing iconv_open. o Development files for Xapian core. Important If you are building Xapian for an older CPU (before Pentium 4 or Athlon 64), you need to add the --disable-sse flag to the configure command. Else all Xapian application will crash with an illegal instruction error. o Development files for Qt 4 . Recoll has not been tested with Qt 5 yet. Recoll 1.15.9 was the last version to support Qt 3. If you do not want to install or build the Qt Webkit module, Recoll has a configuration option to disable its use (see further). o Development files for X11 and zlib. o You may also need libiconv. On Linux systems, the iconv interface is part of libc and you should not need to do anything special. Check the Recoll download page for up to date version information. 5.3.2. Building Recoll has been built on Linux, FreeBSD, Mac OS X, and Solaris, most versions after 2005 should be ok, maybe some older ones too (Solaris 8 is ok). If you build on another system, and need to modify things, I would very much welcome patches. Configure options: o --without-aspell will disable the code for phonetic matching of search terms. o --with-fam or --with-inotify will enable the code for real time indexing. Inotify support is enabled by default on recent Linux systems. o --with-qzeitgeist will enable sending Zeitgeist events about the visited search results, and needs the qzeitgeist package. o --disable-webkit is available from version 1.17 to implement the result list with a Qt QTextBrowser instead of a WebKit widget if you do not or can't depend on the latter. o --disable-idxthreads is available from version 1.19 to suppress multithreading inside the indexing process. You can also use the run-time configuration to restrict recollindex to using a single thread, but the compile-time option may disable a few more unused locks. This only applies to the use of multithreading for the core index processing (data input). The Recoll monitor mode always uses at least two threads of execution. o --disable-python-module will avoid building the Python module. o --disable-xattr will prevent fetching data from file extended attributes. Beyond a few standard attributes, fetching extended attributes data can only be useful is some application stores data in there, and also needs some simple configuration (see comments in the fields configuration file). o --enable-camelcase will enable splitting camelCase words. This is not enabled by default as it has the unfortunate side-effect of making some phrase searches quite confusing: ie, "MySQL manual" would be matched by "MySQL manual" and "my sql manual" but not "mysql manual" (only inside phrase searches). o --with-file-command Specify the version of the 'file' command to use (ie: --with-file-command=/usr/local/bin/file). Can be useful to enable the gnu version on systems where the native one is bad. o --disable-qtgui Disable the Qt interface. Will allow building the indexer and the command line search program in absence of a Qt environment. o --disable-x11mon Disable X11 connection monitoring inside recollindex. Together with --disable-qtgui, this allows building recoll without Qt and X11. o --disable-pic will compile Recoll with position-dependant code. This is incompatible with building the KIO or the Python or PHP extensions, but might yield very marginally faster code. o Of course the usual autoconf configure options, like --prefix apply. Normal procedure: cd recoll-xxx ./configure make (practices usual hardship-repelling invocations) There is little auto-configuration. The configure script will mainly link one of the system-specific files in the mk directory to mk/sysconf. If your system is not known yet, it will tell you as much, and you may want to manually copy and modify one of the existing files (the new file name should be the output of uname -s). 5.3.2.1. Building on Solaris We did not test building the GUI on Solaris for recent versions. You will need at least Qt 4.4. There are some hints on an old web site page, they may still be valid. Someone did test the 1.19 indexer and Python module build, they do work, with a few minor glitches. Be sure to use GNU make and install. 5.3.3. Installation Either type make install or execute recollinstall prefix, in the root of the source tree. This will copy the commands to prefix/bin and the sample configuration files, scripts and other shared data to prefix/share/recoll. If the installation prefix given to recollinstall is different from either the system default or the value which was specified when executing configure (as in configure --prefix /some/path), you will have to set the RECOLL_DATADIR environment variable to indicate where the shared data is to be found (ie for (ba)sh: export RECOLL_DATADIR=/some/path/share/recoll). You can then proceed to configuration. ---------------------------------------------------------------------- Prev Up Next 5.2. Supporting packages Home 5.4. Configuration overview Link: home: Recoll user manual Link: up: Chapter 5. Installation and configuration Link: prev: 5.3. Building from source 5.4. Configuration overview Prev Chapter 5. Installation and configuration ---------------------------------------------------------------------- 5.4. Configuration overview Most of the parameters specific to the recoll GUI are set through the Preferences menu and stored in the standard Qt place ($HOME/.config/Recoll.org/recoll.conf). You probably do not want to edit this by hand. Recoll indexing options are set inside text configuration files located in a configuration directory. There can be several such directories, each of which defines the parameters for one index. The configuration files can be edited by hand or through the Index configuration dialog (Preferences menu). The GUI tool will try to respect your formatting and comments as much as possible, so it is quite possible to use both ways. The most accurate documentation for the configuration parameters is given by comments inside the default files, and we will just give a general overview here. By default, for each index, there are two sets of configuration files. System-wide configuration files are kept in a directory named like /usr/[local/]share/recoll/examples, and define default values, shared by all indexes. For each index, a parallel set of files defines the customized parameters. In addition (as of Recoll version 1.19.7), it is possible to specify two additional configuration directories which will be stacked before and after the user configuration directory. These are defined by the RECOLL_CONFTOP and RECOLL_CONFMID environment variables. Values from configuration files inside the top directory will override user ones, values from configuration files inside the middle directory will override system ones and be overridden by user ones. These two variables may be of use to applications which augment Recoll functionality, and need to add configuration data without disturbing the user's files. Please note that the two, currently single, values will probably be interpreted as colon-separated lists in the future: do not use colon characters inside the directory paths. The default location of the configuration is the .recoll directory in your home. Most people will only use this directory. This location can be changed, or others can be added with the RECOLL_CONFDIR environment variable or the -c option parameter to recoll and recollindex. If the .recoll directory does not exist when recoll or recollindex are started, it will be created with a set of empty configuration files. recoll will give you a chance to edit the configuration file before starting indexing. recollindex will proceed immediately. To avoid mistakes, the automatic directory creation will only occur for the default location, not if -c or RECOLL_CONFDIR were used (in the latter cases, you will have to create the directory). All configuration files share the same format. For example, a short extract of the main configuration file might look as follows: # Space-separated list of directories to index. topdirs = ~/docs /usr/share/doc [~/somedirectory-with-utf8-txt-files] defaultcharset = utf-8 There are three kinds of lines: o Comment (starts with #) or empty. o Parameter affectation (name = value). o Section definition ([somedirname]). Depending on the type of configuration file, section definitions either separate groups of parameters or allow redefining some parameters for a directory sub-tree. They stay in effect until another section definition, or the end of file, is encountered. Some of the parameters used for indexing are looked up hierarchically from the current directory location upwards. Not all parameters can be meaningfully redefined, this is specified for each in the next section. When found at the beginning of a file path, the tilde character (~) is expanded to the name of the user's home directory, as a shell would do. White space is used for separation inside lists. List elements with embedded spaces can be quoted using double-quotes. Encoding issues. Most of the configuration parameters are plain ASCII. Two particular sets of values may cause encoding issues: o File path parameters may contain non-ascii characters and should use the exact same byte values as found in the file system directory. Usually, this means that the configuration file should use the system default locale encoding. o The unac_except_trans parameter should be encoded in UTF-8. If your system locale is not UTF-8, and you need to also specify non-ascii file paths, this poses a difficulty because common text editors cannot handle multiple encodings in a single file. In this relatively unlikely case, you can edit the configuration file as two separate text files with appropriate encodings, and concatenate them to create the complete configuration. 5.4.1. Environment variables RECOLL_CONFDIR Defines the main configuration directory. RECOLL_TMPDIR, TMPDIR Locations for temporary files, in this order of priority. The default if none of these is set is to use /tmp. Big temporary files may be created during indexing, mostly for decompressing, and also for processing, e.g. email attachments. RECOLL_CONFTOP, RECOLL_CONFMID Allow adding configuration directories with priorities below and above the user directory (see above the Configuration overview section for details). RECOLL_EXTRA_DBS, RECOLL_ACTIVE_EXTRA_DBS Help for setting up external indexes. See this paragraph for explanations. RECOLL_DATADIR Defines replacement for the default location of Recoll data files, normally found in, e.g., /usr/share/recoll). RECOLL_FILTERSDIR Defines replacement for the default location of Recoll filters, normally found in, e.g., /usr/share/recoll/filters). ASPELL_PROG aspell program to use for creating the spelling dictionary. The result has to be compatible with the libaspell which Recoll is using. VARNAME Blabla 5.4.2. The main configuration file, recoll.conf recoll.conf is the main configuration file. It defines things like what to index (top directories and things to ignore), and the default character set to use for document types which do not specify it internally. The default configuration will index your home directory. If this is not appropriate, start recoll to create a blank configuration, click Cancel, and edit the configuration file before restarting the command. This will start the initial indexing, which may take some time. Most of the following parameters can be changed from the Index Configuration menu in the recoll interface. Some can only be set by editing the configuration file. 5.4.2.1. Parameters affecting what documents we index: topdirs Specifies the list of directories or files to index (recursively for directories). You can use symbolic links as elements of this list. See the followLinks option about following symbolic links found under the top elements (not followed by default). skippedNames A space-separated list of wildcard patterns for names of files or directories that should be completely ignored. The list defined in the default file is: skippedNames = #* bin CVS Cache cache* caughtspam tmp .thumbnails .svn \ *~ .beagle .git .hg .bzr loop.ps .xsession-errors \ .recoll* xapiandb recollrc recoll.conf The list can be redefined at any sub-directory in the indexed area. The top-level directories are not affected by this list (that is, a directory in topdirs might match and would still be indexed). The list in the default configuration does not exclude hidden directories (names beginning with a dot), which means that it may index quite a few things that you do not want. On the other hand, email user agents like thunderbird usually store messages in hidden directories, and you probably want this indexed. One possible solution is to have .* in skippedNames, and add things like ~/.thunderbird or ~/.evolution in topdirs. Not even the file names are indexed for patterns in this list. See the noContentSuffixes variable for an alternative approach which indexes the file names. noContentSuffixes This is a list of file name endings (not wildcard expressions, nor dot-delimited suffixes). Only the names of matching files will be indexed (no attempt at MIME type identification, no decompression, no content indexing). This can be redefined for subdirectories, and edited from the GUI. The default value is: noContentSuffixes = .md5 .map \ .o .lib .dll .a .sys .exe .com \ .mpp .mpt .vsd \ .img .img.gz .img.bz2 .img.xz .image .image.gz .image.bz2 .image.xz \ .dat .bak .rdf .log.gz .log .db .msf .pid \ ,v ~ # skippedPaths and daemSkippedPaths A space-separated list of patterns for paths of files or directories that should be skipped. There is no default in the sample configuration file, but the code always adds the configuration and database directories in there. skippedPaths is used both by batch and real time indexing. daemSkippedPaths can be used to specify things that should be indexed at startup, but not monitored. Example of use for skipping text files only in a specific directory: skippedPaths = ~/somedir/*.txt skippedPathsFnmPathname The values in the *skippedPaths variables are matched by default with fnmatch(3), with the FNM_PATHNAME flag. This means that '/' characters must be matched explicitly. You can set skippedPathsFnmPathname to 0 to disable the use of FNM_PATHNAME (meaning that /*/dir3 will match /dir1/dir2/dir3). zipSkippedNames A space-separated list of patterns for names of files or directories that should be ignored inside zip archives. This is used directly by the zip handler, and has a function similar to skippedNames, but works independently. Can be redefined for filesystem subdirectories. For versions up to 1.19, you will need to update the Zip handler and install a supplementary Python module. The details are described on the Recoll wiki. followLinks Specifies if the indexer should follow symbolic links while walking the file tree. The default is to ignore symbolic links to avoid multiple indexing of linked files. No effort is made to avoid duplication when this option is set to true. This option can be set individually for each of the topdirs members by using sections. It can not be changed below the topdirs level. indexedmimetypes Recoll normally indexes any file which it knows how to read. This list lets you restrict the indexed MIME types to what you specify. If the variable is unspecified or the list empty (the default), all supported types are processed. Can be redefined for subdirectories. excludedmimetypes This list lets you exclude some MIME types from indexing. Can be redefined for subdirectories. compressedfilemaxkbs Size limit for compressed (.gz or .bz2) files. These need to be decompressed in a temporary directory for identification, which can be very wasteful if 'uninteresting' big compressed files are present. Negative means no limit, 0 means no processing of any compressed file. Defaults to -1. textfilemaxmbs Maximum size for text files. Very big text files are often uninteresting logs. Set to -1 to disable (default 20MB). textfilepagekbs If set to other than -1, text files will be indexed as multiple documents of the given page size. This may be useful if you do want to index very big text files as it will both reduce memory usage at index time and help with loading data to the preview window. A size of a few megabytes would seem reasonable (default: 1MB). membermaxkbs This defines the maximum size in kilobytes for an archive member (zip, tar or rar at the moment). Bigger entries will be skipped. indexallfilenames Recoll indexes file names in a special section of the database to allow specific file names searches using wild cards. This parameter decides if file name indexing is performed only for files with MIME types that would qualify them for full text indexing, or for all files inside the selected subtrees, independently of MIME type. usesystemfilecommand Decide if we execute a system command (file -i by default) as a final step for determining the MIME type for a file (the main procedure uses suffix associations as defined in the mimemap file). This can be useful for files with suffix-less names, but it will also cause the indexing of many bogus "text" files. systemfilecommand Command to use for mime for mime type determination if usesystefilecommand is set. Recent versions of xdg-mime sometimes work better than file. processwebqueue If this is set, process the directory where Web browser plugins copy visited pages for indexing. webqueuedir The path to the web indexing queue. This is hard-coded in the Firefox plugin as ~/.recollweb/ToIndex so there should be no need to change it. 5.4.2.2. Parameters affecting how we generate terms: Changing some of these parameters will imply a full reindex. Also, when using multiple indexes, it may not make sense to search indexes that don't share the values for these parameters, because they usually affect both search and index operations. indexStripChars Decide if we strip characters of diacritics and convert them to lower-case before terms are indexed. If we don't, searches sensitive to case and diacritics can be performed, but the index will be bigger, and some marginal weirdness may sometimes occur. The default is a stripped index (indexStripChars = 1) for now. When using multiple indexes for a search, this parameter must be defined identically for all. Changing the value implies an index reset. maxTermExpand Maximum expansion count for a single term (e.g.: when using wildcards). The default of 10000 is reasonable and will avoid queries that appear frozen while the engine is walking the term list. maxXapianClauses Maximum number of elementary clauses we can add to a single Xapian query. In some cases, the result of term expansion can be multiplicative, and we want to avoid using excessive memory. The default of 100 000 should be both high enough in most cases and compatible with current typical hardware configurations. nonumbers If this set to true, no terms will be generated for numbers. For example "123", "1.5e6", 192.168.1.4, would not be indexed ("value123" would still be). Numbers are often quite interesting to search for, and this should probably not be set except for special situations, ie, scientific documents with huge amounts of numbers in them. This can only be set for a whole index, not for a subtree. nocjk If this set to true, specific east asian (Chinese Korean Japanese) characters/word splitting is turned off. This will save a small amount of cpu if you have no CJK documents. If your document base does include such text but you are not interested in searching it, setting nocjk may be a significant time and space saver. cjkngramlen This lets you adjust the size of n-grams used for indexing CJK text. The default value of 2 is probably appropriate in most cases. A value of 3 would allow more precision and efficiency on longer words, but the index will be approximately twice as large. indexstemminglanguages A list of languages for which the stem expansion databases will be built. See recollindex(1) or use the recollindex -l command for possible values. You can add a stem expansion database for a different language by using recollindex -s, but it will be deleted during the next indexing. Only languages listed in the configuration file are permanent. defaultcharset The name of the character set used for files that do not contain a character set definition (ie: plain text files). This can be redefined for any sub-directory. If it is not set at all, the character set used is the one defined by the nls environment ( LC_ALL, LC_CTYPE, LANG), or iso8859-1 if nothing is set. unac_except_trans This is a list of characters, encoded in UTF-8, which should be handled specially when converting text to unaccented lowercase. For example, in Swedish, the letter a with diaeresis has full alphabet citizenship and should not be turned into an a. Each element in the space-separated list has the special character as first element and the translation following. The handling of both the lowercase and upper-case versions of a character should be specified, as appartenance to the list will turn-off both standard accent and case processing. Example for Swedish: unac_except_trans = aaaa AAaa a:a: A:a: o:o: O:o: Note that the translation is not limited to a single character, you could very well have something like u:ue in the list. The default value set for unac_except_trans can't be listed here because I have trouble with SGML and UTF-8, but it only contains ligature decompositions: german ss, oe, ae, fi, fl. This parameter can't be defined for subdirectories, it is global, because there is no way to do otherwise when querying. If you have document sets which would need different values, you will have to index and query them separately. maildefcharset This can be used to define the default character set specifically for email messages which don't specify it. This is mainly useful for readpst (libpst) dumps, which are utf-8 but do not say so. localfields This allows setting fields for all documents under a given directory. Typical usage would be to set an "rclaptg" field, to be used in mimeview to select a specific viewer. If several fields are to be set, they should be separated with a semi-colon (';') character, which there is currently no way to escape. Also note the initial semi-colon. Example: localfields= ;rclaptg=gnus;other = val, then select specifier viewer with mimetype|tag=... in mimeview. testmodifusemtime If true, use mtime instead of default ctime to determine if a file has been modified (in addition to size, which is always used). Setting this can reduce re-indexing on systems where extended attributes are modified (by some other application), but not indexed (changing extended attributes only affects ctime). Notes: o This may prevent detection of change in some marginal file rename cases (the target would need to have the same size and mtime). o You should probably also set noxattrfields to 1 in this case, except if you still prefer to perform xattr indexing, for example if the local file update pattern makes it of value (as in general, there is a risk for pure extended attributes updates without file modification to go undetected). Perform a full index reset after changing the value of this parameter. noxattrfields Recoll versions 1.19 and later automatically translate file extended attributes into document fields (to be processed according to the parameters from the fields file). Setting this variable to 1 will disable the behaviour. metadatacmds This allows executing external commands for each file and storing the output in Recoll document fields. This could be used for example to index external tag data. The value is a list of field names and commands, don't forget an initial semi-colon. Example: [/some/area/of/the/fs] metadatacmds = ; tags = tmsu tags %f; otherfield = somecmd -xx %f As a specially disgusting hack brought by Recoll 1.19.7, if a "field name" begins with rclmulti, the data returned by the command is expected to contain multiple field values, in configuration file format. This allows setting several fields by executing a single command. Example: metadatacmds = ; rclmulti1 = somecmd %f If somecmd returns data in the form of: field1 = value1 field2 = value for field2 field1 and field2 will be set inside the document metadata. 5.4.2.3. Parameters affecting where and how we store things: dbdir The name of the Xapian data directory. It will be created if needed when the index is initialized. If this is not an absolute path, it will be interpreted relative to the configuration directory. The value can have embedded spaces but starting or trailing spaces will be trimmed. You cannot use quotes here. idxstatusfile The name of the scratch file where the indexer process updates its status. Default: idxstatus.txt inside the configuration directory. maxfsoccuppc Maximum file system occupation before we stop indexing. The value is a percentage, corresponding to what the "Capacity" df output column shows. The default value is 0, meaning no checking. mboxcachedir The directory where mbox message offsets cache files are held. This is normally $RECOLL_CONFDIR/mboxcache, but it may be useful to share a directory between different configurations. mboxcacheminmbs The minimum mbox file size over which we cache the offsets. There is really no sense in caching offsets for small files. The default is 5 MB. webcachedir This is only used by the web browser plugin indexing code, and defines where the cache for visited pages will live. Default: $RECOLL_CONFDIR/webcache webcachemaxmbs This is only used by the web browser plugin indexing code, and defines the maximum size for the web page cache. Default: 40 MB. Quite unfortunately, this is only taken into account when creating the cache file. You need to delete the file for a change to be taken into account. idxflushmb Threshold (megabytes of new text data) where we flush from memory to disk index. Setting this can help control memory usage. A value of 0 means no explicit flushing, letting Xapian use its own default, which is flushing every 10000 (or XAPIAN_FLUSH_THRESHOLD) documents, which gives little memory usage control, as memory usage also depends on average document size. The default value is 10, and it is probably a bit low. If your system usually has free memory, you can try higher values between 20 and 80. In my experience, values beyond 100 are always counterproductive. 5.4.2.4. Parameters affecting multithread processing The Recoll indexing process recollindex can use multiple threads to speed up indexing on multiprocessor systems. The work done to index files is divided in several stages and some of the stages can be executed by multiple threads. The stages are: 1. File system walking: this is always performed by the main thread. 2. File conversion and data extraction. 3. Text processing (splitting, stemming, etc.) 4. Xapian index update. You can also read a longer document about the transformation of Recoll indexing to multithreading. The threads configuration is controlled by two configuration file parameters. thrQSizes This variable defines the job input queues configuration. There are three possible queues for stages 2, 3 and 4, and this parameter should give the queue depth for each stage (three integer values). If a value of -1 is used for a given stage, no queue is used, and the thread will go on performing the next stage. In practise, deep queues have not been shown to increase performance. A value of 0 for the first queue tells Recoll to perform autoconfiguration (no need for the two other values in this case) - this is the default configuration. thrTCounts This defines the number of threads used for each stage. If a value of -1 is used for one of the queue depths, the corresponding thread count is ignored. It makes no sense to use a value other than 1 for the last stage because updating the Xapian index is necessarily single-threaded (and protected by a mutex). The following example would use three queues (of depth 2), and 4 threads for converting source documents, 2 for processing their text, and one to update the index. This was tested to be the best configuration on the test system (quadri-processor with multiple disks). thrQSizes = 2 2 2 thrTCounts = 4 2 1 The following example would use a single queue, and the complete processing for each document would be performed by a single thread (several documents will still be processed in parallel in most cases). The threads will use mutual exclusion when entering the index update stage. In practise the performance would be close to the precedent case in general, but worse in certain cases (e.g. a Zip archive would be performed purely sequentially), so the previous approach is preferred. YMMV... The 2 last values for thrTCounts are ignored. thrQSizes = 2 -1 -1 thrTCounts = 6 1 1 The following example would disable multithreading. Indexing will be performed by a single thread. thrQSizes = -1 -1 -1 5.4.2.5. Miscellaneous parameters: autodiacsens IF the index is not stripped, decide if we automatically trigger diacritics sensitivity if the search term has accented characters (not in unac_except_trans). Else you need to use the query language and the D modifier to specify diacritics sensitivity. Default is no. autocasesens IF the index is not stripped, decide if we automatically trigger character case sensitivity if the search term has upper-case characters in any but the first position. Else you need to use the query language and the C modifier to specify character-case sensitivity. Default is yes. loglevel,daemloglevel Verbosity level for recoll and recollindex. A value of 4 lists quite a lot of debug/information messages. 2 only lists errors. The daemversion is specific to the indexing monitor daemon. logfilename, daemlogfilename Where the messages should go. 'stderr' can be used as a special value, and is the default. The daemversion is specific to the indexing monitor daemon. checkneedretryindexscript This defines the name for a command executed by recollindex when starting indexing. If the exit status of the command is 0, recollindex retries to index all files which previously could not be indexed because of data extraction errors. The default value is a script which checks if any of the common bin directories have changed (indicating that a helper program may have been installed). mondelaypatterns This allows specify wildcard path patterns (processed with fnmatch(3) with 0 flag), to match files which change too often and for which a delay should be observed before re-indexing. This is a space-separated list, each entry being a pattern and a time in seconds, separated by a colon. You can use double quotes if a path entry contains white space. Example: mondelaypatterns = *.log:20 "this one has spaces*:10" monixinterval Minimum interval (seconds) for processing the indexing queue. The real time monitor does not process each event when it comes in, but will wait this time for the queue to accumulate to diminish overhead and in order to aggregate multiple events to the same file. Default 30 S. monauxinterval Period (in seconds) at which the real time monitor will regenerate the auxiliary databases (spelling, stemming) if needed. The default is one hour. monioniceclass, monioniceclassdata These allow defining the ionice class and data used by the indexer (default class 3, no data). filtermaxseconds Maximum handler execution time, after which it is aborted. Some postscript programs just loop... filtermaxmbytes Recoll 1.20.7 and later. Maximum handler memory utilisation. This uses setrlimit(RLIMIT_AS) on most systems (total virtual memory space size limit). Some programs may start with 500 MBytes of mapped shared libraries, so take this into account when choosing a value. The default is a liberal 2000MB. filtersdir A directory to search for the external input handler scripts used to index some types of files. The value should not be changed, except if you want to modify one of the default scripts. The value can be redefined for any sub-directory. iconsdir The name of the directory where recoll result list icons are stored. You can change this if you want different images. idxabsmlen Recoll stores an abstract for each indexed file inside the database. The text can come from an actual 'abstract' section in the document or will just be the beginning of the document. It is stored in the index so that it can be displayed inside the result lists without decoding the original file. The idxabsmlen parameter defines the size of the stored abstract. The default value is 250 bytes. The search interface gives you the choice to display this stored text or a synthetic abstract built by extracting text around the search terms. If you always prefer the synthetic abstract, you can reduce this value and save a little space. idxmetastoredlen Maximum stored length for metadata fields. This does not affect indexing (the whole field is processed anyway), just the amount of data stored in the index for the purpose of displaying fields inside result lists or previews. The default value is 150 bytes which may be too low if you have custom fields. aspellLanguage Language definitions to use when creating the aspell dictionary. The value must match a set of aspell language definition files. You can type "aspell config" to see where these are installed (look for data-dir). The default if the variable is not set is to use your desktop national language environment to guess the value. noaspell If this is set, the aspell dictionary generation is turned off. Useful for cases where you don't need the functionality or when it is unusable because aspell crashes during dictionary generation. mhmboxquirks This allows defining location-related quirks for the mailbox handler. Currently only the tbird flag is defined, and it should be set for directories which hold Thunderbird data, as their folder format is weird. 5.4.3. The fields file This file contains information about dynamic fields handling in Recoll. Some very basic fields have hard-wired behaviour, and, mostly, you should not change the original data inside the fields file. But you can create custom fields fitting your data and handle them just like they were native ones. The fields file has several sections, which each define an aspect of fields processing. Quite often, you'll have to modify several sections to obtain the desired behaviour. We will only give a short description here, you should refer to the comments inside the default file for more detailed information. Field names should be lowercase alphabetic ASCII. [prefixes] A field becomes indexed (searchable) by having a prefix defined in this section. [stored] A field becomes stored (displayable inside results) by having its name listed in this section (typically with an empty value). [aliases] This section defines lists of synonyms for the canonical names used inside the [prefixes] and [stored] sections [queryaliases] This section also defines aliases for the canonic field names, with the difference that the substitution will only be used at query time, avoiding any possibility that the value would pick-up random metadata from documents. handler-specific sections Some input handlers may need specific configuration for handling fields. Only the email message handler currently has such a section (named [mail]). It allows indexing arbitrary email headers in addition to the ones indexed by default. Other such sections may appear in the future. Here follows a small example of a personal fields file. This would extract a specific email header and use it as a searchable field, with data displayable inside result lists. (Side note: as the email handler does no decoding on the values, only plain ascii headers can be indexed, and only the first occurrence will be used for headers that occur several times). [prefixes] # Index mailmytag contents (with the given prefix) mailmytag = XMTAG [stored] # Store mailmytag inside the document data record (so that it can be # displayed - as %(mailmytag) - in result lists). mailmytag = [queryaliases] filename = fn containerfilename = cfn [mail] # Extract the X-My-Tag mail header, and use it internally with the # mailmytag field name x-my-tag = mailmytag 5.4.3.1. Extended attributes in the fields file Recoll versions 1.19 and later process user extended file attributes as documents fields by default. Attributes are processed as fields of the same name, after removing the user prefix on Linux. The [xattrtofields] section of the fields file allows specifying translations from extended attributes names to Recoll field names. An empty translation disables use of the corresponding attribute data. 5.4.4. The mimemap file mimemap specifies the file name extension to MIME type mappings. For file names without an extension, or with an unknown one, the system's file -i command will be executed to determine the MIME type (this can be switched off inside the main configuration file). The mappings can be specified on a per-subtree basis, which may be useful in some cases. Example: gaim logs have a .txt extension but should be handled specially, which is possible because they are usually all located in one place. The recoll_noindex mimemap variable has been moved to recoll.conf and renamed to noContentSuffixes, while keeping the same function, as of Recoll version 1.21. For older Recoll versions, see the documentation for noContentSuffixes but use recoll_noindex in mimemap. 5.4.5. The mimeconf file mimeconf specifies how the different MIME types are handled for indexing, and which icons are displayed in the recoll result lists. Changing the parameters in the [index] section is probably not a good idea except if you are a Recoll developer. The [icons] section allows you to change the icons which are displayed by recoll in the result lists (the values are the basenames of the png images inside the iconsdir directory (specified in recoll.conf). 5.4.6. The mimeview file mimeview specifies which programs are started when you click on an Open link in a result list. Ie: HTML is normally displayed using firefox, but you may prefer Konqueror, your openoffice.org program might be named oofice instead of openoffice etc. Changes to this file can be done by direct editing, or through the recoll GUI preferences dialog. If Use desktop preferences to choose document editor is checked in the Recoll GUI preferences, all mimeview entries will be ignored except the one labelled application/x-all (which is set to use xdg-open by default). In this case, the xallexcepts top level variable defines a list of MIME type exceptions which will be processed according to the local entries instead of being passed to the desktop. This is so that specific Recoll options such as a page number or a search string can be passed to applications that support them, such as the evince viewer. As for the other configuration files, the normal usage is to have a mimeview inside your own configuration directory, with just the non-default entries, which will override those from the central configuration file. All viewer definition entries must be placed under a [view] section. The keys in the file are normally MIME types. You can add an application tag to specialize the choice for an area of the filesystem (using a localfields specification in mimeconf). The syntax for the key is mimetype|tag The nouncompforviewmts entry, (placed at the top level, outside of the [view] section), holds a list of MIME types that should not be uncompressed before starting the viewer (if they are found compressed, ie: mydoc.doc.gz). The right side of each assignment holds a command to be executed for opening the file. The following substitutions are performed: o %D. Document date o %f. File name. This may be the name of a temporary file if it was necessary to create one (ie: to extract a subdocument from a container). o %i. Internal path, for subdocuments of containers. The format depends on the container type. If this appears in the command line, Recoll will not create a temporary file to extract the subdocument, expecting the called application (possibly a script) to be able to handle it. o %M. MIME type o %p. Page index. Only significant for a subset of document types, currently only PDF, Postscript and DVI files. Can be used to start the editor at the right page for a match or snippet. o %s. Search term. The value will only be set for documents with indexed page numbers (ie: PDF). The value will be one of the matched search terms. It would allow pre-setting the value in the "Find" entry inside Evince for example, for easy highlighting of the term. o %u. Url. In addition to the predefined values above, all strings like %(fieldname) will be replaced by the value of the field named fieldname for the document. This could be used in combination with field customisation to help with opening the document. 5.4.7. The ptrans file ptrans specifies query-time path translations. These can be useful in multiple cases. The file has a section for any index which needs translations, either the main one or additional query indexes. The sections are named with the Xapian index directory names. No slash character should exist at the end of the paths (all comparisons are textual). An example should make things sufficiently clear [/home/me/.recoll/xapiandb] /this/directory/moved = /to/this/place [/path/to/additional/xapiandb] /server/volume1/docdir = /net/server/volume1/docdir /server/volume2/docdir = /net/server/volume2/docdir 5.4.8. Examples of configuration adjustments 5.4.8.1. Adding an external viewer for an non-indexed type Imagine that you have some kind of file which does not have indexable content, but for which you would like to have a functional Open link in the result list (when found by file name). The file names end in .blob and can be displayed by application blobviewer. You need two entries in the configuration files for this to work: o In $RECOLL_CONFDIR/mimemap (typically ~/.recoll/mimemap), add the following line: .blob = application/x-blobapp Note that the MIME type is made up here, and you could call it diesel/oil just the same. o In $RECOLL_CONFDIR/mimeview under the [view] section, add: application/x-blobapp = blobviewer %f We are supposing that blobviewer wants a file name parameter here, you would use %u if it liked URLs better. If you just wanted to change the application used by Recoll to display a MIME type which it already knows, you would just need to edit mimeview. The entries you add in your personal file override those in the central configuration, which you do not need to alter. mimeview can also be modified from the Gui. 5.4.8.2. Adding indexing support for a new file type Let us now imagine that the above .blob files actually contain indexable text and that you know how to extract it with a command line program. Getting Recoll to index the files is easy. You need to perform the above alteration, and also to add data to the mimeconf file (typically in ~/.recoll/mimeconf): o Under the [index] section, add the following line (more about the rclblob indexing script later): application/x-blobapp = exec rclblob o Under the [icons] section, you should choose an icon to be displayed for the files inside the result lists. Icons are normally 64x64 pixels PNG files which live in /usr/[local/]share/recoll/images. o Under the [categories] section, you should add the MIME type where it makes sense (you can also create a category). Categories may be used for filtering in advanced search. The rclblob handler should be an executable program or script which exists inside /usr/[local/]share/recoll/filters. It will be given a file name as argument and should output the text or html contents on the standard output. The filter programming section describes in more detail how to write an input handler. ---------------------------------------------------------------------- Prev Up 5.3. Building from source Home recoll-1.43.12/query/0000755000175000017500000000000015134672441013620 5ustar dockesdockesrecoll-1.43.12/query/docseqsem.cpp0000644000175000017500000001352015130407136016301 0ustar dockesdockes/* Copyright (C) 2005-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "docseqsem.h" #ifdef ENABLE_SEMANTIC #include #include #include #include #include #include "log.h" #include "cmdtalk.h" #include "rclconfig.h" #include "rcldb.h" #include "pathut.h" static CmdTalk cmd(10); // Start our worker process if it is not already up. The process is kept up and reused for further // queries. static bool maybeStartCmd(const RclConfig *conf) { if (cmd.running()) return true; std::string venvdir; if (!conf->getConfParam("sem_venv", venvdir)) { LOGERR("maybeStartCmd: 'sem_venv' not set in configuration\n"); return false; } // We run the script with an explicit python command so that it runs in the venv without having // to deal with the activate script. auto cmdname = path_cat(venvdir, {"bin", "python3"}); std::vector args{path_cat(venvdir, "rclsem_talk.py")}; if (!cmd.startCmd(cmdname, args)) { LOGERR("startCmd failed \n"); return false; } return cmd.running(); } // Holder for one result struct Result { std::string rcludi; int phridx; std::string ctxbefore; std::string segment; std::string ctxafter; }; class DocSequenceSem::Internal { public: std::shared_ptr db; // This is set to false after we call runquery from the first getDoc() or getResCnt() bool needquery{true}; std::string question; std::vector results; bool mayberunquery(); }; bool DocSequenceSem::Internal::mayberunquery() { if (!needquery) return true; needquery = false; if (!maybeStartCmd(db->getConf())) { LOGERR("DocSequenceSem:: could not start command\n"); return false; } // Call the worker "query" method with the expected args std::unordered_map response; std::unordered_map args { {"confdir", db->getConf()->getConfDir()}, {"nres", std::to_string(10)}, {"question", question}}; if (!cmd.callproc("query", args, response)) { LOGERR("getDoc: callproc 'query' failed\n"); return false; } // We get the answer as json in the "results" key. auto it = response.find("results"); if (it == response.end()) { LOGERR("getDoc: no 'results' in command response\n"); return false; } // Do the jsoncpp thing and store the results Json::Value decoded; std::istringstream input(it->second); Json::CharReaderBuilder builder; builder["collectComments"] = false; Json::String errs; if (!Json::parseFromStream(builder, input, &decoded, &errs)) { LOGERR("Could not parse JSON: " << it->second << "\n"); return false; } // The data is a sequence of tuples (rcludi, phridx, ctxbefore, segment, ctxafter) for (unsigned int i = 0; i < decoded.size(); i++) { Json::Value& decod_i = decoded[i]; results.push_back({decod_i[0].asString(), atoi(decod_i[1].asString().c_str()), decod_i[2].asString(), decod_i[3].asString(), decod_i[4].asString()}); } return true; } DocSequenceSem::DocSequenceSem(const std::string& t, std::shared_ptr db, const std::string& question) : DocSequence(t) { LOGDEB0("DocSequenceSem:: title " << t << " question " << question << '\n'); m = new Internal; m->db = db; m->question = question; } DocSequenceSem::~DocSequenceSem() { delete m; } std::shared_ptr DocSequenceSem::getDb() { return m->db; } bool DocSequenceSem::getDoc(int num, Rcl::Doc &doc, std::string *) { LOGDEB0("DocSequenceSem::getDoc: idx " << num << '\n'); if (!m->mayberunquery()) { LOGERR("DocSequenceSem::getDoc: could not run query\n"); return false; } if (num < 0 || num >= (int)m->results.size()) { LOGERR("DocSequenceSem::getDoc: bad idx " << num << " results size " << m->results.size() << '\n'); return false; } if (!m->db->getDoc(m->results[num].rcludi, 0, doc, false)) { LOGERR("DocSequenceSem::getDoc: db->getDoc failed for " << m->results[num].rcludi << "\n"); return false; } // Set the segment and its context as document abstract doc.meta[Rcl::Doc::keyabs] = m->results[num].ctxbefore + "
" + m->results[num].segment + "
" + m->results[num].ctxafter; //doc.dump(); return true; } int DocSequenceSem::getResCnt() { if (!m->mayberunquery()) { LOGERR("DocSequenceSem::getResCnt: could not run query\n"); return false; } LOGDEB0("DocSequenceSem::getResCnt(): return " << m->results.size() << '\n'); return (int)m->results.size(); } bool DocSequenceSem::getAbstract(Rcl::Doc &doc, PlainToRich *, std::vector& out, bool) { LOGDEB0("DocSequenceSem::getAbstract:\n"); std::string abs; doc.getmeta(Rcl::Doc::keyabs, &abs); out.push_back(abs); return true; } #endif // ENABLE_SEMANTIC recoll-1.43.12/query/docseqdocs.h0000644000175000017500000000415015121730573016115 0ustar dockesdockes/* Copyright (C) 2004-2013 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _DOCSEQDOCS_H_INCLUDED_ #define _DOCSEQDOCS_H_INCLUDED_ #include #include "docseq.h" #include "rcldoc.h" namespace Rcl { class Db; } /** A DocSequence that's just built from a bunch of docs */ class DocSequenceDocs : public DocSequence { public: DocSequenceDocs(std::shared_ptr d, const std::vector docs, const std::string &t) : DocSequence(t), m_db(d), m_docs(docs) {} virtual ~DocSequenceDocs() {} DocSequenceDocs(const DocSequenceDocs&) = delete; DocSequenceDocs& operator=(const DocSequenceDocs&) = delete; virtual bool getDoc(int num, Rcl::Doc &doc, std::string *sh = 0) override { if (sh) *sh = std::string(); if (num < 0 || num >= int(m_docs.size())) return false; doc = m_docs[num]; return true; } virtual int getResCnt() override { return static_cast(m_docs.size()); } virtual std::string getDescription() override { return m_description; } void setDescription(const std::string& desc) { m_description = desc; } protected: virtual std::shared_ptr getDb() override { return m_db; } private: std::shared_ptr m_db; std::string m_description; std::vector m_docs; }; #endif /* _DOCSEQ_H_INCLUDED_ */ recoll-1.43.12/query/wasaparse.hpp0000644000175000017500000006016315121730573016322 0ustar dockesdockes// A Bison parser, made by GNU Bison 3.8.2. // Skeleton interface for Bison LALR(1) parsers in C++ // Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work // under terms of your choice, so long as that work isn't itself a // parser generator using the skeleton or a modified version thereof // as a parser skeleton. Alternatively, if you modify or redistribute // the parser skeleton itself, you may (at your option) remove this // special exception, which will cause the skeleton and the resulting // Bison output files to be licensed under the GNU General Public // License without this special exception. // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. /** ** \file wasaparse.tab.hpp ** Define the yy::parser class. */ // C++ LALR(1) parser skeleton written by Akim Demaille. // DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, // especially those whose name start with YY_ or yy_. They are // private implementation details that can be changed or removed. #ifndef YY_YY_WASAPARSE_TAB_HPP_INCLUDED # define YY_YY_WASAPARSE_TAB_HPP_INCLUDED # include // std::abort # include # include # include # include #if defined __cplusplus # define YY_CPLUSPLUS __cplusplus #else # define YY_CPLUSPLUS 199711L #endif // Support move semantics when possible. #if 201103L <= YY_CPLUSPLUS # define YY_MOVE std::move # define YY_MOVE_OR_COPY move # define YY_MOVE_REF(Type) Type&& # define YY_RVREF(Type) Type&& # define YY_COPY(Type) Type #else # define YY_MOVE # define YY_MOVE_OR_COPY copy # define YY_MOVE_REF(Type) Type& # define YY_RVREF(Type) const Type& # define YY_COPY(Type) const Type& #endif // Support noexcept when possible. #if 201103L <= YY_CPLUSPLUS # define YY_NOEXCEPT noexcept # define YY_NOTHROW #else # define YY_NOEXCEPT # define YY_NOTHROW throw () #endif // Support constexpr when possible. #if 201703 <= YY_CPLUSPLUS # define YY_CONSTEXPR constexpr #else # define YY_CONSTEXPR #endif # include "location.hh" #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YY_USE(E) ((void) (E)) #else # define YY_USE(E) /* empty */ #endif /* Suppress an incorrect diagnostic about yylval being uninitialized. */ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ # if __GNUC__ * 100 + __GNUC_MINOR__ < 407 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") # else # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # endif # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif namespace yy { #line 182 "wasaparse.tab.hpp" /// A Bison parser. class parser { public: #ifdef YYSTYPE # ifdef __GNUC__ # pragma GCC message "bison: do not #define YYSTYPE in C++, use %define api.value.type" # endif typedef YYSTYPE value_type; #else /// Symbol semantic values. union value_type { #line 46 "/home/dockes/projets/fulltext/recoll/src/query/wasaparse.ypp" std::string *str; Rcl::SearchDataClauseRange *rg; Rcl::SearchDataClauseSimple *cl; Rcl::SearchData *sd; #line 207 "wasaparse.tab.hpp" }; #endif /// Backward compatibility (Bison 3.8). typedef value_type semantic_type; /// Symbol locations. typedef location location_type; /// Syntax errors thrown from user actions. struct syntax_error : std::runtime_error { syntax_error (const location_type& l, const std::string& m) : std::runtime_error (m) , location (l) {} syntax_error (const syntax_error& s) : std::runtime_error (s.what ()) , location (s.location) {} ~syntax_error () YY_NOEXCEPT YY_NOTHROW; location_type location; }; /// Token kinds. struct token { enum token_kind_type { YYEMPTY = -2, YYEOF = 0, // "end of file" YYerror = 256, // error YYUNDEF = 257, // "invalid token" WORD = 258, // WORD QUOTED = 259, // QUOTED QUALIFIERS = 260, // QUALIFIERS AND = 261, // AND UCONCAT = 262, // UCONCAT OR = 263, // OR EQUALS = 264, // EQUALS CONTAINS = 265, // CONTAINS SMALLEREQ = 266, // SMALLEREQ SMALLER = 267, // SMALLER GREATEREQ = 268, // GREATEREQ GREATER = 269, // GREATER RANGE = 270 // RANGE }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; }; /// Token kind, as returned by yylex. typedef token::token_kind_type token_kind_type; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type token_type; /// Symbol kinds. struct symbol_kind { enum symbol_kind_type { YYNTOKENS = 19, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error S_YYUNDEF = 2, // "invalid token" S_WORD = 3, // WORD S_QUOTED = 4, // QUOTED S_QUALIFIERS = 5, // QUALIFIERS S_AND = 6, // AND S_UCONCAT = 7, // UCONCAT S_8_ = 8, // '(' S_9_ = 9, // '-' S_OR = 10, // OR S_EQUALS = 11, // EQUALS S_CONTAINS = 12, // CONTAINS S_SMALLEREQ = 13, // SMALLEREQ S_SMALLER = 14, // SMALLER S_GREATEREQ = 15, // GREATEREQ S_GREATER = 16, // GREATER S_RANGE = 17, // RANGE S_18_ = 18, // ')' S_YYACCEPT = 19, // $accept S_topquery = 20, // topquery S_query = 21, // query S_fieldexpr = 22, // fieldexpr S_complexfieldname = 23, // complexfieldname S_range = 24, // range S_term = 25, // term S_qualquote = 26 // qualquote }; }; /// (Internal) symbol kind. typedef symbol_kind::symbol_kind_type symbol_kind_type; /// The number of tokens. static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS; /// A complete symbol. /// /// Expects its Base type to provide access to the symbol kind /// via kind (). /// /// Provide access to semantic value and location. template struct basic_symbol : Base { /// Alias to Base. typedef Base super_type; /// Default constructor. basic_symbol () YY_NOEXCEPT : value () , location () {} #if 201103L <= YY_CPLUSPLUS /// Move constructor. basic_symbol (basic_symbol&& that) : Base (std::move (that)) , value (std::move (that.value)) , location (std::move (that.location)) {} #endif /// Copy constructor. basic_symbol (const basic_symbol& that); /// Constructor for valueless symbols. basic_symbol (typename Base::kind_type t, YY_MOVE_REF (location_type) l); /// Constructor for symbols with semantic value. basic_symbol (typename Base::kind_type t, YY_RVREF (value_type) v, YY_RVREF (location_type) l); /// Destroy the symbol. ~basic_symbol () { clear (); } /// Destroy contents, and record that is empty. void clear () YY_NOEXCEPT { Base::clear (); } /// The user-facing name of this symbol. std::string name () const YY_NOEXCEPT { return parser::symbol_name (this->kind ()); } /// Backward compatibility (Bison 3.6). symbol_kind_type type_get () const YY_NOEXCEPT; /// Whether empty. bool empty () const YY_NOEXCEPT; /// Destructive move, \a s is emptied into this. void move (basic_symbol& s); /// The semantic value. value_type value; /// The location. location_type location; private: #if YY_CPLUSPLUS < 201103L /// Assignment operator. basic_symbol& operator= (const basic_symbol& that); #endif }; /// Type access provider for token (enum) based symbols. struct by_kind { /// The symbol kind as needed by the constructor. typedef token_kind_type kind_type; /// Default constructor. by_kind () YY_NOEXCEPT; #if 201103L <= YY_CPLUSPLUS /// Move constructor. by_kind (by_kind&& that) YY_NOEXCEPT; #endif /// Copy constructor. by_kind (const by_kind& that) YY_NOEXCEPT; /// Constructor from (external) token numbers. by_kind (kind_type t) YY_NOEXCEPT; /// Record that this symbol is empty. void clear () YY_NOEXCEPT; /// Steal the symbol kind from \a that. void move (by_kind& that); /// The (internal) type number (corresponding to \a type). /// \a empty when empty. symbol_kind_type kind () const YY_NOEXCEPT; /// Backward compatibility (Bison 3.6). symbol_kind_type type_get () const YY_NOEXCEPT; /// The symbol kind. /// \a S_YYEMPTY when empty. symbol_kind_type kind_; }; /// Backward compatibility for a private implementation detail (Bison 3.6). typedef by_kind by_type; /// "External" symbols: returned by the scanner. struct symbol_type : basic_symbol {}; /// Build a parser object. parser (WasaParserDriver* d_yyarg); virtual ~parser (); #if 201103L <= YY_CPLUSPLUS /// Non copyable. parser (const parser&) = delete; /// Non copyable. parser& operator= (const parser&) = delete; #endif /// Parse. An alias for parse (). /// \returns 0 iff parsing succeeded. int operator() (); /// Parse. /// \returns 0 iff parsing succeeded. virtual int parse (); #if YYDEBUG /// The current debugging stream. std::ostream& debug_stream () const YY_ATTRIBUTE_PURE; /// Set the current debugging stream. void set_debug_stream (std::ostream &); /// Type for debugging levels. typedef int debug_level_type; /// The current debugging level. debug_level_type debug_level () const YY_ATTRIBUTE_PURE; /// Set the current debugging level. void set_debug_level (debug_level_type l); #endif /// Report a syntax error. /// \param loc where the syntax error is found. /// \param msg a description of the syntax error. virtual void error (const location_type& loc, const std::string& msg); /// Report a syntax error. void error (const syntax_error& err); /// The user-facing name of the symbol whose (internal) number is /// YYSYMBOL. No bounds checking. static std::string symbol_name (symbol_kind_type yysymbol); class context { public: context (const parser& yyparser, const symbol_type& yyla); const symbol_type& lookahead () const YY_NOEXCEPT { return yyla_; } symbol_kind_type token () const YY_NOEXCEPT { return yyla_.kind (); } const location_type& location () const YY_NOEXCEPT { return yyla_.location; } /// Put in YYARG at most YYARGN of the expected tokens, and return the /// number of tokens stored in YYARG. If YYARG is null, return the /// number of expected tokens (guaranteed to be less than YYNTOKENS). int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; private: const parser& yyparser_; const symbol_type& yyla_; }; private: #if YY_CPLUSPLUS < 201103L /// Non copyable. parser (const parser&); /// Non copyable. parser& operator= (const parser&); #endif /// Stored state numbers (used for stacks). typedef signed char state_type; /// The arguments of the error message. int yy_syntax_error_arguments_ (const context& yyctx, symbol_kind_type yyarg[], int yyargn) const; /// Generate an error message. /// \param yyctx the context in which the error occurred. virtual std::string yysyntax_error_ (const context& yyctx) const; /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack static state_type yy_lr_goto_state_ (state_type yystate, int yysym); /// Whether the given \c yypact_ value indicates a defaulted state. /// \param yyvalue the value to check static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT; /// Whether the given \c yytable_ value indicates a syntax error. /// \param yyvalue the value to check static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT; static const signed char yypact_ninf_; static const signed char yytable_ninf_; /// Convert a scanner token kind \a t to a symbol kind. /// In theory \a t should be a token_kind_type, but character literals /// are valid, yet not members of the token_kind_type enum. static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT; /// Convert the symbol name \a n to a form suitable for a diagnostic. static std::string yytnamerr_ (const char *yystr); /// For a symbol, its name in clear. static const char* const yytname_[]; // Tables. // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing // STATE-NUM. static const signed char yypact_[]; // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. // Performed when YYTABLE does not specify something else to do. Zero // means the default is an error. static const signed char yydefact_[]; // YYPGOTO[NTERM-NUM]. static const signed char yypgoto_[]; // YYDEFGOTO[NTERM-NUM]. static const signed char yydefgoto_[]; // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If // positive, shift that token. If negative, reduce the rule whose // number is the opposite. If YYTABLE_NINF, syntax error. static const signed char yytable_[]; static const signed char yycheck_[]; // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of // state STATE-NUM. static const signed char yystos_[]; // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. static const signed char yyr1_[]; // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. static const signed char yyr2_[]; #if YYDEBUG // YYRLINE[YYN] -- Source line where rule number YYN was defined. static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. virtual void yy_reduce_print_ (int r) const; /// Print the state stack on the debug stream. virtual void yy_stack_print_ () const; /// Debugging level. int yydebug_; /// Debug stream. std::ostream* yycdebug_; /// \brief Display a symbol kind, value and location. /// \param yyo The output stream. /// \param yysym The symbol. template void yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const; #endif /// \brief Reclaim the memory associated to a symbol. /// \param yymsg Why this token is reclaimed. /// If null, print nothing. /// \param yysym The symbol. template void yy_destroy_ (const char* yymsg, basic_symbol& yysym) const; private: /// Type access provider for state based symbols. struct by_state { /// Default constructor. by_state () YY_NOEXCEPT; /// The symbol kind as needed by the constructor. typedef state_type kind_type; /// Constructor. by_state (kind_type s) YY_NOEXCEPT; /// Copy constructor. by_state (const by_state& that) YY_NOEXCEPT; /// Record that this symbol is empty. void clear () YY_NOEXCEPT; /// Steal the symbol kind from \a that. void move (by_state& that); /// The symbol kind (corresponding to \a state). /// \a symbol_kind::S_YYEMPTY when empty. symbol_kind_type kind () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. /// We use the initial state, as it does not have a value. enum { empty_state = 0 }; /// The state. /// \a empty when empty. state_type state; }; /// "Internal" symbol: element of the stack. struct stack_symbol_type : basic_symbol { /// Superclass. typedef basic_symbol super_type; /// Construct an empty symbol. stack_symbol_type (); /// Move or copy construction. stack_symbol_type (YY_RVREF (stack_symbol_type) that); /// Steal the contents from \a sym to build this. stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym); #if YY_CPLUSPLUS < 201103L /// Assignment, needed by push_back by some old implementations. /// Moves the contents of that. stack_symbol_type& operator= (stack_symbol_type& that); /// Assignment, needed by push_back by other implementations. /// Needed by some other old implementations. stack_symbol_type& operator= (const stack_symbol_type& that); #endif }; /// A stack with random access from its top. template > class stack { public: // Hide our reversed order. typedef typename S::iterator iterator; typedef typename S::const_iterator const_iterator; typedef typename S::size_type size_type; typedef typename std::ptrdiff_t index_type; stack (size_type n = 200) YY_NOEXCEPT : seq_ (n) {} #if 201103L <= YY_CPLUSPLUS /// Non copyable. stack (const stack&) = delete; /// Non copyable. stack& operator= (const stack&) = delete; #endif /// Random access. /// /// Index 0 returns the topmost element. const T& operator[] (index_type i) const { return seq_[size_type (size () - 1 - i)]; } /// Random access. /// /// Index 0 returns the topmost element. T& operator[] (index_type i) { return seq_[size_type (size () - 1 - i)]; } /// Steal the contents of \a t. /// /// Close to move-semantics. void push (YY_MOVE_REF (T) t) { seq_.push_back (T ()); operator[] (0).move (t); } /// Pop elements from the stack. void pop (std::ptrdiff_t n = 1) YY_NOEXCEPT { for (; 0 < n; --n) seq_.pop_back (); } /// Pop all elements from the stack. void clear () YY_NOEXCEPT { seq_.clear (); } /// Number of elements on the stack. index_type size () const YY_NOEXCEPT { return index_type (seq_.size ()); } /// Iterator on top of the stack (going downwards). const_iterator begin () const YY_NOEXCEPT { return seq_.begin (); } /// Bottom of the stack. const_iterator end () const YY_NOEXCEPT { return seq_.end (); } /// Present a slice of the top of a stack. class slice { public: slice (const stack& stack, index_type range) YY_NOEXCEPT : stack_ (stack) , range_ (range) {} const T& operator[] (index_type i) const { return stack_[range_ - i]; } private: const stack& stack_; index_type range_; }; private: #if YY_CPLUSPLUS < 201103L /// Non copyable. stack (const stack&); /// Non copyable. stack& operator= (const stack&); #endif /// The wrapped container. S seq_; }; /// Stack type. typedef stack stack_type; /// The stack. stack_type yystack_; /// Push a new state on the stack. /// \param m a debug message to display /// if null, no trace is output. /// \param sym the symbol /// \warning the contents of \a s.value is stolen. void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym); /// Push a new look ahead token on the state on the stack. /// \param m a debug message to display /// if null, no trace is output. /// \param s the state /// \param sym the symbol (for its value and location). /// \warning the contents of \a sym.value is stolen. void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); /// Pop \a n symbols from the stack. void yypop_ (int n = 1) YY_NOEXCEPT; /// Constants. enum { yylast_ = 60, ///< Last index in yytable_. yynnts_ = 8, ///< Number of nonterminal symbols. yyfinal_ = 14 ///< Termination state number. }; // User arguments. WasaParserDriver* d; }; } // yy #line 826 "wasaparse.tab.hpp" #endif // !YY_YY_WASAPARSE_TAB_HPP_INCLUDED recoll-1.43.12/query/docseq.cpp0000644000175000017500000000724615121730573015610 0ustar dockesdockes/* Copyright (C) 2005-2020 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "docseq.h" #include "filtseq.h" #include "sortseq.h" #include "log.h" #include "internfile.h" #include "rcldb.h" using std::string; using std::vector; std::mutex DocSequence::o_dblock; string DocSequence::o_sort_trans; string DocSequence::o_filt_trans; int DocSequence::getSeqSlice(int offs, int cnt, vector& result) { int ret = 0; for (int num = offs; num < offs + cnt; num++, ret++) { result.push_back(ResListEntry()); if (!getDoc(num, result.back().doc, &result.back().subHeader)) { result.pop_back(); return ret; } } return ret; } bool DocSequence::getEnclosing(Rcl::Doc& doc, Rcl::Doc& pdoc) { std::shared_ptr db = getDb(); if (!db) { LOGERR("DocSequence::getEnclosing: no db\n" ); return false; } std::unique_lock locker(o_dblock); string udi; if (!FileInterner::getEnclosingUDI(doc, udi)) return false; bool dbret = db->getDoc(udi, doc, pdoc); return dbret && pdoc.pc != -1; } // Remove stacked modifying sources (sort, filter) until we get to a real one void DocSource::stripStack() { if (!m_seq) return; while (m_seq->getSourceSeq()) { m_seq = m_seq->getSourceSeq(); } } bool DocSource::buildStack() { LOGDEB2("DocSource::buildStack()\n" ); stripStack(); if (!m_seq) return false; // Filtering must be done before sorting, (which may // truncates the original list) if (m_seq->canFilter()) { if (!m_seq->setFiltSpec(m_fspec)) { LOGERR("DocSource::buildStack: setfiltspec failed\n" ); } } else { if (m_fspec.isNotNull()) { m_seq = std::shared_ptr(new DocSeqFiltered(m_config, m_seq, m_fspec)); } } if (m_seq->canSort()) { if (!m_seq->setSortSpec(m_sspec)) { LOGERR("DocSource::buildStack: setsortspec failed\n" ); } } else { if (m_sspec.isNotNull()) { m_seq = std::shared_ptr(new DocSeqSorted(m_seq, m_sspec)); } } return true; } string DocSource::title() { if (!m_seq) return string(); string qual; if (m_fspec.isNotNull() && !m_sspec.isNotNull()) qual = string(" (") + o_filt_trans + string(")"); else if (!m_fspec.isNotNull() && m_sspec.isNotNull()) qual = string(" (") + o_sort_trans + string(")"); else if (m_fspec.isNotNull() && m_sspec.isNotNull()) qual = string(" (") + o_sort_trans + string(",") + o_filt_trans + string(")"); return m_seq->title() + qual; } bool DocSource::setFiltSpec(const DocSeqFiltSpec &f) { LOGDEB2("DocSource::setFiltSpec\n" ); m_fspec = f; buildStack(); return true; } bool DocSource::setSortSpec(const DocSeqSortSpec &s) { LOGDEB2("DocSource::setSortSpec\n" ); m_sspec = s; buildStack(); return true; } recoll-1.43.12/query/recollqmain.cpp0000644000175000017500000000204215121730573016625 0ustar dockesdockes/* Copyright (C) 2006-2025 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // Driver for the actual recollq query runner code #include #include "recollq.h" #include "pathut.h" class RclConfig; static RclConfig *rclconfig; int main(int argc, char **argv) { pathut_setargv0(argv[0]); return(recollq(&rclconfig, argc, argv)); } recoll-1.43.12/query/stack.hh0000644000175000017500000000050015121730573015236 0ustar dockesdockes// A Bison parser, made by GNU Bison 3.8.2. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined with the parser itself. // // To get rid of this file: // 1. add '%require "3.2"' (or newer) to your grammar file // 2. remove references to this file from your build system. recoll-1.43.12/query/docseq.h0000644000175000017500000002275515121730573015257 0ustar dockesdockes/* Copyright (C) 2004-2023 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _DOCSEQ_H_INCLUDED_ #define _DOCSEQ_H_INCLUDED_ #include #include #include #include #include #include "rcldoc.h" #include "hldata.h" // Need this for the "Snippet" class def. #include "rclquery.h" // A result list entry. struct ResListEntry { Rcl::Doc doc; std::string subHeader; }; /** Sort specification. */ class DocSeqSortSpec { public: DocSeqSortSpec() : desc(false) {} bool isNotNull() const {return !field.empty();} void reset() {field.erase();} std::string field; bool desc; }; /** Filtering spec. This is only used to filter by doc category for now, hence the rather specialized interface */ class DocSeqFiltSpec { public: DocSeqFiltSpec() {} enum Crit {DSFS_MIMETYPE, DSFS_QLANG, DSFS_PASSALL}; void orCrit(Crit crit, const std::string& value) { crits.push_back(crit); values.push_back(value); } std::vector crits; std::vector values; void reset() {crits.clear(); values.clear();} bool isNotNull() const {return crits.size() != 0;} }; class PlainToRich; /** Interface for a list of documents coming from some source. The result list display data may come from different sources (ie: history or Db query), and be post-processed (DocSeqSorted). Additional functionality like filtering/sorting can either be obtained by stacking DocSequence objects (ie: sorting history), or by native capability (ex: docseqdb can sort and filter). The implementation might be nicer by using more sophisticated c++ with multiple inheritance of sort and filter virtual interfaces, but the current one will have to do for now. */ class DocSequence { public: DocSequence(const std::string &t) : m_title(t) {} virtual ~DocSequence() {} DocSequence(const DocSequence&) = delete; DocSequence& operator=(const DocSequence&) = delete; /** Get document at given rank. * * @param num document rank in sequence * @param doc return data * @param sh subheader to display before this result (ie: date change * inside history) * @return true if ok, false for error or end of data */ virtual bool getDoc(int num, Rcl::Doc &doc, std::string *sh = nullptr) = 0; /** Get next page of documents. This accumulates entries into the result * list parameter (doesn't reset it). */ virtual int getSeqSlice(int offs, int cnt, std::vector& result); /** Get abstract for document. * The default is to return the input doc's abstract fields, but some * sequences can compute a better value (ie: docseqdb). This is special because it may take * time. */ virtual bool getAbstract(Rcl::Doc& doc, PlainToRich *, std::vector& abs, bool forcesnips = false) { if (!forcesnips) abs.push_back(doc.meta[Rcl::Doc::keyabs]); return true; } virtual bool getAbstract(Rcl::Doc& doc, PlainToRich *, std::vector& abs, int, bool) { abs.push_back(Rcl::Snippet(0, doc.meta[Rcl::Doc::keyabs])); return true; } virtual int getFirstMatchPage(Rcl::Doc&, std::string&) { return -1; } /** Get duplicates. */ virtual bool docDups(const Rcl::Doc&, std::vector&) { return false; } /** For an embedded document: get the immediately enclosing doc * (e.g., for an attachment, the message it is attached to. Only * makes sense is ipath is not empty. */ virtual bool getEnclosing(Rcl::Doc&, Rcl::Doc&); /** Get estimated total count in results */ virtual int getResCnt() = 0; /** Get title for result list */ virtual std::string title() { return m_title; } /** Can do snippets ? */ virtual bool snippetsCapable() { return false; } /** Get description for underlying query */ virtual std::string getDescription() = 0; /** Get search terms (for highlighting abstracts). Some sequences * may have no associated search terms. Implement this for them. */ virtual void getTerms(HighlightData& hld) { hld.clear(); } virtual void getDocTerms(const Rcl::Doc&, std::vector>&) { } virtual std::list expand(Rcl::Doc &) { return std::list(); } virtual std::string getReason() { return m_reason; } /** Optional functionality. */ virtual bool canFilter() {return false;} virtual bool canSort() {return false;} virtual bool setFiltSpec(const DocSeqFiltSpec &) {return false;} virtual bool setSortSpec(const DocSeqSortSpec &) {return false;} virtual std::shared_ptr getSourceSeq() { return std::shared_ptr(); } virtual void setqquantum(int) {} static void set_translations(const std::string& sort, const std::string& filt) { o_sort_trans = sort; o_filt_trans = filt; } protected: friend class DocSeqModifier; virtual std::shared_ptr getDb() = 0; static std::mutex o_dblock; static std::string o_sort_trans; static std::string o_filt_trans; std::string m_reason; private: std::string m_title; }; /** A modifier has a child sequence which does the real work and does * something with the results. Some operations are just delegated */ class DocSeqModifier : public DocSequence { public: DocSeqModifier(std::shared_ptr iseq) : DocSequence(""), m_seq(iseq) {} virtual ~DocSeqModifier() {} DocSeqModifier(const DocSeqModifier&) = delete; DocSeqModifier& operator=(const DocSeqModifier&) = delete; virtual bool getAbstract( Rcl::Doc& doc, PlainToRich *ptr, std::vector& abs, bool forcesnips) override { if (!m_seq) return false; return m_seq->getAbstract(doc, ptr, abs, forcesnips); } virtual bool getAbstract(Rcl::Doc& doc, PlainToRich *ptr, std::vector& abs, int maxlen, bool bypage) override { if (!m_seq) return false; return m_seq->getAbstract(doc, ptr, abs, maxlen, bypage); } /** Get duplicates. */ virtual bool docDups(const Rcl::Doc& doc, std::vector& dups) override { if (!m_seq) return false; return m_seq->docDups(doc, dups); } virtual bool snippetsCapable() override { if (!m_seq) return false; return m_seq->snippetsCapable(); } virtual std::string getDescription() override { if (!m_seq) return ""; return m_seq->getDescription(); } virtual void getTerms(HighlightData& hld) override { if (!m_seq) return; m_seq->getTerms(hld); } virtual void getDocTerms(const Rcl::Doc& doc, std::vector>& terms) override { if (!m_seq) return; m_seq->getDocTerms(doc, terms); } virtual bool getEnclosing(Rcl::Doc& doc, Rcl::Doc& pdoc) override { if (!m_seq) return false; return m_seq->getEnclosing(doc, pdoc); } virtual std::string getReason() override { if (!m_seq) return std::string(); return m_seq->getReason(); } virtual std::string title() override { return m_seq->title(); } virtual std::shared_ptr getSourceSeq() override { return m_seq; } protected: virtual std::shared_ptr getDb() override { if (!m_seq) return nullptr; return m_seq->getDb(); } std::shared_ptr m_seq; }; class RclConfig; // A DocSource can juggle docseqs of different kinds to implement // sorting and filtering in ways depending on the base seqs capabilities class DocSource : public DocSeqModifier { public: DocSource(RclConfig *config, std::shared_ptr iseq) : DocSeqModifier(iseq), m_config(config) {} virtual bool canFilter() override {return true;} virtual bool canSort() override {return true;} virtual bool setFiltSpec(const DocSeqFiltSpec &) override; virtual bool setSortSpec(const DocSeqSortSpec &) override; virtual bool getDoc(int num, Rcl::Doc &doc, std::string *sh = nullptr) override { if (!m_seq) return false; return m_seq->getDoc(num, doc, sh); } virtual int getResCnt() override { if (!m_seq) return 0; return m_seq->getResCnt(); } virtual std::string title() override; private: bool buildStack(); void stripStack(); RclConfig *m_config; DocSeqFiltSpec m_fspec; DocSeqSortSpec m_sspec; }; #endif /* _DOCSEQ_H_ */ recoll-1.43.12/query/filtseq.cpp0000644000175000017500000001006315121730573015770 0ustar dockesdockes/* Copyright (C) 2005-2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "log.h" #include "filtseq.h" #include "rclconfig.h" static bool filter(const DocSeqFiltSpec& fs, const Rcl::Doc *x) { LOGDEB2(" Filter: ncrits " << fs.crits.size() << "\n"); // Compare using each criterion in term. We're doing an or: 1st ok ends for (unsigned int i = 0; i < fs.crits.size(); i++) { switch (fs.crits[i]) { case DocSeqFiltSpec::DSFS_MIMETYPE: LOGDEB2(" filter: MIMETYPE: me [" << fs.values[i] << "] doc [" << x->mimetype << "]\n"); if (x->mimetype == fs.values[i]) return true; break; case DocSeqFiltSpec::DSFS_QLANG: { LOGDEB(" filter: QLANG [" << fs.values[i] << "]!!\n"); } break; case DocSeqFiltSpec::DSFS_PASSALL: return true; } } // Did all comparisons return false; } DocSeqFiltered::DocSeqFiltered( RclConfig *conf, std::shared_ptr iseq, DocSeqFiltSpec &filtspec) : DocSeqModifier(iseq), m_config(conf) { setFiltSpec(filtspec); } bool DocSeqFiltered::setFiltSpec(const DocSeqFiltSpec &filtspec) { LOGDEB0("DocSeqFiltered::setFiltSpec\n"); for (unsigned int i = 0; i < filtspec.crits.size(); i++) { switch (filtspec.crits[i]) { case DocSeqFiltSpec::DSFS_MIMETYPE: m_spec.orCrit(filtspec.crits[i], filtspec.values[i]); break; case DocSeqFiltSpec::DSFS_QLANG: { // There are very few lang constructs that we can interpret. The // default config uses rclcat:value only. That will be all for now... std::string val = filtspec.values[i]; if (val.find("rclcat:") == 0) { std::string catg = val.substr(7); std::vector tps; m_config->getMimeCatTypes(catg, tps); for (const auto& mime : tps) { LOGDEB2("Adding mime: [" << mime << "]\n"); m_spec.orCrit(DocSeqFiltSpec::DSFS_MIMETYPE, mime); } } } break; default: break; } } // If m_spec ends up empty, pass everything, better than filtering all. if (m_spec.crits.empty()) { m_spec.orCrit(DocSeqFiltSpec::DSFS_PASSALL, ""); } m_dbindices.clear(); return true; } bool DocSeqFiltered::getDoc(int idx, Rcl::Doc &doc, std::string *) { LOGDEB2("DocSeqFiltered::getDoc() fetching " << idx << "\n"); if (idx >= (int)m_dbindices.size()) { // Have to fetch docs and filter until we get enough or // fail m_dbindices.reserve(idx+1); // First backend seq doc we fetch is the one after last stored int backend_idx = m_dbindices.size() > 0 ? m_dbindices.back() + 1 : 0; // Loop until we get enough docs Rcl::Doc tdoc; while (idx >= (int)m_dbindices.size()) { if (!m_seq->getDoc(backend_idx, tdoc)) return false; if (filter(m_spec, &tdoc)) { m_dbindices.push_back(backend_idx); } backend_idx++; } doc = tdoc; } else { // The corresponding backend indice is already known if (!m_seq->getDoc(m_dbindices[idx], doc)) return false; } return true; } recoll-1.43.12/query/hldata.cpp0000644000175000017500000003022015121730573015553 0ustar dockesdockes/* Copyright (C) 2017-2019 J.F.Dockes * * License: GPL 2.1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include "hldata.h" #include #include #include "log.h" #include "smallut.h" using std::string; using std::unordered_map; using std::vector; using std::pair; #undef DEBUGGROUPS #ifdef DEBUGGROUPS #define LOGRP LOGINF #else #define LOGRP LOGDEB1 #endif // Combined position list for or'd terms struct OrPList { void addplist(const string& term, const vector* pl) { terms.push_back(term); plists.push_back(pl); indexes.push_back(0); totalsize += pl->size(); } // Returns -1 for eof, else the next smallest value in the // combined lists, according to the current indexes. int value() { size_t minval = INT_MAX; int minidx = -1; for (unsigned ii = 0; ii < indexes.size(); ii++) { const vector& pl(*plists[ii]); if (indexes[ii] >= pl.size()) continue; // this list done if (pl[indexes[ii]] < minval) { minval = pl[indexes[ii]]; minidx = ii; } } if (minidx != -1) { LOGRP("OrPList::value() -> " << minval << " for " << terms[minidx] << "\n"); currentidx = minidx; return static_cast(minval); } else { LOGRP("OrPList::value(): EOL for " << stringsToString(terms)<<"\n"); return -1; } } int next() { if (currentidx != -1) { indexes[currentidx]++; } return value(); } size_t size() const { return totalsize; } void rewind() { for (auto& idx : indexes) { idx = 0; } currentidx = -1; } vector*> plists; vector indexes; vector terms; int currentidx{-1}; size_t totalsize{0}; }; static inline void setWinMinMax(int pos, int& sta, int& sto) { if (pos < sta) { sta = pos; } if (pos > sto) { sto = pos; } } /* * @param window the total width for the "near" area, in positions. * @param plists the position vectors for the terms. The array is * sorted shorted first for optimization. The function does a * recursive call on the next array if the match is still possible * after dealing with the current one * @param plist_idx the index for the position list we will work with. * @param min, max the current minimum and maximum term positions. * @param[output] sp, ep, the start and end positions of the found match. * @param minpos Highest end of a found match. While looking for * further matches, we don't want the search to extend before * this, because it does not make sense for highlight regions to * overlap. * @param isphrase if true, the position lists are in term order, and * we only look for the next match beyond the current window top. */ static bool do_proximity_test( const int window, vector& plists, unsigned int plist_idx, int min, int max, int *sp, int *ep, int minpos, bool isphrase) { // Overlap interdiction: possibly adjust window start by input minpos int actualminpos = isphrase ? max + 1 : max + 1 - window; if (actualminpos < minpos) actualminpos = minpos; LOGRP("do_prox_test: win " << window << " plist_idx " << plist_idx << " min " << min << " max " << max << " minpos " << minpos << " isphrase " << isphrase << " actualminpos " << actualminpos << "\n"); // Find 1st position bigger than window start. A previous call may // have advanced the index, so we begin by retrieving the current // value. int nextpos = plists[plist_idx].value(); while (nextpos != -1 && nextpos < actualminpos) nextpos = plists[plist_idx].next(); // Look for position inside window. If not found, no match. If // found: if this is the last list we're done, else recurse on // next list after adjusting the window while (nextpos != -1) { if (nextpos > min + window - 1) { return false; } if (plist_idx + 1 == plists.size()) { // We already checked pos > min, now we also have pos < // max, and we are the last list: done: set return values. setWinMinMax(nextpos, *sp, *ep); return true; } setWinMinMax(nextpos, min, max); if (do_proximity_test(window, plists, plist_idx + 1, min, max, sp, ep, minpos, isphrase)) { return true; } nextpos = plists[plist_idx].next(); } return false; } // Find matches for one group of terms bool matchGroup(const HighlightData& hldata, unsigned int grpidx, const unordered_map>& inplists, const unordered_map>& gpostobytes, vector& tboffs) { const auto& tg(hldata.index_term_groups[grpidx]); bool isphrase = tg.kind == HighlightData::TermGroup::TGK_PHRASE; #ifdef DEBUGGROUPS string allplterms; for (const auto& entry:inplists) { allplterms += entry.first + " "; } LOGRP("matchGroup: isphrase " << isphrase << ". Have plists for [" << allplterms << "]\n"); //LOGRP("matchGroup: hldata: " << hldata.toString() << std::endl); #endif int window = int(tg.orgroups.size() + tg.slack); // The position lists we are going to work with. We extract them from the // (string->plist) map vector orplists; // Find the position list for each term in the group and build the combined lists for the term // or groups (each group is the result of the exansion of one user term). It is possible that // this particular group was not actually matched by the search, so that some terms are not // found, in which case we bail out. for (const auto& group : tg.orgroups) { orplists.push_back(OrPList()); for (const auto& term : group) { const auto pl = inplists.find(term); if (pl == inplists.end()) { LOGRP("Matchgroup::matchGroup: term [" << term << "] not found in plists\n"); continue; } orplists.back().addplist(pl->first, &(pl->second)); } if (orplists.back().plists.empty()) { LOGRP("No positions list found for OR group [" << stringsToString(group) << "] : input has no group match, returning false\n"); return false; } else { LOGRP("Created OrPList has " << orplists.back().plists.size() << " members\n"); } } // I think this can't actually happen, was useful when we used to // prune the groups, but doesn't hurt. if (orplists.size() < 2) { LOGRP("Matchgroup::matchGroup: no actual groups found\n"); return false; } if (!isphrase) { // Sort the positions lists so that the shorter is first std::sort(orplists.begin(), orplists.end(), [](const OrPList& a, const OrPList& b) -> bool { return a.size() < b.size(); } ); } // Minpos is the highest end of a found match. While looking for // further matches, we don't want the search to extend before // this, because it does not make sense for highlight regions to // overlap int minpos = 0; // Walk the shortest plist and look for matches int pos; while ((pos = orplists[0].next()) != -1) { int sta = INT_MAX, sto = 0; LOGDEB2("MatchGroup: Testing at pos " << pos << "\n"); if (do_proximity_test( window, orplists, 1, pos, pos, &sta, &sto, minpos, isphrase)) { setWinMinMax(pos, sta, sto); LOGRP("Matchgroup::matchGroup: MATCH termpos [" << sta << "," << sto << "]\n"); minpos = sto + 1; // Translate the position window into a byte offset window auto i1 = gpostobytes.find(sta); auto i2 = gpostobytes.find(sto); if (i1 != gpostobytes.end() && i2 != gpostobytes.end()) { LOGDEB2("Matchgroup::matchGroup: pushing bpos " << i1->second.first << " " << i2->second.second << "\n"); tboffs.push_back(GroupMatchEntry(i1->second.first, i2->second.second, grpidx)); } else { LOGDEB0("matchGroup: no bpos found for " << sta << " or " << sto << "\n"); } } else { LOGRP("matchGroup: no group match found at this position\n"); } } return !tboffs.empty(); } vector kindflags { CHARFLAGENTRY(HighlightData::TermGroup::TGK_TERM), CHARFLAGENTRY(HighlightData::TermGroup::TGK_NEAR), CHARFLAGENTRY(HighlightData::TermGroup::TGK_PHRASE), }; string HighlightData::toString() const { string out; out.append("\nUser terms (orthograph): "); for (const auto& term : uterms) { out.append(" [").append(term).append("]"); } out.append("\nUser terms to Query terms:"); for (const auto& entry: terms) { out.append("[").append(entry.first).append("]->["); out.append(entry.second).append("] "); } out.append("\nGroups: "); char cbuf[200]; snprintf(cbuf, sizeof(cbuf), "index_term_groups size %d ugroups size %d", int(index_term_groups.size()), int(ugroups.size())); out.append(cbuf); size_t ugidx = (size_t) - 1; for (const HighlightData::TermGroup &tg : index_term_groups) { if (ugidx != tg.grpsugidx) { ugidx = tg.grpsugidx; out.append("\n("); for (unsigned int j = 0; j < ugroups[ugidx].size(); j++) { out.append("[").append(ugroups[ugidx][j]).append("] "); } out.append(") ->"); } if (tg.kind == HighlightData::TermGroup::TGK_TERM) { out.append(" <").append(tg.term).append(">"); } else { out.append(" {"); for (unsigned int j = 0; j < tg.orgroups.size(); j++) { out.append(" {"); for (unsigned int k = 0; k < tg.orgroups[j].size(); k++) { out.append("[").append(tg.orgroups[j][k]).append("]"); } out.append("}"); } out.append(" "); out.append(valToString(kindflags,tg.kind)).append("-").append(std::to_string(tg.slack)); out.append(" }"); } } out.append("\n"); out.append("\nTerms generated by spelling approximation:"); out.append(stringsToString(spellexpands)); out.append("\n"); return out; } void HighlightData::append(const HighlightData& hl) { uterms.insert(hl.uterms.begin(), hl.uterms.end()); terms.insert(hl.terms.begin(), hl.terms.end()); size_t ugsz0 = ugroups.size(); ugroups.insert(ugroups.end(), hl.ugroups.begin(), hl.ugroups.end()); size_t itgsize = index_term_groups.size(); index_term_groups.insert(index_term_groups.end(), hl.index_term_groups.begin(), hl.index_term_groups.end()); // Adjust the grpsugidx values for the newly inserted entries for (auto idx = itgsize; idx < index_term_groups.size(); idx++) { index_term_groups[idx].grpsugidx += ugsz0; } spellexpands.insert(spellexpands.end(), hl.spellexpands.begin(), hl.spellexpands.end()); } recoll-1.43.12/query/sortseq.cpp0000644000175000017500000000453515121730573016030 0ustar dockesdockes/* Copyright (C) 2005-2021 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include "sortseq.h" #include "log.h" using std::string; class CompareDocs { DocSeqSortSpec ss; public: CompareDocs(const DocSeqSortSpec &sortspec) : ss(sortspec) {} // It's not too clear in the std::sort doc what this should do. This // behaves as operator< int operator()(const Rcl::Doc *x, const Rcl::Doc *y) { LOGDEB1("Comparing .. \n" ); const auto xit = x->meta.find(ss.field); const auto yit = y->meta.find(ss.field); if (xit == x->meta.end() || yit == y->meta.end()) return 0; return ss.desc ? yit->second < xit->second : xit->second < yit->second; } }; bool DocSeqSorted::setSortSpec(const DocSeqSortSpec &sortspec) { LOGDEB("DocSeqSorted::setSortSpec\n" ); m_spec = sortspec; int count = m_seq->getResCnt(); LOGDEB("DocSeqSorted:: count " << (count) << "\n" ); m_docs.resize(count); int i; for (i = 0; i < count; i++) { if (!m_seq->getDoc(i, m_docs[i])) { LOGERR("DocSeqSorted: getDoc failed for doc " << i << "\n"); count = i; break; } } m_docs.resize(count); m_docsp.resize(count); for (i = 0; i < count; i++) m_docsp[i] = &m_docs[i]; CompareDocs cmp(sortspec); sort(m_docsp.begin(), m_docsp.end(), cmp); return true; } bool DocSeqSorted::getDoc(int num, Rcl::Doc &doc, string *) { LOGDEB("DocSeqSorted::getDoc(" << num << ")\n"); if (num < 0 || num >= int(m_docsp.size())) return false; doc = *m_docsp[num]; return true; } recoll-1.43.12/query/wasaparserdriver.h0000644000175000017500000000606515121730573017361 0ustar dockesdockes/* Copyright (C) 2006 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _WASAPARSERDRIVER_H_INCLUDED_ #define _WASAPARSERDRIVER_H_INCLUDED_ #include #include #include #include "rclutil.h" #include "searchdata.h" class WasaParserDriver; namespace yy { class parser; } class RclConfig; class WasaParserDriver { public: WasaParserDriver(const RclConfig *c, const std::string sl, const std::string& as) : m_stemlang(sl), m_autosuffs(as), m_config(c) {} ~WasaParserDriver() {} WasaParserDriver(const WasaParserDriver&) = delete; WasaParserDriver& operator=(const WasaParserDriver&) = delete; Rcl::SearchData *parse(const std::string&); bool addClause(Rcl::SearchData *sd, Rcl::SearchDataClauseSimple* cl); int GETCHAR(); void UNGETCHAR(int c); std::string& qualifiers() { return m_qualifiers; } void setreason(const std::string& reason) { m_reason = reason; } const std::string& getreason() const { return m_reason; } private: friend class yy::parser; std::string m_stemlang; std::string m_autosuffs; const RclConfig *m_config; // input string. std::string m_input; // Current position in m_input unsigned int m_index{0}; // Characters pushed-back, ready for next getchar. std::stack m_returns; // Result, set by parser. Rcl::SearchData *m_result{nullptr}; // Storage for top level filters std::vector m_filetypes; std::vector m_nfiletypes; bool m_haveDates{false}; DateInterval m_dates; // Restrict to date interval #ifdef EXT4_BIRTH_TIME bool m_haveBrDates{false}; DateInterval m_brdates; // Restrict to date interval #endif int64_t m_maxSize{-1}; int64_t m_minSize{-1}; int m_subSpec{Rcl::SearchData::SUBDOC_ANY}; std::string m_reason; // Let the quoted string reader store qualifiers in there, simpler // than handling this in the parser, because their nature is // determined by the absence of white space after the closing // dquote. e.g "some term"abc. We could avoid this by making white // space a token. std::string m_qualifiers; }; #endif /* _WASAPARSERDRIVER_H_INCLUDED_ */ recoll-1.43.12/query/filtseq.h0000644000175000017500000000367715121730573015452 0ustar dockesdockes/* Copyright (C) 2004 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _FILTSEQ_H_INCLUDED_ #define _FILTSEQ_H_INCLUDED_ #include "autoconfig.h" #include #include #include #include "docseq.h" class RclConfig; /** * A filtered sequence is created from another one by selecting entries * according to the given criteria. * Note that this class can only filter on mime type (or rclcatg) at the moment, * and is only used for history. Normal query filtering is performed by adding a * clause to the Xapian query. */ class DocSeqFiltered : public DocSeqModifier { public: DocSeqFiltered(RclConfig *conf, std::shared_ptr iseq, DocSeqFiltSpec &filtspec); virtual ~DocSeqFiltered() {} DocSeqFiltered(const DocSeqFiltered&) = delete; DocSeqFiltered& operator=(const DocSeqFiltered&) = delete; virtual bool canFilter() override {return true;} virtual bool setFiltSpec(const DocSeqFiltSpec &filtspec) override; virtual bool getDoc(int num, Rcl::Doc &doc, std::string *sh = nullptr) override; virtual int getResCnt() override {return m_seq->getResCnt();} private: RclConfig *m_config; DocSeqFiltSpec m_spec; std::vector m_dbindices; }; #endif /* _FILTSEQ_H_INCLUDED_ */ recoll-1.43.12/query/wasatorcl.h0000644000175000017500000000222614753313624015773 0ustar dockesdockes/* Copyright (C) 2006 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _WASATORCL_H_INCLUDED_ #define _WASATORCL_H_INCLUDED_ #include #include namespace Rcl { class SearchData; } class RclConfig; extern std::shared_ptrwasaStringToRcl( const RclConfig *, const std::string& stemlang, const std::string& query, std::string &reason, const std::string& autosuffs = ""); #endif /* _WASATORCL_H_INCLUDED_ */ recoll-1.43.12/query/qresultstore.h0000644000175000017500000000423615121730573016547 0ustar dockesdockes/* Copyright (C) 2017-2020 J.F.Dockes * * License: GPL 2.1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _QRESULTSTORE_H_INCLUDED_ #define _QRESULTSTORE_H_INCLUDED_ /** * Implement an efficient way to store the whole or part of a query result set. * This would naturally be done as a vector, but the natural * way leads to a huge space waste (8-10x), which may be a problem in * some cases. This is mostly used by the uprcl Media Server. */ #include #include namespace Rcl { class Query; class QResultStore { public: QResultStore(); ~QResultStore(); QResultStore(const QResultStore&) = delete; QResultStore& operator=(const QResultStore&) = delete; /** * Fetch and store the results of the input query. * * @param q the executed query object to use for fetching results. * @param fldspec list of fields to be excluded or included. * @param isinc if true, the field list defines the fields to be stored, * else, those to be excluded. */ bool storeQuery(Rcl::Query& q, const std::set& fldspec = {}, bool isinc = false); /** Retrieve count of stored results */ int getCount(); /** * Retrieve field value. * * @param docindex index in query results. * @param fldname field name. */ const char *fieldValue(int docindex, const std::string& fldname); class Internal; private: Internal *m{nullptr}; }; } #endif /* _QRESULTSTORE_H_INCLUDED_ */ recoll-1.43.12/query/wasaparseaux.cpp0000644000175000017500000002002015121730573017017 0ustar dockesdockes/* Copyright (C) 2006 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "autoconfig.h" #include #include #include "wasatorcl.h" #include "wasaparserdriver.h" #include "searchdata.h" #include "log.h" #include "rclconfig.h" #define YYDEBUG 1 // bison-generated file #include "wasaparse.hpp" using namespace std; using namespace Rcl; void yy::parser::error (const location_type&, const std::string& m) { d->setreason(m); } std::shared_ptr wasaStringToRcl( const RclConfig *config, const std::string& stemlang, const std::string& query, string &reason, const std::string& autosuffs) { WasaParserDriver d(config, stemlang, autosuffs); auto sd = std::shared_ptr(d.parse(query)); if (!sd) reason = d.getreason(); return sd; } SearchData *WasaParserDriver::parse(const std::string& in) { m_input = in; m_index = 0; delete m_result; m_result = 0; m_returns = stack(); yy::parser parser(this); parser.set_debug_level(0); if (parser.parse() != 0) { delete m_result; m_result = 0; } if (m_result == 0) return m_result; // Set the top level filters (types, dates, size) for (const auto& ft : m_filetypes) { m_result->addFiletype(ft); } for (const auto& ft : m_nfiletypes) { m_result->remFiletype(ft); } if (m_haveDates) { m_result->setDateSpan(&m_dates); } #ifdef EXT4_BIRTH_TIME if (m_haveBrDates) { m_result->setBrDateSpan(&m_brdates); } #endif if (m_minSize != -1) { m_result->setMinSize(m_minSize); } if (m_maxSize != -1) { m_result->setMaxSize(m_maxSize); } if (m_subSpec != Rcl::SearchData::SUBDOC_ANY) { m_result->setSubSpec(m_subSpec); } //if (m_result) m_result->dump(cout); return m_result; } int WasaParserDriver::GETCHAR() { if (!m_returns.empty()) { int c = m_returns.top(); m_returns.pop(); return c; } if (m_index < m_input.size()) return m_input[m_index++]; return 0; } void WasaParserDriver::UNGETCHAR(int c) { m_returns.push(c); } // Add clause to query, handling special pseudo-clauses for size/date // etc. (mostly determined on field name). bool WasaParserDriver::addClause(SearchData *sd, SearchDataClauseSimple* cl) { if (cl->getfield().empty()) { // Simple clause with empty field spec. // Possibly change terms found in the "autosuffs" list into "ext" // field queries if (!m_autosuffs.empty()) { vector asfv; if (stringToStrings(m_autosuffs, asfv)) { if (find_if(asfv.begin(), asfv.end(), StringIcmpPred(cl->gettext())) != asfv.end()) { cl->setfield("ext"); cl->addModifier(SearchDataClause::SDCM_NOSTEMMING); } } } return sd->addClause(cl); } const string& ofld = cl->getfield(); string fld = stringtolower(ofld); // MIME types and categories if (!fld.compare("mime") || !fld.compare("format")) { if (cl->getexclude()) { m_nfiletypes.push_back(cl->gettext()); } else { m_filetypes.push_back(cl->gettext()); } delete cl; return false; } // Filtering for standalone- or sub-documents if (!fld.compare("issub")) { m_subSpec = atoi(cl->gettext().c_str()); delete cl; return false; } if (!fld.compare("rclcat") || !fld.compare("type")) { vector mtypes; if (m_config && m_config->getMimeCatTypes(cl->gettext(), mtypes)) { for (vector::iterator mit = mtypes.begin(); mit != mtypes.end(); mit++) { if (cl->getexclude()) { m_nfiletypes.push_back(*mit); } else { m_filetypes.push_back(*mit); } } } delete cl; return false; } // Handle "date" spec if (!fld.compare("date") #ifdef EXT4_BIRTH_TIME || !fld.compare("birtime") #endif ) { DateInterval di; if (!parsedateinterval(cl->gettext(), &di)) { LOGERR("Bad date interval format: " << cl->gettext() << "\n"); m_reason = "Bad date interval format"; delete cl; return false; } LOGDEB("addClause:: date/brdate span: " << di.y1 << "-" << di.m1 << "-" << di.d1 << "/" << di.y2 << "-" << di.m2 << "-" << di.d2 << "\n"); #ifdef EXT4_BIRTH_TIME if (fld.compare("date")) { m_haveBrDates = true; m_brdates = di; } else #endif { m_haveDates = true; m_dates = di; } delete cl; return false; } // Handle "size" spec if (!fld.compare("size")) { char *cp; int64_t size = strtoll(cl->gettext().c_str(), &cp, 10); if (*cp != 0) { switch (*cp) { case 'k': case 'K': size *= 1000;break; case 'm': case 'M': size *= 1000*1000;break; case 'g': case 'G': size *= 1000*1000*1000;break; case 't': case 'T': size *= int64_t(1000)*1000*1000*1000;break; default: m_reason = string("Bad multiplier suffix: ") + *cp; delete cl; return false; } } SearchDataClause::Relation rel = cl->getrel(); delete cl; switch (rel) { case SearchDataClause::REL_EQUALS: m_maxSize = m_minSize = size; break; case SearchDataClause::REL_LT: case SearchDataClause::REL_LTE: m_maxSize = size; break; case SearchDataClause::REL_GT: case SearchDataClause::REL_GTE: m_minSize = size; break; default: m_reason = "Bad relation operator with size query. Use > < or ="; return false; } return false; } if (!fld.compare("dir")) { // dir filtering special case SearchDataClausePath *nclause = new SearchDataClausePath(cl->gettext(), cl->getexclude()); delete cl; return sd->addClause(nclause); } if (cl->getTp() == SCLT_OR || cl->getTp() == SCLT_AND) { // If this is a normal clause and the term has commas or // slashes inside, take it as a list, turn the slashes/commas // to spaces, leave unquoted. Otherwise, this would end up as // a phrase query. This is a handy way to enter multiple terms // to be searched inside a field. We interpret ',' as AND, and // '/' as OR. No mixes allowed and ',' wins. SClType tp = SCLT_FILENAME;// impossible value string ns = neutchars(cl->gettext(), ","); if (ns.compare(cl->gettext())) { // had ',' tp = SCLT_AND; } else { ns = neutchars(cl->gettext(), "/"); if (ns.compare(cl->gettext())) { // had not ',' but has '/' tp = SCLT_OR; } } if (tp != SCLT_FILENAME) { SearchDataClauseSimple *ncl = new SearchDataClauseSimple(tp, ns, ofld); delete cl; return sd->addClause(ncl); } } return sd->addClause(cl); } recoll-1.43.12/query/docseqhist.h0000644000175000017500000000537415121730573016145 0ustar dockesdockes/* Copyright (C) 2004 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _DOCSEQHIST_H_INCLUDED_ #define _DOCSEQHIST_H_INCLUDED_ #include #include #include #include "docseq.h" #include "dynconf.h" namespace Rcl { class Db; } /** DynConf Document history entry */ class RclDHistoryEntry : public DynConfEntry { public: RclDHistoryEntry() : unixtime(0) {} RclDHistoryEntry(time_t t, const std::string& u, const std::string& d) : unixtime(t), udi(u), dbdir(d) {} virtual ~RclDHistoryEntry() {} RclDHistoryEntry(const RclDHistoryEntry&) = default; RclDHistoryEntry& operator=(const RclDHistoryEntry&) = default; virtual bool decode(const std::string &value); virtual bool encode(std::string& value); virtual bool equal(const DynConfEntry& other); time_t unixtime; std::string udi; std::string dbdir; }; /** A DocSequence coming from the history file. * History is kept as a list of urls. This queries the db to fetch * metadata for an url key */ class DocSequenceHistory : public DocSequence { public: DocSequenceHistory(std::shared_ptr db, RclDynConf *h, const std::string &t) : DocSequence(t), m_db(db), m_hist(h) {} virtual ~DocSequenceHistory() {} DocSequenceHistory(const DocSequenceHistory&) = delete; DocSequenceHistory& operator=(const DocSequenceHistory&) = delete; virtual bool getDoc(int num, Rcl::Doc &doc, std::string *sh = nullptr); virtual int getResCnt(); virtual std::string getDescription() {return m_description;} void setDescription(const std::string& desc) {m_description = desc;} protected: virtual std::shared_ptr getDb() { return m_db; } private: std::shared_ptr m_db; RclDynConf *m_hist; time_t m_prevtime{-1}; std::string m_description; // This is just an nls translated 'doc history' std::vector m_history; }; extern bool historyEnterDoc(std::shared_ptr db, RclDynConf *dncf, Rcl::Doc& doc); #endif /* _DOCSEQ_H_INCLUDED_ */ recoll-1.43.12/query/dynconf.h0000644000175000017500000001365515121730573015440 0ustar dockesdockes/* Copyright (C) 2004-2017 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _DYNCONF_H_INCLUDED_ #define _DYNCONF_H_INCLUDED_ /** * Dynamic configuration storage * * This used to be called "history" because of the initial usage. * Used to store some parameters which would fit neither in recoll.conf, * basically because they change a lot, nor in the QT preferences file, mostly * because they are specific to a configuration directory. * Examples: * - History of documents selected for preview * - Active and inactive external databases (depend on the * configuration directory) * - ... * * The storage is performed in a ConfSimple file, with subkeys and * encodings which depend on the data stored. Under each section, the keys * are sequential numeric, so this basically manages a set of lists. * * The code ensures that a a given value (as defined by the * DynConfEntry::equal() method) is only stored once. If this is * undesirable, equal() should always return false. */ #include #include #include #include "conftree.h" #include "base64.h" /** Interface for a stored object. */ class DynConfEntry { public: DynConfEntry() {} virtual ~DynConfEntry() {} DynConfEntry(const DynConfEntry&) = default; DynConfEntry& operator=(const DynConfEntry&) = default; /** Decode object-as-string coming out from storage */ virtual bool decode(const std::string &value) = 0; /** Encode object state into state for storing */ virtual bool encode(std::string& value) = 0; /** Compare objects */ virtual bool equal(const DynConfEntry &other) = 0; }; /** Stored object specialization for generic string storage */ class RclSListEntry : public DynConfEntry { public: RclSListEntry() {} virtual ~RclSListEntry() {} RclSListEntry(const RclSListEntry&) = default; RclSListEntry& operator=(const RclSListEntry&) = default; RclSListEntry(const std::string& v) : value(v) { } virtual bool decode(const std::string &enc) override { base64_decode(enc, value); return true; } virtual bool encode(std::string& enc) override { base64_encode(value, enc); return true; } virtual bool equal(const DynConfEntry& other) override { const RclSListEntry& e = dynamic_cast(other); return e.value == value; } std::string value; }; /** The dynamic configuration class */ class RclDynConf { public: RclDynConf(const std::string &fn); bool ro() { return m_data.getStatus() == ConfSimple::STATUS_RO; } bool rw() { return m_data.getStatus() == ConfSimple::STATUS_RW; } bool ok() { return m_data.getStatus() != ConfSimple::STATUS_ERROR; } std::string getFilename() { return m_data.getFilename(); } // Generic methods bool eraseAll(const std::string& sk); /** Insert new entry for section sk * @param sk section this is for * @param n new entry * @param s a scratch entry used for decoding and comparisons, * avoiding templating the routine for the actual entry type. */ bool insertNew(const std::string& sk, DynConfEntry &n, DynConfEntry &s, int maxlen = -1); // General method to extract entries. Maybe there would be a way to // express the fact that Type should derive from DynConfEntry, not // too sure how. We are just certain (further down) that it does // have a decode() method. It's up to the user that they call // insertNew() and getEntries() for the same type... template