#include "tilda-terminal.h"
#include "tilda-terminal-dbus-glue.h"
+// FIXME: temporary helpers for gettext
+// TODO: remove these
+#define _(X) X
+#define N_(X) X
+
static void
tilda_terminal_dbus_register_object (TildaTerminal *tt)
{
g_free (object_path);
}
-static GObjectClass *parent_class = NULL;
+/**
+ * Start the current tt->shell in the given TildaTerminal
+ * NOTE: this will kill whatever is running in the terminal,
+ * NOTE: and run the current tt->shell instead :)
+ * Return: TRUE if ok, FALSE otherwise
+ */
+static gboolean
+tilda_terminal_start_shell (TildaTerminal *tt)
+{
+ gint ret;
+ gint argc;
+ gchar **argv;
+ GError *error = NULL;
-/* API */
+ /* Launch a custom command if tt->shell is set (not NULL) */
+ if (tt->shell)
+ {
+ /* Try to parse the user's custom command */
+ ret = g_shell_parse_argv (tt->shell, &argc, &argv, &error);
+
+ if (ret == FALSE)
+ {
+ g_printerr (_("Problem parsing custom command: %s\n"), error->message);
+ g_printerr (_("Launching default shell instead\n"));
+
+ g_error_free (error);
+ goto launch_default_shell;
+ }
+
+ /* Try to start the user's custom command */
+ ret = vte_terminal_fork_command (VTE_TERMINAL(tt->vte_term),
+ argv[0], /* Command */
+ argv, /* Arg Vector */
+ NULL, /* Env Vector */
+ tt->working_directory, /* Start directory */
+ TRUE, /* Add to lastlog */
+ TRUE, /* Add to utmp */
+ TRUE); /* Add to wtmp */
+
+ g_strfreev (argv);
+
+ /* Check for error */
+ if (ret == -1)
+ {
+ g_printerr (_("Unable to launch custom command: %s\n"), tt->shell);
+ g_printerr (_("Launching default shell instead\n"));
+
+ goto launch_default_shell;
+ }
+
+ return TRUE; /* SUCCESS: the early way out */
+ }
+
+launch_default_shell:
-/*
+ ret = vte_terminal_fork_command (VTE_TERMINAL(tt->vte_term),
+ NULL, /* Command -- VTE will figure it out */
+ NULL, /* Arg Vector */
+ NULL, /* Env Vector */
+ tt->working_directory, /* Start Directory */
+ TRUE, /* Add to lastlog */
+ TRUE, /* Add to utmp */
+ TRUE);/* Add to wtmp */
+
+ if (ret == -1)
+ {
+ g_printerr (_("Unable to launch default shell\n"));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*******************************************************************************
* All GObject stuff is below. You probably don't need to change this...
- */
+ ******************************************************************************/
+
+static GObjectClass *parent_class = NULL;
enum tilda_terminal_properties {
TILDA_TERMINAL_NUMBER = 1,
case TILDA_TERMINAL_SHELL:
g_free (self->shell);
self->shell = g_value_dup_string (value);
+ tilda_terminal_start_shell (self);
g_print ("terminal shell: %s\n", self->shell);
break;
g_signal_connect (G_OBJECT(self->vte_term), "child-exited",
G_CALLBACK(gtk_main_quit), self);
- vte_terminal_fork_command (VTE_TERMINAL(self->vte_term), NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE);
-
+ tilda_terminal_start_shell (self);
tilda_terminal_dbus_register_object (self);
return obj;