Re: libgnome: gnome-open.c

Nickolay V. Shmyrev <nshmyrev yandex ru> writes:

> В Вск, 17/06/2007 в 17:32 +0200, Alp Özmert пишет:
>> Wouter Bolsterlee <uws+gnome xs4all nl> writes:
>> > 2007-06-17 klockan 14:23 skrev Alp Özmert:
>> >> I came upon 'gnome-open' while looking for a way to make Emacs/Gnus
>> >> call the application associated by Gnome as an external viewer for
>> >> attached files.  The impediment is that I couldn't make gnome-open
>> >> wait until the process finishes, neither did I have success with
>> >> gnome_url_show().
>> >> 
>> >> I would be delighted by any given insight to this first-time gnome
>> >> hacker to enable him to construct a blocking call to
>> >> gnome_url_show().
>> >
>> > This is not really possible to do reliably. Many Gnome
>> > applications are single instance apps (e.g. Evince). This means
>> > that a second application instance will just pass through the
>> > command line arguments (e.g. the filename to show) to the already
>> > running applications, and quit immediately afterwards.
>> Is there a simple way to find the path to the associated
>> application? For now that would be sufficient.
> I suppose it's much easier to write your own little program which will
> use gnomevfs in similar way like gnome-open does. In addition you can
> suggest a patch to gnome-open to print this information.
> gnome_vfs_mime_get_default_application_for_uri()
> is the function you need.

I think if this tool were to be included in the distribution it
would be best to squash it into gnome-open in order to not to create
yet another different binary. For now I prefer to keep it as
gnome-mime-exec so there is no clash with my Gnome installation.

Below you can find my little program, which took me about one hour
to compile, having spent most of the time with autotools, as
usual. ;)

Alp Özmert


#include <config.h>

#include <glib.h>
#include <stdio.h>
#include <libgnome/gnome-url.h>
#include <libgnome/gnome-program.h>
#include <libgnome/gnome-init.h>
#include <libgnomevfs/gnome-vfs-mime-handlers.h>
#include <libgnomevfs/gnome-vfs.h>

#include <glib/gi18n-lib.h>

main (int argc, char *argv[])
  GnomeVFSMimeApplication* app;
  const char *exec;

  if (argc < 2) {
    fprintf (stderr, "Usage: %s <mime-type>\n", argv[0]);
    return 1;

  /* initialize GnomeVFS */
  if (!gnome_vfs_init ()) {
    printf ("Could not initialize GnomeVFS\n");
    return 1;

  app = gnome_vfs_mime_get_default_application(argv[1]);
  if (!app) {
    printf("Could not find MIME type.\n");
    return 1;

  exec = gnome_vfs_mime_application_get_exec(app);
  if (!exec) {
    printf("No associated executable found.\n");
  printf("%s\n", exec);
  return 0;

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