GTK+ によるコンソールもどき2010年2月21日 | |
![]() はじめにGtk+ を使ってコンソールっぽいものを作ってみようという企画。 開発環境Gtk+ 2.1.2.11, MinGW 5.1.4 ファイル使い方コンパイルして起動すると、コマンドが打てる。コマンドを打つと、入力がそのまま出力される。コマンド履歴機能付き。 キー操作
内容構成
console モジュールのインタフェース
console の Gtk+ ウィジットは CONSOLE_WIDGET(console) で参照できる。 main() は次のようになる。 int main(int argc, char *argv[]) { GtkWidget *window; gtk_set_locale(); gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), TITLE); gtk_window_resize(GTK_WINDOW(window), WIDTH, HEIGHT); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); console = console_new(); gtk_container_add(GTK_CONTAINER(window), CONSOLE_WIDGET(console)); console_set_callback(console, callback); console_write(console, "console start\n"); console_start(console); gtk_widget_show_all(window); gtk_main(); return 0; } コマンド処理用コールバック関数は、渡されるコマンドをそのまま表示させているだけである。 static void callback(Console *console, const char *command) { console_write(console, command); console_write(console, "\n"); } console は GtkTextView をベースにしている。key-press-event のコールバック関数でキー入力をつかまえて、GtkTextBuffer, GtkTextIter の関数を駆使してなんとかしている。 「使い方」以外の細かい仕様として、コマンドライン以外の編集不可領域の動作がある。編集不可領域においては、カーソル移動や選択、Ctrl+C によるコピー以外の操作は受け付けない。編集不可領域にカーソルがある状態でコマンドライン入力に関するキー入力が行われた場合は、カーソルをコマンドライン末尾に移動し、コマンドライン位置に画面をスクロールし、入力を受け付ける。それ以外のキー入力に対してはなにもしない。 | |
PENGUINITIS |