Re: Gedit/LaTeXPlugin/XDvi & Reverse Search
Hi, here are two patches fixing the problem for me (with
LaTeXPlugin-0.1.3.1 and gedit-2.20.3) with (at least I suppose from the
initial code) two features more:
1) the line corresponding to the point clicked on in the dvi is
highlighted in the source, instead of just having the cursor on it;
2) the gedit window is pulled to the front.
I don't know if I achieved this the "correct" way, as I'm really new to
PyGTK and to LaTeXPlugin, which is definitely not a ten-lines plugin, but
at least it works!
Many thanks to Michael for this really great plugin! It is really useful.
Best regards,
Yannick Voglaire
PS: I dont know how to attach files so here are the patches:
---------------- DBusController.patch ----------------
--- DBusController.py
+++ DBusController.py.modif
@@ -23,6 +23,8 @@
BUS_NAME = 'org.gedit.LaTeXPlugin'
OBJECT_PATH = '/org/gedit/DBusInterface'
+DVI_INVERSE_SEARCH = 2 # 0, 1 are ERROR, WARNING in
builder/Messages.py
+
try:
from dbus import SessionBus
from dbus.service import Object, method, BusName
@@ -42,9 +44,16 @@
def inverse(self, filename, line):
debug(self, "Got inverse DVI search: %s %s" % (filename, line))
- self.__instance.set_active_tab_by_filename(filename)
- wrapper = self.__instance.get_active_wrapper()
- wrapper.select_line(line - 1)
+ tab = self.__instance.window.get_tab_from_uri(filename)
+ self.__instance.window.set_active_tab(tab)
+
+ helper =
self.__instance.document_helper_manager.find_helper(filename)
+ helper.jump_to_line(line - 1)
+
+ helper.language_helper.reset_dvi_highlight()
+ helper.language_helper.highlight_line(line-1, DVI_INVERSE_SEARCH)
+
+ self.__instance.window.present()
except ImportError:
error(self, None, "Failed to import D-Bus bindings")
---------------- LatexLanguageHelper.patch ----------------
--- LatexLanguageHelper.py
+++ LatexLanguageHelper.py.modif
@@ -28,10 +28,12 @@
from LaTeXPlugin.autocomplete.Controller import Controller
from LaTeXPlugin.common import TEXT, MATH, ConditionalSource,
PrefaceSource
from LaTeXPlugin.builder.Message import ERROR, WARNING
+from LaTeXPlugin.ipc.DBusController import DVI_INVERSE_SEARCH
from LaTeXPlugin.bibtex.BibTeXFile import BibTeXFile
ERROR_COLOR = "#ffe6e6"
WARNING_COLOR = "#fff2cc"
+DVI_INVERSE_SEARCH_COLOR = "#edf2ff"
_pattern_indent = compile("[ \t]+")
@@ -51,6 +53,7 @@
try:
self.__buffer.create_tag("error", background=ERROR_COLOR)
self.__buffer.create_tag("warning", background=WARNING_COLOR)
+ self.__buffer.create_tag("dvi_inverse_search",
background=DVI_INVERSE_SEARCH_COLOR)
except TypeError, s:
# FIXME: this happens when deactivating and reactivating the plugin
error(self, "__init__", s)
@@ -337,6 +340,8 @@
if severity == WARNING:
self.__buffer.apply_tag_by_name("warning", iter_l, iter_r)
+ elif severity == DVI_INVERSE_SEARCH:
+ self.__buffer.apply_tag_by_name("dvi_inverse_search", iter_l, iter_r)
else:
self.__buffer.apply_tag_by_name("error", iter_l, iter_r)
@@ -349,6 +354,17 @@
self.__buffer.remove_tag_by_name("error",
self.__buffer.get_start_iter(),
self.__buffer.get_end_iter())
self.__buffer.remove_tag_by_name("warning",
self.__buffer.get_start_iter(),
+ self.__buffer.get_end_iter())
+ self.__buffer.remove_tag_by_name("dvi_inverse_search",
self.__buffer.get_start_iter(),
+ self.__buffer.get_end_iter())
+
+ def reset_dvi_highlight(self):
+ """
+ Undo dvi inverse search highlighting
+
+ Called at inverse from DBusInterface
+ """
+ self.__buffer.remove_tag_by_name("dvi_inverse_search",
self.__buffer.get_start_iter(),
self.__buffer.get_end_iter())
@property
Reply to: