diff options
author | William Jon McCann <jmccann@redhat.com> | 2013-02-15 13:30:39 -0500 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2013-02-15 14:28:16 -0500 |
commit | 447d2ad6944afd94434a774b28f8c6e8274955fe (patch) | |
tree | f3c3f58647c9e1eec2859be38426705b223c8b3c /eel | |
parent | c1015ee559a21d64f65cf6288663fab4f7a6b9d4 (diff) | |
download | nautilus-447d2ad6944afd94434a774b28f8c6e8274955fe.tar.gz |
eel: use G_APP_INFO_CREATE_NEEDS_TERMINAL to run command in terminal
Diffstat (limited to 'eel')
-rw-r--r-- | eel/eel-gnome-extensions.c | 138 |
1 files changed, 1 insertions, 137 deletions
diff --git a/eel/eel-gnome-extensions.c b/eel/eel-gnome-extensions.c index eaddfe570..e7b8ecbe9 100644 --- a/eel/eel-gnome-extensions.c +++ b/eel/eel-gnome-extensions.c @@ -31,153 +31,19 @@ #include "eel-gnome-extensions.h" #include <gtk/gtk.h> -#include <libgnome-desktop/gnome-desktop-utils.h> /* Return a command string containing the path to a terminal on this system. */ -static char * -try_terminal_command (const char *program, - const char *args) -{ - char *program_in_path, *quoted, *result; - - if (program == NULL) { - return NULL; - } - - program_in_path = g_find_program_in_path (program); - if (program_in_path == NULL) { - return NULL; - } - - quoted = g_shell_quote (program_in_path); - g_free (program_in_path); - if (args == NULL || args[0] == '\0') { - return quoted; - } - result = g_strconcat (quoted, " ", args, NULL); - g_free (quoted); - return result; -} - -static char * -try_terminal_command_argv (int argc, - char **argv) -{ - GString *string; - int i; - char *quoted, *result; - - if (argc == 0) { - return NULL; - } - - if (argc == 1) { - return try_terminal_command (argv[0], NULL); - } - - string = g_string_new (argv[1]); - for (i = 2; i < argc; i++) { - quoted = g_shell_quote (argv[i]); - g_string_append_c (string, ' '); - g_string_append (string, quoted); - g_free (quoted); - } - result = try_terminal_command (argv[0], string->str); - g_string_free (string, TRUE); - - return result; -} - -static char * -get_terminal_command_prefix (gboolean for_command) -{ - int argc; - char **argv; - char *command; - guint i; - static const char *const commands[][3] = { - { "gnome-terminal", "-x", "" }, - { "dtterm", "-e", "-ls" }, - { "nxterm", "-e", "-ls" }, - { "color-xterm", "-e", "-ls" }, - { "rxvt", "-e", "-ls" }, - { "xterm", "-e", "-ls" }, - }; - - /* Try the terminal from preferences. Use without any - * arguments if we are just doing a standalone terminal. - */ - argc = 0; - argv = g_new0 (char *, 1); - gnome_desktop_prepend_terminal_to_vector (&argc, &argv); - - command = NULL; - if (argc != 0) { - if (for_command) { - command = try_terminal_command_argv (argc, argv); - } else { - /* Strip off the arguments in a lame attempt - * to make it be an interactive shell. - */ - command = try_terminal_command (argv[0], NULL); - } - } - - while (argc != 0) { - g_free (argv[--argc]); - } - g_free (argv); - - if (command != NULL) { - return command; - } - - /* Try well-known terminal applications in same order that gmc did. */ - for (i = 0; i < G_N_ELEMENTS (commands); i++) { - command = try_terminal_command (commands[i][0], - commands[i][for_command ? 1 : 2]); - if (command != NULL) { - break; - } - } - - return command; -} - -static char * -eel_gnome_make_terminal_command (const char *command) -{ - char *prefix, *quoted, *terminal_command; - - if (command == NULL) { - return get_terminal_command_prefix (FALSE); - } - prefix = get_terminal_command_prefix (TRUE); - quoted = g_shell_quote (command); - terminal_command = g_strconcat (prefix, " /bin/sh -c ", quoted, NULL); - g_free (prefix); - g_free (quoted); - return terminal_command; -} - void eel_gnome_open_terminal_on_screen (const char *command, GdkScreen *screen) { - char *command_line; GAppInfo *app; GdkAppLaunchContext *ctx; GError *error = NULL; GdkDisplay *display; - command_line = eel_gnome_make_terminal_command (command); - if (command_line == NULL) { - g_message ("Could not start a terminal"); - return; - } - - app = g_app_info_create_from_commandline (command_line, NULL, 0, &error); + app = g_app_info_create_from_commandline (command, NULL, G_APP_INFO_CREATE_NEEDS_TERMINAL, &error); if (app != NULL && screen != NULL) { display = gdk_screen_get_display (screen); @@ -195,6 +61,4 @@ eel_gnome_open_terminal_on_screen (const char *command, g_error_free (error); } - - g_free (command_line); } |