PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [GTK+/C] eingabe ersetzen und ausführen



nul
26-08-2003, 18:51
Hab ein kleines GtkEntry geschrieben:

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <string.h>

void enter_callback( GtkWidget *widget,
GtkWidget *entry );

int main( int argc,
char *argv[] )
{

GtkWidget *window;
GtkWidget *vbox;
GtkWidget *entry;
gint tmp_pos;

gtk_init (&argc, &argv);

/* create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (GTK_WIDGET (window), 200, 30);
gtk_window_set_title (GTK_WINDOW (window), "GTK Entry");

vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show (vbox);

entry = gtk_entry_new ();
gtk_entry_set_max_length (GTK_ENTRY (entry), 100);
g_signal_connect (G_OBJECT (entry), "activate",
G_CALLBACK (enter_callback),
(gpointer) entry);
gtk_entry_set_text (GTK_ENTRY (entry), "Programm");
tmp_pos = GTK_ENTRY (entry)->text_length;
gtk_editable_insert_text (GTK_EDITABLE (entry), " eingeben", -1, &tmp_pos);
gtk_editable_select_region (GTK_EDITABLE (entry),
0, GTK_ENTRY (entry)->text_length);
gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);
gtk_widget_show (entry);

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

gtk_widget_show (window);

gtk_main();

return 0;
}


void enter_callback( GtkWidget *widget,
GtkWidget *entry )
{
char text_system[100];
const gchar *entry_text;
int laenge;

entry_text = gtk_entry_get_text (GTK_ENTRY (entry));

laenge = strlen(entry_text);


if (entry_text[laenge-1] == '&')
{
system(entry_text);
}
else
{
strcpy(text_system, entry_text);
strcat(text_system,"&");
system(text_system);
}
exit(-1);
}
Nun hab ich länger und auch vergebens versucht dem beizubringen, dass wenn ich mc oder mc& eingebe, er mir folgendes ausführt: x-terminal-emulator -T mc -e mc
Ich habs aber nie geschafft!! :(

Wie würdet ihr das anstellen?

Trillian
26-08-2003, 20:23
1.) Die GLib stellt Wrapper um exec**() zur Verfügung - du solltest lieber diese Funktionen statt system() verwenden
2.) Mach's doch so:



const char *cmd = "mc"; /* das hier würdest du aus dem GtkEntry auslesen */
char buf[100];

snprintf(buf, sizeof(buf), "xterm-emu-blah %s -x -y -z", cmd);

g_spawn_async_dingsbums(..., buf, ...);