mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-30 05:12:40 +00:00
73 lines
2.4 KiB
Plaintext
73 lines
2.4 KiB
Plaintext
|
#!/usr/bin/python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
# Copyright (C) 2010 Jose Aliste <jose.aliste@gmail.com>
|
||
|
# 2011 Benjamin Kellermann <Benjamin.Kellermann@tu-dresden.de>
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or modify it under
|
||
|
# the terms of the GNU General Public Licence as published by the Free Software
|
||
|
# Foundation; either version 2 of the Licence, or (at your option) any later
|
||
|
# version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more
|
||
|
# details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public Licence along with
|
||
|
# this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
||
|
# Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||
|
|
||
|
# This file offers forward search for evince.
|
||
|
from __future__ import print_function
|
||
|
|
||
|
import dbus
|
||
|
import sys
|
||
|
import os
|
||
|
import traceback
|
||
|
|
||
|
if sys.version_info < (3,):
|
||
|
from urllib import quote
|
||
|
else:
|
||
|
from urllib.parse import quote
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
def print_usage():
|
||
|
print('Usage: evince_forward_search pdf_file line_number tex_file')
|
||
|
sys.exit(1)
|
||
|
|
||
|
if len(sys.argv) != 4:
|
||
|
print_usage()
|
||
|
try:
|
||
|
line_number = int(sys.argv[2])
|
||
|
except ValueError:
|
||
|
print_usage()
|
||
|
|
||
|
pdf_file = os.path.abspath(sys.argv[1])
|
||
|
line = int(sys.argv[2])
|
||
|
tex_file = os.path.abspath(sys.argv[3])
|
||
|
|
||
|
try:
|
||
|
bus = dbus.SessionBus()
|
||
|
daemon = bus.get_object(
|
||
|
'org.gnome.evince.Daemon', '/org/gnome/evince/Daemon'
|
||
|
)
|
||
|
dbus_name = daemon.FindDocument(
|
||
|
# The PDF file name MUST be URI-encoded
|
||
|
# RFC 1738: unreserved = alpha | digit | safe | extra
|
||
|
# safe = "$" | "-" | "_" | "." | "+"
|
||
|
# extra = "!" | "*" | "'" | "(" | ")" | ","
|
||
|
'file://' + quote(pdf_file, "/$+!*'(),@=~"),
|
||
|
True,
|
||
|
dbus_interface="org.gnome.evince.Daemon"
|
||
|
)
|
||
|
window = bus.get_object(dbus_name, '/org/gnome/evince/Window/0')
|
||
|
window.SyncView(
|
||
|
tex_file,
|
||
|
(line_number, 1),
|
||
|
0, # GDK_CURRENT_TIME constant
|
||
|
dbus_interface="org.gnome.evince.Window"
|
||
|
)
|
||
|
except dbus.DBusException:
|
||
|
traceback.print_exc()
|