+ case LFUN_FORWARD_SEARCH: {
+ FileName const path(doc_buffer->temppath());
+ string const texname = doc_buffer->latexName();
+ FileName const dviname(addName(path.absFileName(),
+ support::changeExtension(texname, "dvi")));
+ FileName const pdfname(addName(path.absFileName(),
+ support::changeExtension(texname, "pdf")));
+ if (!dviname.exists() && !pdfname.exists()) {
+ dr.setMessage(_("Please, preview the document first."));
+ break;
+ }
+ string outname = dviname.onlyFileName();
+ string command = lyxrc.forward_search_dvi;
+ if (!dviname.exists() ||
+ pdfname.lastModified() > dviname.lastModified()) {
+ outname = pdfname.onlyFileName();
+ command = lyxrc.forward_search_pdf;
+ }
+
+ int row = doc_buffer->texrow().getRowFromIdPos(bv->cursor().paragraph().id(), bv->cursor().pos());
+ LYXERR(Debug::ACTION, "Forward search: row:" << row
+ << " id:" << bv->cursor().paragraph().id());
+ if (!row || command.empty()) {
+ dr.setMessage(_("Couldn't proceed."));
+ break;
+ }
+ string texrow = convert<string>(row);
+
+ command = subst(command, "$$n", texrow);
+ command = subst(command, "$$t", texname);
+ command = subst(command, "$$o", outname);
+
+ PathChanger p(path);
+ Systemcall one;
+ one.startscript(Systemcall::DontWait, command);
+ break;
+ }