]> git.lyx.org Git - features.git/commitdiff
Make paper search function accessible and customizable
authorJuergen Spitzmueller <spitz@lyx.org>
Thu, 27 Aug 2020 06:45:41 +0000 (08:45 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Thu, 27 Aug 2020 06:48:55 +0000 (08:48 +0200)
17 files changed:
lib/Makefile.am
lib/configure.py
lib/doc/UserGuide.lyx
lib/scripts/lyxpaperview [deleted file]
lib/scripts/prefs2prefs_prefs.py
lib/ui/stdcontext.inc
src/BiblioInfo.cpp
src/BiblioInfo.h
src/LyXRC.cpp
src/LyXRC.h
src/frontends/qt/GuiPrefs.cpp
src/frontends/qt/GuiPrefs.h
src/frontends/qt/GuiView.cpp
src/frontends/qt/qt_helpers.cpp
src/frontends/qt/qt_helpers.h
src/frontends/qt/ui/PrefEditUi.ui
src/insets/InsetCitation.cpp

index 6b5a1204e4743c42ed93ca782315822383a20b1f..dfe1986d0bc0cbc954a72af7e3594a7b68f9042e 100644 (file)
@@ -2511,7 +2511,6 @@ dist_scripts_DATA += \
        scripts/legacy_lyxpreview2ppm.py \
        scripts/listerrors \
        scripts/lyxpak.py \
-       scripts/lyxpaperview \
        scripts/lyxpaperview.py \
        scripts/lyxpreview2bitmap.py \
        scripts/lyxpreview_tools.py \
index b708edff2a15198e8a35fb2492b25ae51de72191..1547000b372e25eaf2edb339f471f6d1e5b60a89 100644 (file)
@@ -1310,13 +1310,12 @@ def checkOtherEntries():
         rc_entry = [ r'\nomencl_command "makeindex -s nomencl.ist"' ])
     checkProg('a python-pygments driver command', ['pygmentize'],
         rc_entry = [ r'\pygmentize_command "%%"' ])
-    checkProg('external script for searching and showing citation sources',
-        ['lyxpaperview', 'lyxpaperview.py'], rc_entry = [ r'\citation_search_view "%%"' ])
     ## FIXME: OCTAVE is not used anywhere
     # path, OCTAVE = checkProg('Octave', ['octave'])
     ## FIXME: MAPLE is not used anywhere
     # path, MAPLE = checkProg('Maple', ['maple'])
     # Add the rest of the entries (no checkProg is required)
+    addToRC(r'''\citation_search_view "python -tt $$s/scripts/lyxpaperview.py"''')
     addToRC(r'''\copier    fig        "python -tt $$s/scripts/fig_copy.py $$i $$o"
 \copier    pstex      "python -tt $$s/scripts/tex_copy.py $$i $$o $$l"
 \copier    pdftex     "python -tt $$s/scripts/tex_copy.py $$i $$o $$l"
index 2efde46e8331e250260fcdb96d5f1ec6f1995b84..49fa68925b36582719d70816c6f793b5324701c0 100644 (file)
@@ -8742,12 +8742,14 @@ Verbatim
 \end_layout
 
 \begin_layout Verbatim
+
 This is Verbatim.
 \end_layout
 
 \begin_layout Verbatim
 \noindent
 \align block
+
 The following 2 lines are empty:
 \end_layout
 
@@ -8760,6 +8762,7 @@ The following 2 lines are empty:
 \end_layout
 
 \begin_layout Verbatim
+
 Almost everything is allowed in Verbatim:"%&$§#~'`
 \backslash
 }][{|
@@ -8783,6 +8786,7 @@ Verbatim
 \end_layout
 
 \begin_layout Verbatim*
+
 This is Verbatim*.
 \end_layout
 
@@ -31647,184 +31651,6 @@ Additional Features
 
 \end_layout
 
-\begin_layout Subsection
-
-\change_inserted 5863208 1598273424
-Bibliography entries allowing external view of the cited material
-\end_layout
-
-\begin_layout Standard
-
-\change_inserted 5863208 1598273449
-\SpecialChar LyX
- supports viewing the material the selected citation points to – though
- you need to satisfy some conditions so the 
-\family sans
-Open
-\begin_inset space ~
-\end_inset
-
-Citation
-\begin_inset space ~
-\end_inset
-
-Content
-\family default
- in the context menu of the citation inset is active and working.
-\end_layout
-
-\begin_layout Standard
-
-\change_inserted 5863208 1598270259
-There are several ways how to make this feature available:
-\end_layout
-
-\begin_layout Itemize
-
-\change_inserted 5863208 1598273631
-Have citations entries including any of the following fields: 
-\begin_inset Flex Code
-status open
-
-\begin_layout Plain Layout
-
-\change_inserted 5863208 1598273574
-url
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
- or 
-\begin_inset Flex Code
-status open
-
-\begin_layout Plain Layout
-
-\change_inserted 5863208 1598273595
-doi
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
- for BibTeX, 
-\begin_inset Flex Code
-status open
-
-\begin_layout Plain Layout
-
-\change_inserted 5863208 1598273611
-eprint
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
- for BibLaTeX (covering arXiv, JSTOR, PubMed, HDL, Google Books 
-\begin_inset Flex Code
-status open
-
-\begin_layout Plain Layout
-
-\change_inserted 5863208 1598273631
-eprinttype
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
-).
- This will launch web browser with the appropriate link.
-\end_layout
-
-\begin_layout Itemize
-
-\change_inserted 5863208 1598273665
-Having fields pointing to local files on your disk: 
-\begin_inset Flex Code
-status open
-
-\begin_layout Plain Layout
-
-\change_inserted 5863208 1598273656
-file
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
- (filled by JabRef), 
-\begin_inset Flex Code
-status open
-
-\begin_layout Plain Layout
-
-\change_inserted 5863208 1598273665
-localfile
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
- (filled by KBibTeX).
- This will launch appropriate file viewer.
- At the moment only absolute paths are accepted.
-\change_unchanged
-
-\end_layout
-
-\begin_layout Itemize
-
-\change_inserted 5863208 1598273865
-Supplying your own script named either 
-\begin_inset Flex Code
-status open
-
-\begin_layout Plain Layout
-
-\change_inserted 5863208 1598273683
-lyxpaperview
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
- or 
-\begin_inset Flex Code
-status open
-
-\begin_layout Plain Layout
-
-\change_inserted 5863208 1598273697
-lyxpaperview.py
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
-, which takes year and first author name as an input.
- It will be responsibility of this script to search for the appropriate
- file on your disk and launch the viewer.
- This script needs to be found among other executables so 
-\family sans
-Tools\SpecialChar menuseparator
-Reconfigure
-\family default
- can recognize it.
- Example templates with identical names can be found within your installation.
-\change_unchanged
-
-\end_layout
-
 \begin_layout Subsection
 Citation Format
 \begin_inset Index idx
@@ -32350,6 +32176,192 @@ General text after
  fields you can add pre- and postnotes that apply to the whole list.
 \end_layout
 
+\begin_layout Subsection
+
+\change_inserted -712698321 1598509964
+\begin_inset CommandInset label
+LatexCommand label
+name "subsec:Opening-cited-documents"
+
+\end_inset
+
+Opening cited documents from within \SpecialChar LyX
+
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1598509000
+\SpecialChar LyX
+ supports opening documents selected citations point to via the 
+\family sans
+Try
+\begin_inset space ~
+\end_inset
+
+to
+\begin_inset space ~
+\end_inset
+
+Open
+\begin_inset space ~
+\end_inset
+
+Citation
+\begin_inset space ~
+\end_inset
+
+Content\SpecialChar ldots
+
+\family default
+ context menu if specific conditions are met:
+\end_layout
+
+\begin_layout Itemize
+
+\change_inserted -712698321 1598509037
+If citation entries include any of the fields 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1598508820
+url
+\end_layout
+
+\end_inset
+
+ or 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1598508820
+doi
+\end_layout
+
+\end_inset
+
+ for BibTeX, 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1598508820
+eprint
+\end_layout
+
+\end_inset
+
+ for BibLaTeX (covering arXiv, JSTOR, PubMed, HDL, Google Books 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1598508820
+eprinttype
+\end_layout
+
+\end_inset
+
+), the action will launch a web browser with the appropriate link.
+\end_layout
+
+\begin_layout Itemize
+
+\change_inserted -712698321 1598509157
+If citation entries include any of the fields 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1598508820
+file
+\end_layout
+
+\end_inset
+
+ (filled by JabRef) or 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1598508820
+localfile
+\end_layout
+
+\end_inset
+
+ (filled by KBibTeX) containing an URL that points to a file on your local
+ drive, the action will launch an appropriate file viewer.
+ At the moment only absolute paths are accepted.
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1598509196
+Note that \SpecialChar LyX
+ does not check if the URLs are valid.
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1598509866
+In addition to that, \SpecialChar LyX
+ also searches your disk for matching files if you
+ enable 
+\family sans
+Search drive for cited files
+\family default
+ in 
+\family sans
+Tools\SpecialChar menuseparator
+Preferences\SpecialChar ldots
+\SpecialChar menuseparator
+Edit\SpecialChar menuseparator
+Control
+\family default
+.
+ It uses the tokens supplied at 
+\family sans
+Pattern
+\family default
+ in the same preferences section (by default: year and authors).
+ Any of the tokens in the pattern must occur in the title (at arbitrary
+ position).
+ The pattern syntax uses specific keywords.
+ These are basically Bib\SpecialChar TeX
+ keys embraced in 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1598509565
+%
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+, but there are also special keys, which are documented in the Customization
+ manual, sec.
+\emph on
+Cite format description
+\emph default
+.
+\change_unchanged
+
+\end_layout
+
 \begin_layout Section
 Index
 \begin_inset Index idx
@@ -49818,6 +49830,59 @@ Math Macros
 Math
 \emph default
  manual.
+\change_inserted -712698321 1598509726
+
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1598509987
+The option 
+\family sans
+Search drive for cited files
+\family default
+ allows \SpecialChar LyX
+ to query your disk for cited documents when using the 
+\family sans
+Try
+\begin_inset space ~
+\end_inset
+
+to
+\begin_inset space ~
+\end_inset
+
+Open
+\begin_inset space ~
+\end_inset
+
+Citation
+\begin_inset space ~
+\end_inset
+
+Content\SpecialChar ldots
+
+\family default
+ context menu on a citation.
+ The 
+\family sans
+Patterns
+\family default
+ field determines the search pattern.
+ See sec.
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "subsec:Opening-cited-documents"
+
+\end_inset
+
+ for details.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Subsubsection
diff --git a/lib/scripts/lyxpaperview b/lib/scripts/lyxpaperview
deleted file mode 100755 (executable)
index 5d7ea3c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-#This is just an example of an external script for finding corresponding file to the citation of the form Author + Year.
-#You will need to accomodate it to your particular situation.
-#
-#Syntax: paperview Year Author
-#Output: absolute path to the file(s)
-#
-#Dependencies:
-#1) mlocate/updatedb or similar package installed and running.
-#2) stored papers must contain first author name and year of publication in filename.
-
-VIEWER=qpdfview
-MAX_RESULTS=2
-
-name="$2"
-year="$1"
-
-if [ -z "$name" ]; then exit; fi
-
-FILE=`locate -i "$name" | grep -Ei '\.pdf$|\.ps$' | grep "$year" | head -n $MAX_RESULTS`
-
-
-#Putting in background necessary so that LyX does not wait for viewer to end
-$VIEWER ${FILE} &
-
index d22d758a116121c012feedfd64f12c2f61393903..322990add59af83731de76681b699f83c5b23bfd 100644 (file)
 #   No convergence necessary.
 
 # Incremented to format 33, by sanda
-#   Add \citation_search_view.
+#   Add \citation_search, \citation_search_pattern
+#   and \citation_search_view.
 #   No conversion necessary.
 
 
index ec2f563f8bc9afaa0f16b8b61c2accb2f54cede5..c3156e41ef465c29316c74a520c2cfdb5598cd33 100644 (file)
@@ -128,7 +128,7 @@ Menuset
                CiteStyles
                Separator
                Item "Settings...|S" "inset-settings"
-               Item "Open Citation Content...|O" "inset-edit"
+               Item "Try to Open Citation Content...|O" "inset-edit"
        End
 
 
index a517768b223dc88cacbfcaaae2c45f9b0e80ef5d..5ec3986af6b51731d5bbaeb6ebc9fcaaaebb0ef8 100644 (file)
@@ -996,7 +996,7 @@ docstring BibTeXInfo::expandFormat(docstring const & format,
 
 
 docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs,
-       Buffer const & buf, CiteItem const & ci) const
+       Buffer const & buf, CiteItem const & ci, docstring const & format_in) const
 {
        bool const richtext = ci.richtext;
 
@@ -1013,8 +1013,9 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs,
 
        CiteEngineType const engine_type = buf.params().citeEngineType();
        DocumentClass const & dc = buf.params().documentClass();
-       docstring const & format =
-               from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_)));
+       docstring const & format = format_in.empty()? 
+                               from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_)))
+                             : format_in;
        int counter = 0;
        info_ = expandFormat(format, xrefs, counter, buf,
                ci, false, false);
@@ -1388,7 +1389,7 @@ docstring const BiblioInfo::getYear(docstring const & key, Buffer const & buf, b
 
 
 docstring const BiblioInfo::getInfo(docstring const & key,
-       Buffer const & buf, CiteItem const & ci) const
+       Buffer const & buf, CiteItem const & ci, docstring const & format) const
 {
        BiblioInfo::const_iterator it = find(key);
        if (it == end())
@@ -1400,7 +1401,7 @@ docstring const BiblioInfo::getInfo(docstring const & key,
                if (xrefit != end())
                        xrefptrs.push_back(&(xrefit->second));
        }
-       return data.getInfo(xrefptrs, buf, ci);
+       return data.getInfo(xrefptrs, buf, ci, format);
 }
 
 
index ddf1daa5e926bcb29be5bc033b0d5816da689244..bc385f292af266ebdb5b42efce060259efd0a410 100644 (file)
@@ -75,7 +75,8 @@ public:
        /// \return formatted BibTeX data suitable for framing.
        /// \param vector of pointers to crossref/xdata information
        docstring const & getInfo(BibTeXInfoList const & xrefs,
-                       Buffer const & buf, CiteItem const & ci) const;
+                                 Buffer const & buf, CiteItem const & ci,
+                                 docstring const & format = docstring()) const;
        /// \return formatted BibTeX data for a citation label
        docstring const getLabel(BibTeXInfoList const xrefs,
                Buffer const & buf, docstring const & format,
@@ -227,7 +228,7 @@ public:
        /// output any richtext tags marked in the citation format and escape < and >
        /// elsewhere, and the general output context.
        docstring const getInfo(docstring const & key, Buffer const & buf,
-                       CiteItem const & ci) const;
+                       CiteItem const & ci, docstring const & format = docstring()) const;
        /// \return formatted BibTeX data for citation labels.
        /// Citation labels can have more than one key.
        docstring const getLabel(std::vector<docstring> keys, Buffer const & buf,
index e3bb0de803c6b3bccd3accb852bcf625534fcb8e..eb5d0dcf835eedf5fb0f11ce757a38eaa9118636 100644 (file)
@@ -78,6 +78,8 @@ LexerKeyword lyxrcTags[] = {
        { "\\bind_file", LyXRC::RC_BINDFILE },
        { "\\check_lastfiles", LyXRC::RC_CHECKLASTFILES },
        { "\\chktex_command", LyXRC::RC_CHKTEX_COMMAND },
+       { "\\citation_search", LyXRC::RC_CITATION_SEARCH },
+       { "\\citation_search_pattern", LyXRC::RC_CITATION_SEARCH_PATTERN },
        { "\\citation_search_view", LyXRC::RC_CITATION_SEARCH_VIEW },
        { "\\close_buffer_with_last_view", LyXRC::RC_CLOSE_BUFFER_WITH_LAST_VIEW },
        { "\\completion_cursor_text", LyXRC::RC_COMPLETION_CURSOR_TEXT },
@@ -680,8 +682,18 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        }
                        break;
 
+               case RC_CITATION_SEARCH:
+                       lexrc >> citation_search;
+                       break;
+
+               case RC_CITATION_SEARCH_PATTERN:
+                       if (lexrc.next())
+                               citation_search_pattern = lexrc.getString();
+                       break;
+
                case RC_CITATION_SEARCH_VIEW:
-                       lexrc >> citation_search_view;
+                       if (lexrc.next())
+                               citation_search_view = lexrc.getString();
                        break;
 
                case RC_CT_ADDITIONS_UNDERLINED:
@@ -1607,11 +1619,32 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
                // fall through
+       case RC_CITATION_SEARCH:
+               if (ignore_system_lyxrc ||
+                   citation_search != system_lyxrc.citation_search) {
+                       os << "# Set to true to use script to search\n"
+                          << "# locl disk for citation targets.\n"
+                          << "\\citation_search "
+                          << convert<string>(citation_search)
+                          << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
        case RC_CITATION_SEARCH_VIEW:
                if (ignore_system_lyxrc ||
                    citation_search_view != system_lyxrc.citation_search_view) {
-                       os << "\\citaton_search_view "
-                          << citation_search_view << '\n';
+                       os << "\\citation_search_view \""
+                          << citation_search_view << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+               // fall through
+       case RC_CITATION_SEARCH_PATTERN:
+               if (ignore_system_lyxrc ||
+                   citation_search_pattern != system_lyxrc.citation_search_pattern) {
+                       os << "\\citation_search_pattern \""
+                          << citation_search_pattern << "\"\n";
                }
                if (tag != RC_LAST)
                        break;
@@ -2788,6 +2821,8 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_BIBTEX_ALTERNATIVES:
        case LyXRC::RC_BIBTEX_COMMAND:
        case LyXRC::RC_BINDFILE:
+       case LyXRC::RC_CITATION_SEARCH:
+       case LyXRC::RC_CITATION_SEARCH_PATTERN:
        case LyXRC::RC_CITATION_SEARCH_VIEW:
        case LyXRC::RC_CHECKLASTFILES:
        case LyXRC::RC_COMPLETION_CURSOR_TEXT:
index d795d345ec57044c1c1639519fbdc68dbcc1893d..09179528f194d591c77e0f1949480426b8e4a06b 100644 (file)
@@ -53,6 +53,8 @@ public:
                RC_BINDFILE,
                RC_CHECKLASTFILES,
                RC_CHKTEX_COMMAND,
+               RC_CITATION_SEARCH,
+               RC_CITATION_SEARCH_PATTERN,
                RC_CITATION_SEARCH_VIEW,
                RC_COMPLETION_CURSOR_TEXT,
                RC_COMPLETION_INLINE_DELAY,
@@ -244,13 +246,15 @@ public:
        /// default paper size for local xdvi/dvips/ghostview/whatever
        /// command to run chktex incl. options
        std::string chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
-       // Name of external script, which searches for file corresponding to a 
-       // given citation. At this moment only script lyxpaperview[.py] is supported
-       // (search for pdf based on author+year), but we can generalize if requested.
-       // Citation context menu item "Open Citation Content" will be always enabled
-       // if the name of this script in nonempty (last resort when citation entry
-       // does not contain neccessary info.
+       /// Use external script to search for file corresponding to a 
+       /// given citation.
+       bool citation_search = false;
+       /// Name of external script which searches for file corresponding to a 
+       /// given citation. At this moment only script lyxpaperview.p is supported
+       /// (search for pdf or ps based on specific items)
        std::string citation_search_view;
+       /// Items to search for in citation_search_view
+       std::string citation_search_pattern = "%year% %abbrvciteauthor%";
        /// all available commands to run bibtex incl. options
        CommandSet bibtex_alternatives;
        /// command to run bibtex incl. options
index 1fe444788fc753ae62d8d264f4ff58b24d9a54fc..ad1ee8e45713f8fbca36ef59f96ccb4fea4a9b99 100644 (file)
@@ -2756,7 +2756,9 @@ PrefEdit::PrefEdit(GuiPreferences * form)
                this, SIGNAL(changed()));
        connect(cursorWidthSB, SIGNAL(valueChanged(int)),
                this, SIGNAL(changed()));
-       connect(fullscreenLimitGB, SIGNAL(clicked()),
+       connect(citationSearchCB, SIGNAL(toggled(bool)),
+               this, SIGNAL(changed()));
+       connect(citationSearchLE, SIGNAL(textChanged(QString)),
                this, SIGNAL(changed()));
        connect(fullscreenWidthSB, SIGNAL(valueChanged(int)),
                this, SIGNAL(changed()));
@@ -2773,6 +2775,14 @@ PrefEdit::PrefEdit(GuiPreferences * form)
 }
 
 
+void PrefEdit::on_fullscreenLimitCB_toggled(bool const state)
+{
+       fullscreenWidthSB->setEnabled(state);
+       fullscreenWidthLA->setEnabled(state);
+       changed();
+}
+
+
 void PrefEdit::applyRC(LyXRC & rc) const
 {
        rc.cursor_follows_scrollbar = cursorFollowsCB->isChecked();
@@ -2787,13 +2797,15 @@ void PrefEdit::applyRC(LyXRC & rc) const
                case 2: rc.macro_edit_style = LyXRC::MACRO_EDIT_LIST;   break;
        }
        rc.cursor_width = cursorWidthSB->value();
+       rc.citation_search = citationSearchCB->isChecked();
+       rc.citation_search_pattern = fromqstr(citationSearchLE->text());
        rc.full_screen_toolbars = toggleToolbarsCB->isChecked();
        rc.full_screen_scrollbar = toggleScrollbarCB->isChecked();
        rc.full_screen_statusbar = toggleStatusbarCB->isChecked();
        rc.full_screen_tabbar = toggleTabbarCB->isChecked();
        rc.full_screen_menubar = toggleMenubarCB->isChecked();
        rc.full_screen_width = fullscreenWidthSB->value();
-       rc.full_screen_limit = fullscreenLimitGB->isChecked();
+       rc.full_screen_limit = fullscreenLimitCB->isChecked();
 }
 
 
@@ -2807,13 +2819,17 @@ void PrefEdit::updateRC(LyXRC const & rc)
        groupEnvironmentsCB->setChecked(rc.group_layouts);
        macroEditStyleCO->setCurrentIndex(rc.macro_edit_style);
        cursorWidthSB->setValue(rc.cursor_width);
+       citationSearchCB->setChecked(rc.citation_search);
+       citationSearchLE->setText(toqstr(rc.citation_search_pattern));
        toggleScrollbarCB->setChecked(rc.full_screen_scrollbar);
        toggleStatusbarCB->setChecked(rc.full_screen_statusbar);
        toggleToolbarsCB->setChecked(rc.full_screen_toolbars);
        toggleTabbarCB->setChecked(rc.full_screen_tabbar);
        toggleMenubarCB->setChecked(rc.full_screen_menubar);
        fullscreenWidthSB->setValue(rc.full_screen_width);
-       fullscreenLimitGB->setChecked(rc.full_screen_limit);
+       fullscreenLimitCB->setChecked(rc.full_screen_limit);
+       fullscreenWidthSB->setEnabled(rc.full_screen_limit);
+       fullscreenWidthLA->setEnabled(rc.full_screen_limit);
 }
 
 
index 8bd264eaff64cf6690a7888216ca14d44423d058..433439d2eda74f4cb1360a8c0a893ca4c276c46d 100644 (file)
@@ -452,6 +452,9 @@ public:
 
        void applyRC(LyXRC & rc) const;
        void updateRC(LyXRC const & rc);
+
+public Q_SLOTS:
+       void on_fullscreenLimitCB_toggled(bool);
 };
 
 
index 5c1c3577a6c65122a7317024e88b84b24c4ec190..b5bfe504fc10a624a9153ad05d423316b544819e 100644 (file)
@@ -4624,9 +4624,15 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        dr.screenUpdate(Update::Force);
                        break;
 
-               case LFUN_CITATION_OPEN:
-                       frontend::showTarget(argument);
+               case LFUN_CITATION_OPEN: {
+                       string pdfv, psv;
+                       if (theFormats().getFormat("pdf"))
+                               pdfv = theFormats().getFormat("pdf")->viewer();
+                       if (theFormats().getFormat("ps"))
+                               psv = theFormats().getFormat("ps")->viewer();
+                       frontend::showTarget(argument, pdfv, psv);
                        break;
+               }
 
                default:
                        // The LFUN must be for one of BufferView, Buffer or Cursor;
index 92ee029372b63699fa843236ecf796d049c1d772..f064d50d14f32e3bf6683740b1f8a0b63b1d5243 100644 (file)
@@ -298,15 +298,21 @@ void showDirectory(FileName const & directory)
                LYXERR0("Unable to open QUrl even though dir exists!");
 }
 
-void showTarget(string const & target){
+void showTarget(string const & target, string const & pdfv, string const & psv){
        LYXERR(Debug::INSETS, "Showtarget:" << target << "\n");
-       if (prefixIs(target,"EXTERNAL ")) {
-               if (lyxrc.citation_search_view.empty())
+       if (prefixIs(target, "EXTERNAL ")) {
+               if (!lyxrc.citation_search)
                        return;
-               string tmp,tar;
+               string tmp, tar, opts;
                tar = split(target, tmp, ' ');
+               if (!pdfv.empty())
+                       opts = " -v " + pdfv;
+               if (!psv.empty())
+                       opts += " -w " + psv;
+               if (!opts.empty())
+                       opts += " ";
                FuncRequest cmd = FuncRequest(LFUN_VC_COMMAND,"U . \"" +
-                                 lyxrc.citation_search_view + " " + tar + "\"");
+                                 lyxrc.citation_search_view + " " + opts + tar + "\"");
                lyx::dispatch(cmd);
                return;
        }
index 967ee5f37d045a70744fd9a51a04260fe6f458b8..f0e535fe815f699e3630d9a5949280d945aad7de 100644 (file)
@@ -101,9 +101,12 @@ void setSectionResizeMode(QHeaderView * view,
        QHeaderView::ResizeMode mode);
 /// Shows a directory in OSs file browser
 void showDirectory(support::FileName const & directory);
-/// handle request for showing citation content - shows pdf or
-/// web page in target; external script can be used for pdf view
-void showTarget(std::string const & target);
+/// handle request for showing citation content - shows pdf/ps or
+/// web page in target; external script can be used for pdf/ps view
+/// \p pdfv takes a pad viewer, \p psv a ps viewer
+void showTarget(std::string const & target,
+               std::string const & pdfv,
+               std::string const & psv);
 
 } // namespace frontend
 
index 987dc92d9087f06483ada9a05c264e8c76d584c2..fe36a5b5b31f34f167388dfeccae106da29561a4 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>494</width>
-    <height>614</height>
+    <width>610</width>
+    <height>552</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -19,8 +19,8 @@
   <property name="windowTitle">
    <string/>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
+  <layout class="QGridLayout" name="gridLayout_3">
+   <item row="0" column="0">
     <widget class="QGroupBox" name="scrollGB">
      <property name="title">
       <string>Editing</string>
       <bool>true</bool>
      </property>
      <layout class="QGridLayout" name="gridLayout">
+      <item row="8" column="3">
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
       <item row="2" column="0" colspan="2">
        <widget class="QCheckBox" name="scrollBelowCB">
         <property name="text">
         </property>
        </widget>
       </item>
-      <item row="5" column="0" colspan="2">
-       <widget class="QCheckBox" name="sortEnvironmentsCB">
-        <property name="text">
-         <string>Sort &amp;environments alphabetically</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1" colspan="2">
+      <item row="1" column="2">
        <spacer name="horizontalSpacer_3">
         <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
        </spacer>
       </item>
-      <item row="0" column="0">
+      <item row="8" column="0" colspan="3">
+       <widget class="QComboBox" name="macroEditStyleCO">
+        <item>
+         <property name="text">
+          <string>Edit Math Macros inline with a box around</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Edit Math Macros inline with the name in the status bar</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Edit Math Macros with a parameter list (like in LyX &lt; 1.6)</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="4" column="0" colspan="2">
+       <widget class="QCheckBox" name="copyCTMarkupCB">
+        <property name="toolTip">
+         <string>If this is checked, deleted and added text in change tracking mode will not be resolved on copy/paste operations and when moving content from/to insets</string>
+        </property>
+        <property name="text">
+         <string>&amp;Keep change tracking markup on copy and paste</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="0" rowspan="2" colspan="2">
+       <widget class="QCheckBox" name="sortEnvironmentsCB">
+        <property name="text">
+         <string>Sort &amp;environments alphabetically</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0" colspan="2">
        <widget class="QCheckBox" name="cursorFollowsCB">
         <property name="text">
          <string>Cursor &amp;follows scrollbar</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="0">
+      <item row="9" column="0" colspan="3">
+       <layout class="QHBoxLayout" name="horizontalLayout_5">
+        <item>
+         <widget class="QCheckBox" name="citationSearchCB">
+          <property name="statusTip">
+           <string>If this is activated, LyX will search your disk for matching files when clicking on &quot;Try to Open Citation Content...&quot; in the citation context menu</string>
+          </property>
+          <property name="text">
+           <string>Search &amp;drive for cited files</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_3">
+          <item>
+           <widget class="QLabel" name="citationSearchLA">
+            <property name="text">
+             <string>Patte&amp;rn:</string>
+            </property>
+            <property name="buddy">
+             <cstring>citationSearchLE</cstring>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLineEdit" name="citationSearchLE">
+            <property name="toolTip">
+             <string>Define search pattern (see UserGuide for syntax)</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </item>
+      <item row="1" column="0" colspan="2">
        <layout class="QHBoxLayout" name="horizontalLayout">
         <item>
          <widget class="QLabel" name="label_3">
         </item>
        </layout>
       </item>
-      <item row="7" column="2">
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>40</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="6" column="0" colspan="2">
-       <widget class="QCheckBox" name="groupEnvironmentsCB">
-        <property name="text">
-         <string>&amp;Group environments by their category</string>
-        </property>
-       </widget>
-      </item>
       <item row="3" column="0" colspan="2">
        <widget class="QCheckBox" name="macLikeCursorMovementCB">
         <property name="toolTip">
         </property>
        </widget>
       </item>
-      <item row="7" column="0" colspan="2">
-       <widget class="QComboBox" name="macroEditStyleCO">
-        <item>
-         <property name="text">
-          <string>Edit Math Macros inline with a box around</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>Edit Math Macros inline with the name in the status bar</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>Edit Math Macros with a parameter list (like in LyX &lt; 1.6)</string>
-         </property>
-        </item>
-       </widget>
-      </item>
-      <item row="4" column="0">
-       <widget class="QCheckBox" name="copyCTMarkupCB">
-        <property name="toolTip">
-         <string>If this is checked, deleted and added text in change tracking mode will not be resolved on copy/paste operations and when moving content from/to insets</string>
-        </property>
+      <item row="7" column="0">
+       <widget class="QCheckBox" name="groupEnvironmentsCB">
         <property name="text">
-         <string>&amp;Keep change tracking markup on copy and paste</string>
+         <string>&amp;Group environments by their category</string>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </item>
-   <item>
+   <item row="1" column="0">
     <widget class="QGroupBox" name="fullscreenGB">
      <property name="title">
       <string>Fullscreen</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="toggleScrollbarCB">
+      <item row="0" column="1">
+       <widget class="QCheckBox" name="toggleMenubarCB">
         <property name="text">
-         <string>Hide scr&amp;ollbar</string>
+         <string>Hide &amp;menubar</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0">
-       <widget class="QCheckBox" name="toggleTabbarCB">
+      <item row="0" column="2">
+       <widget class="QCheckBox" name="toggleScrollbarCB">
         <property name="text">
-         <string>Hide &amp;tabbar</string>
+         <string>Hide scr&amp;ollbar</string>
         </property>
        </widget>
       </item>
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="toggleMenubarCB">
-        <property name="text">
-         <string>Hide &amp;menubar</string>
+      <item row="0" column="3" rowspan="2">
+       <spacer name="horizontalSpacer_4">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
         </property>
-       </widget>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>146</width>
+          <height>38</height>
+         </size>
+        </property>
+       </spacer>
       </item>
-      <item row="4" column="0">
+      <item row="1" column="0">
        <widget class="QCheckBox" name="toggleStatusbarCB">
         <property name="text">
          <string>Hide sta&amp;tusbar</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="0">
-       <widget class="QGroupBox" name="fullscreenLimitGB">
-        <property name="title">
-         <string>&amp;Limit text width</string>
-        </property>
-        <property name="flat">
-         <bool>true</bool>
-        </property>
-        <property name="checkable">
-         <bool>true</bool>
+      <item row="1" column="1">
+       <widget class="QCheckBox" name="toggleTabbarCB">
+        <property name="text">
+         <string>H&amp;ide tabbar</string>
         </property>
-        <layout class="QGridLayout" name="gridLayout_3">
-         <item row="0" column="0">
-          <widget class="QLabel" name="label_2">
-           <property name="text">
-            <string>Screen used (&amp;pixels):</string>
-           </property>
-           <property name="buddy">
-            <cstring>fullscreenWidthSB</cstring>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <widget class="QSpinBox" name="fullscreenWidthSB">
-           <property name="minimum">
-            <number>0</number>
-           </property>
-           <property name="maximum">
-            <number>10000</number>
-           </property>
-           <property name="singleStep">
-            <number>10</number>
-           </property>
-           <property name="value">
-            <number>700</number>
-           </property>
-          </widget>
-         </item>
-        </layout>
        </widget>
       </item>
-      <item row="4" column="1">
-       <spacer name="horizontalSpacer_2">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>157</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
+      <item row="2" column="0" colspan="4">
+       <layout class="QHBoxLayout" name="horizontalLayout_4">
+        <item>
+         <widget class="QCheckBox" name="fullscreenLimitCB">
+          <property name="text">
+           <string>&amp;Limit text width</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="fullscreenWidthLA">
+          <property name="text">
+           <string>Screen used (pi&amp;xels):</string>
+          </property>
+          <property name="buddy">
+           <cstring>fullscreenWidthSB</cstring>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="fullscreenWidthSB">
+          <property name="minimum">
+           <number>0</number>
+          </property>
+          <property name="maximum">
+           <number>10000</number>
+          </property>
+          <property name="singleStep">
+           <number>10</number>
+          </property>
+          <property name="value">
+           <number>700</number>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_2">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>157</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
       </item>
      </layout>
     </widget>
    </item>
-   <item>
+   <item row="2" column="0">
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
   <tabstop>scrollBelowCB</tabstop>
   <tabstop>macLikeCursorMovementCB</tabstop>
   <tabstop>sortEnvironmentsCB</tabstop>
-  <tabstop>groupEnvironmentsCB</tabstop>
   <tabstop>macroEditStyleCO</tabstop>
  </tabstops>
  <includes>
index 7ae75b810fa2197b2c9e25db3e6f1d1c0edf2874..df722aaf7f9566f8ff6fbb8b74266f86491dfba4 100644 (file)
@@ -206,13 +206,18 @@ void InsetCitation::openCitation()
        docstring const & key = getParam("key");
 
        vector<docstring> keys = getVectorFromString(key);
-       docstring year, author, doi, url, file;
+       docstring titledata, doi, url, file;
        for (docstring const & kvar : keys) {
-               year = bi.getYear(kvar, buffer(), false);
-               author = bi.getAuthorOrEditorList(kvar, buffer());
+               CiteItem ci;
+               titledata = bi.getInfo(kvar, buffer(), ci,
+                                      from_ascii(lyxrc.citation_search_pattern));
+               // some cleanup: commas and " and ", as used in name lists,
+               // are not expected in file names
+               titledata = subst(titledata, ',', char());
+               titledata = subst(titledata, from_ascii(" and "), from_ascii(" "));
                bi.getLocators(kvar, doi, url, file);
                LYXERR(Debug::INSETS, "Locators: doi:" << doi << " url:"
-                       << url << " file:" << file << " author:" << author << " year:" << year);
+                       << url << " file:" << file << " title data:" << titledata);
                docstring locator;
                if (!file.empty()) {
                        locator = file;
@@ -221,7 +226,7 @@ void InsetCitation::openCitation()
                } else if (!url.empty()) {
                        locator = url;
                } else {
-                       locator = "EXTERNAL " +  year + " " + author;
+                       locator = "EXTERNAL " + titledata;
                }
                FuncRequest cmd = FuncRequest(LFUN_CITATION_OPEN, locator);
                lyx::dispatch(cmd);