Anzeige:
Ergebnis 1 bis 2 von 2

Thema: [GTK+/C] eingabe ersetzen und ausführen

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377

    [GTK+/C] eingabe ersetzen und ausführen

    Hab ein kleines GtkEntry geschrieben:
    Code:
    #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?
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  2. #2
    Registrierter Benutzer Avatar von Trillian
    Registriert seit
    26.04.2001
    Beiträge
    180
    1.) Die GLib stellt Wrapper um exec**() zur Verfügung - du solltest lieber diese Funktionen statt system() verwenden
    2.) Mach's doch so:

    Code:
    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, ...);

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •