auctex-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[AUCTeX-diffs] Changes to auctex/tex.el,v


From: Tassilo Horn
Subject: [AUCTeX-diffs] Changes to auctex/tex.el,v
Date: Sun, 08 Apr 2012 09:35:12 +0000

CVSROOT:        /sources/auctex
Module name:    auctex
Changes by:     Tassilo Horn <tsdh>     12/04/08 09:35:12

Index: tex.el
===================================================================
RCS file: /sources/auctex/auctex/tex.el,v
retrieving revision 5.688
retrieving revision 5.689
diff -u -b -r5.688 -r5.689
--- tex.el      24 Aug 2011 16:24:17 -0000      5.688
+++ tex.el      8 Apr 2012 09:35:11 -0000       5.689
@@ -1003,6 +1003,40 @@
   :group 'TeX-view
   :type '(alist :key-type symbol :value-type (group sexp)))
 
+(defun TeX-evince-dbus-p ()
+  "Return non-nil, if evince is installed and accessible via its
+DBUS interface."
+  (and (fboundp 'dbus-register-signal)
+       (fboundp 'dbus-call-method)
+       (getenv "DBUS_SESSION_BUS_ADDRESS")
+       (executable-find "evince")
+       (member
+       "org.gnome.evince.Daemon"
+       (dbus-introspect-get-interface-names
+        :session "org.gnome.evince.Daemon"
+        "/org/gnome/evince/Daemon"))))
+
+(defun TeX-evince-sync-view ()
+  (let* ((uri (concat "file://" (expand-file-name
+                                (concat file "." (TeX-output-extension)))))
+        (owner (dbus-call-method
+                :session "org.gnome.evince.Daemon"
+                "/org/gnome/evince/Daemon"
+                "org.gnome.evince.Daemon"
+                "FindDocument"
+                uri
+                t)))
+    (if owner
+       (dbus-call-method
+        :session owner
+        "/org/gnome/evince/Window/0"
+        "org.gnome.evince.Window"
+        "SyncView"
+        (buffer-file-name)
+        (list :struct :int32 (line-number-at-pos) :int32 1)
+        (round (float-time)))
+      (error "Couldn't find the Evince instance for %s" uri))))
+
 (defvar TeX-view-program-list-builtin
   (cond
    ((eq system-type 'windows-nt)
@@ -1031,13 +1065,15 @@
       ("dvips and gv" "%(o?)dvips %d -o && gv %f")
       ("gv" "gv %o")
       ("xpdf" ("xpdf -remote %s -raise %o" (mode-io-correlate " %(outpage)")))
-      ("Evince" ("evince" (mode-io-correlate
+      ("Evince" ,(if (TeX-evince-dbus-p)
+                    'TeX-evince-sync-view
+                  `("evince" (mode-io-correlate
                           ;; With evince 3, -p N opens the page *labeled* N,
                           ;; and -i,--page-index the physical page N.
                           ,(if (string-match "--page-index"
                                              (shell-command-to-string "evince 
--help"))
                                " -i %(outpage)"
-                             " -p %(outpage)")) " %o"))
+                                 " -p %(outpage)")) " %o")))
       ("Okular" ("okular --unique %o" (mode-io-correlate "#src:%n%b")))
       ("xdg-open" "xdg-open %o"))))
   "Alist of built-in viewer specifications.
@@ -1473,10 +1509,7 @@
   (TeX-set-mode-name 'TeX-source-correlate-mode t t)
   (setq TeX-source-correlate-start-server-flag TeX-source-correlate-mode)
   ;; Register Emacs for the SyncSource DBUS signal emitted by Evince.
-  (when (and (fboundp 'dbus-register-signal)
-            (fboundp 'dbus-call-method)
-            (getenv "DBUS_SESSION_BUS_ADDRESS")
-            (executable-find "evince"))
+  (when (TeX-evince-dbus-p)
     (require 'dbus)
     (dbus-register-signal
      :session nil "/org/gnome/evince/Window/0"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]