From: Stephan Witt Date: Sat, 13 Aug 2022 12:20:03 +0000 (+0200) Subject: Improved synctex support X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=f426470a5403a956606a3f0f4df38e0c7407ab40;p=features.git Improved synctex support - Add check for converter with active synctex support to check for synchronized output for activate forward search. --- diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 96005b9215..da630da90a 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1110,6 +1110,22 @@ bool Buffer::readDocument(Lexer & lex) } +bool Buffer::isSyncTeXenabled() const +{ + bool enabled = params().output_sync; + + if (!enabled) + for (auto const & c : theConverters()) { + const string dest = c.to().substr(0,3); + if (dest == "dvi" || dest == "pdf") { + const string cmd = c.command(); + enabled |= cmd.find("--synctex=1") != string::npos; + if (enabled) break; + } + } + return enabled; +} + bool Buffer::importString(string const & format, docstring const & contents, ErrorList & errorList) { Format const * fmt = theFormats().getFormat(format); diff --git a/src/Buffer.h b/src/Buffer.h index 7f40351a90..ba066f724c 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -221,6 +221,11 @@ public: int readHeader(Lexer & lex); double fontScalingFactor() const; + /// check for active synctex support: + /// - either the document has synchronize output enabled or + /// - there is a converter to dvi or pdf defined with synctex command line argument + /// this is the "expert mode", false positives are possible + bool isSyncTeXenabled() const; private: /// diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp index 4492e75209..d03fe3bc2f 100644 --- a/src/frontends/qt/GuiView.cpp +++ b/src/frontends/qt/GuiView.cpp @@ -2681,7 +2681,7 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag) break; case LFUN_FORWARD_SEARCH: enable = !(lyxrc.forward_search_dvi.empty() && lyxrc.forward_search_pdf.empty()) && - doc_buffer && doc_buffer->params().output_sync; + doc_buffer && doc_buffer->isSyncTeXenabled(); break; case LFUN_FILE_INSERT_PLAINTEXT: