Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
zathura
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
110
Issues
110
List
Boards
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
pwmt
zathura
Commits
1b6a2b47
Commit
1b6a2b47
authored
Dec 24, 2013
by
Sebastian Ramacher
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial D-Bus client implementation
Signed-off-by:
Sebastian Ramacher
<
sebastian+dev@ramacher.at
>
parent
f7fddf75
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
125 additions
and
13 deletions
+125
-13
main.c
main.c
+28
-13
synctex-dbus.c
synctex-dbus.c
+89
-0
synctex-dbus.h
synctex-dbus.h
+8
-0
No files found.
main.c
View file @
1b6a2b47
...
...
@@ -10,6 +10,7 @@
#include "zathura.h"
#include "utils.h"
#include "synctex-dbus.h"
/* main function */
int
...
...
@@ -43,6 +44,7 @@ main(int argc, char* argv[])
gchar
*
loglevel
=
NULL
;
gchar
*
password
=
NULL
;
gchar
*
synctex_editor
=
NULL
;
gchar
*
synctex_fwd
=
NULL
;
bool
forkback
=
false
;
bool
print_version
=
false
;
bool
synctex
=
false
;
...
...
@@ -55,17 +57,18 @@ main(int argc, char* argv[])
#endif
GOptionEntry
entries
[]
=
{
{
"reparent"
,
'e'
,
0
,
G_OPTION_ARG_INT
,
&
embed
,
_
(
"Reparents to window specified by xid"
),
"xid"
},
{
"config-dir"
,
'c'
,
0
,
G_OPTION_ARG_FILENAME
,
&
config_dir
,
_
(
"Path to the config directory"
),
"path"
},
{
"data-dir"
,
'd'
,
0
,
G_OPTION_ARG_FILENAME
,
&
data_dir
,
_
(
"Path to the data directory"
),
"path"
},
{
"plugins-dir"
,
'p'
,
0
,
G_OPTION_ARG_STRING
,
&
plugin_path
,
_
(
"Path to the directories containing plugins"
),
"path"
},
{
"fork"
,
'\0'
,
0
,
G_OPTION_ARG_NONE
,
&
forkback
,
_
(
"Fork into the background"
),
NULL
},
{
"password"
,
'w'
,
0
,
G_OPTION_ARG_STRING
,
&
password
,
_
(
"Document password"
),
"password"
},
{
"page"
,
'P'
,
0
,
G_OPTION_ARG_INT
,
&
page_number
,
_
(
"Page number to go to"
),
"number"
},
{
"debug"
,
'l'
,
0
,
G_OPTION_ARG_STRING
,
&
loglevel
,
_
(
"Log level (debug, info, warning, error)"
),
"level"
},
{
"version"
,
'v'
,
0
,
G_OPTION_ARG_NONE
,
&
print_version
,
_
(
"Print version information"
),
NULL
},
{
"synctex"
,
's'
,
0
,
G_OPTION_ARG_NONE
,
&
synctex
,
_
(
"Enable synctex support"
),
NULL
},
{
"synctex-editor-command"
,
'x'
,
0
,
G_OPTION_ARG_STRING
,
&
synctex_editor
,
_
(
"Synctex editor (forwarded to the synctex command)"
),
"cmd"
},
{
"reparent"
,
'e'
,
0
,
G_OPTION_ARG_INT
,
&
embed
,
_
(
"Reparents to window specified by xid"
),
"xid"
},
{
"config-dir"
,
'c'
,
0
,
G_OPTION_ARG_FILENAME
,
&
config_dir
,
_
(
"Path to the config directory"
),
"path"
},
{
"data-dir"
,
'd'
,
0
,
G_OPTION_ARG_FILENAME
,
&
data_dir
,
_
(
"Path to the data directory"
),
"path"
},
{
"plugins-dir"
,
'p'
,
0
,
G_OPTION_ARG_STRING
,
&
plugin_path
,
_
(
"Path to the directories containing plugins"
),
"path"
},
{
"fork"
,
'\0'
,
0
,
G_OPTION_ARG_NONE
,
&
forkback
,
_
(
"Fork into the background"
),
NULL
},
{
"password"
,
'w'
,
0
,
G_OPTION_ARG_STRING
,
&
password
,
_
(
"Document password"
),
"password"
},
{
"page"
,
'P'
,
0
,
G_OPTION_ARG_INT
,
&
page_number
,
_
(
"Page number to go to"
),
"number"
},
{
"debug"
,
'l'
,
0
,
G_OPTION_ARG_STRING
,
&
loglevel
,
_
(
"Log level (debug, info, warning, error)"
),
"level"
},
{
"version"
,
'v'
,
0
,
G_OPTION_ARG_NONE
,
&
print_version
,
_
(
"Print version information"
),
NULL
},
{
"synctex"
,
's'
,
0
,
G_OPTION_ARG_NONE
,
&
synctex
,
_
(
"Enable synctex support"
),
NULL
},
{
"synctex-editor-command"
,
'x'
,
0
,
G_OPTION_ARG_STRING
,
&
synctex_editor
,
_
(
"Synctex editor (forwarded to the synctex command)"
),
"cmd"
},
{
"synctex-forward"
,
'\0'
,
0
,
G_OPTION_ARG_STRING
,
&
synctex_fwd
,
_
(
"Synctex forward ..."
),
"position"
},
{
NULL
,
'\0'
,
0
,
0
,
NULL
,
NULL
,
NULL
}
};
...
...
@@ -82,11 +85,23 @@ main(int argc, char* argv[])
}
g_option_context_free
(
context
);
if
(
synctex_fwd
!=
NULL
)
{
if
(
argc
!=
2
)
{
girara_error
(
_
(
"Too many arguments or missing filename while running with --syntex-forward"
));
return
-
1
;
}
if
(
synctex_forward_position
(
argv
[
1
],
synctex_fwd
)
==
true
)
{
return
0
;
}
}
/* Fork into the background if the user really wants to ... */
if
(
forkback
==
true
)
{
int
pid
=
fork
();
const
int
pid
=
fork
();
if
(
pid
>
0
)
{
/* parent */
exit
(
0
)
;
return
0
;
}
else
if
(
pid
<
0
)
{
/* error */
girara_error
(
"Couldn't fork."
);
}
...
...
synctex-dbus.c
View file @
1b6a2b47
...
...
@@ -223,3 +223,92 @@ static const GDBusInterfaceVTable interface_vtable =
.
set_property
=
NULL
};
static
const
unsigned
int
TIMEOUT
=
3000
;
bool
synctex_forward_position
(
const
char
*
filename
,
const
char
*
position
)
{
if
(
filename
==
NULL
||
position
==
NULL
)
{
return
false
;
}
GError
*
error
=
NULL
;
GDBusConnection
*
connection
=
g_bus_get_sync
(
G_BUS_TYPE_SESSION
,
NULL
,
&
error
);
/* GDBusProxy* proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.DBus",
"/org/freedesktop/DBus", "org.freedesktop.DBus", NULL, &error); */
if
(
connection
==
NULL
)
{
girara_error
(
"Could not create proxy for 'org.freedesktop.DBus': %s"
,
error
->
message
);
g_error_free
(
error
);
return
false
;
}
GVariant
*
vnames
=
g_dbus_connection_call_sync
(
connection
,
"org.freedesktop.DBus"
,
"/org/freedesktop/DBus"
,
"org.freedesktop.DBus"
,
"ListNames"
,
NULL
,
G_VARIANT_TYPE
(
"(as)"
),
G_DBUS_CALL_FLAGS_NONE
,
TIMEOUT
,
NULL
,
&
error
);
if
(
vnames
==
NULL
)
{
girara_error
(
"Could not list available names: %s"
,
error
->
message
);
g_error_free
(
error
);
// g_object_unref(proxy);
g_object_unref
(
connection
);
return
false
;
}
GVariantIter
*
iter
=
NULL
;
g_variant_get
(
vnames
,
"(as)"
,
&
iter
);
gchar
*
name
=
NULL
;
bool
found_one
=
false
;
while
(
g_variant_iter_loop
(
iter
,
"s"
,
&
name
)
==
TRUE
)
{
if
(
g_str_has_prefix
(
name
,
"org.pwmt.zathura.PID"
)
==
FALSE
)
{
continue
;
}
girara_debug
(
"Found name: %s"
,
name
);
GVariant
*
vfilename
=
g_dbus_connection_call_sync
(
connection
,
name
,
DBUS_OBJPATH
,
"org.freedesktop.DBus.Properties"
,
"Get"
,
g_variant_new
(
"(ss)"
,
"org.pwmt.zathura.Synctex"
,
"filename"
),
G_VARIANT_TYPE
(
"(v)"
),
G_DBUS_CALL_FLAGS_NONE
,
TIMEOUT
,
NULL
,
&
error
);
if
(
vfilename
==
NULL
)
{
girara_error
(
"Failed to query 'filename' property from '%s': %s"
,
name
,
error
->
message
);
g_error_free
(
error
);
continue
;
}
GVariant
*
tmp
=
NULL
;
g_variant_get
(
vfilename
,
"(v)"
,
&
tmp
);
gchar
*
remote_filename
=
g_variant_dup_string
(
tmp
,
NULL
);
girara_debug
(
"Filename from '%s': %s"
,
name
,
remote_filename
);
g_variant_unref
(
tmp
);
g_variant_unref
(
vfilename
);
if
(
g_strcmp0
(
filename
,
remote_filename
)
!=
0
)
{
g_free
(
remote_filename
);
continue
;
}
g_free
(
remote_filename
);
found_one
=
true
;
GVariant
*
ret
=
g_dbus_connection_call_sync
(
connection
,
name
,
DBUS_OBJPATH
,
"org.pwmt.zathura.Synctex"
,
"View"
,
g_variant_new
(
"(s)"
,
position
),
G_VARIANT_TYPE
(
"(b)"
),
G_DBUS_CALL_FLAGS_NONE
,
TIMEOUT
,
NULL
,
&
error
);
if
(
ret
==
NULL
)
{
girara_error
(
"Failed to run View on '%s': %s"
,
name
,
error
->
message
);
g_error_free
(
error
);
}
else
{
g_variant_unref
(
ret
);
}
}
g_variant_iter_free
(
iter
);
g_variant_unref
(
vnames
);
return
found_one
;
}
synctex-dbus.h
View file @
1b6a2b47
...
...
@@ -45,5 +45,13 @@ ZathuraSynctexDbus* zathura_synctex_dbus_new(zathura_t* zathura);
/* bool zathura_synctex_dbus_view(ZathuraSynctexDbus* synctex_dbus,
const char* position); */
/**
* Forward synctex position to zathura instance having the right file open.
* @param filename filename
* @param position synctex position
* @returns true if a instance was found that has the given filename open, false
* otherwise
*/
bool
synctex_forward_position
(
const
char
*
filename
,
const
char
*
position
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment