58
« : Октябрь 19, 2011, 02:49:27 pm »
Для во время разработки и тестирования одного скрипта мне приходилось передавать ему попеременно разные параметры командной строки. Удалять из терминала достаточно длинные параметры и вставлять вместо них другие оказалось достаточно трудоемко. Для облегчения работы была написана приведенная ниже программа. Изменение или вставка параметров делаются через строку редактирования, запуск скрипта - по кнопке Run.
$cat testfield.cpp
#include <gtk/gtk.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
GtkWidget *entryRunB, *entryRun, *entryRunE;
void buttonRunClicked(GtkWidget *widget, void* p) {
string s = string(gtk_entry_get_text(GTK_ENTRY(entryRunB)))+ gtk_entry_get_text(GTK_ENTRY(entryRun))+gtk_entry_get_text(GTK_ENTRY(entryRunE));
cout << s<<endl;
system(s.c_str());
}
int main(int argc, char** argv) {
gtk_init(&argc, &argv);
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget* hbox = gtk_hbox_new(false, 0);
gtk_container_add(GTK_CONTAINER(window), hbox);
GtkWidget *hpaned = gtk_hpaned_new ();
gtk_box_pack_start (GTK_BOX (hbox), hpaned, TRUE, TRUE, 0);
entryRunB = gtk_entry_new ();
gtk_paned_add1 (GTK_PANED (hpaned), entryRunB);
GtkWidget *hpaned2 = gtk_hpaned_new ();
gtk_paned_add2 (GTK_PANED (hpaned), hpaned2);
entryRun = gtk_entry_new ();
gtk_paned_add1 (GTK_PANED (hpaned2), entryRun);
entryRunE = gtk_entry_new ();
gtk_paned_add2 (GTK_PANED (hpaned2), entryRunE);
GtkWidget* buttonRun = gtk_button_new_with_label("Run");
gtk_box_pack_start (GTK_BOX (hbox), buttonRun, FALSE, FALSE, 0);
g_signal_connect( G_OBJECT(buttonRun), "clicked", G_CALLBACK(buttonRunClicked), 0);
g_signal_connect( G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), 0);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
$cat makefile
APP=testfield
all: $(APP)
$(APP): testfield.cpp
g++ -o$@ `pkg-config gtk+-2.0 --cflags --libs` testfield.cpp
clean:
rm -f $(APP)
В дальнейшем хорошо бы добавить ввод начала и конца команды для универсальности - динамически настраиваемое количество частей команды; возможность просмотра и выбора предыдущих команд. Ввод команды при нажатии enter. Получится хорошая надстройка над psql для работы с postgres, скорее всего и для других СУБД тоже подойдет.
Динамически настраиваемое количество строк ввода команд, вкладки, отображение вывода команды в TextView (возможность копировать по ctrl+C), сохранение/восстановление состояний из файлов.