グラフィカル GTK プログラムが、 GNU readline、editline、またはlinenoiseによって提供されるような「コマンドライン インターフェイス」を持つことは可能ですか?
gtk_main() 呼び出しのブロック、およびこれらのライブラリからのループ ステップのブロックに対処するにはどうすればよいですか?
GNU readline などのライブラリをグラフィカル プログラムに統合することは間違いなく可能です。最も簡単なオプションは、readline 専用のスレッドを生成し、g_idle_add
(スレッドセーフな) を使用して GUI スレッドと通信することです。
スレッドを使用したくない場合は、GIO 機構 (g_io_channel_unix_new()
およびg_io_add_watch()
) を使用して GTK メイン ループに保留中の入力を通知するよう指示し、イベント ループ コールバックとして使用するために設計された代替インターフェイスを使用して readline を呼び出すことができます。Python の readline サポートと PyGTK は、これらの機能を利用して、以下をすべて 1 つのスレッドで有効にします。
>>> import gtk
>>> w = gtk.Window()
>>> w.add(gtk.Label("foo"))
>>> w.show_all() # at this point, a window with label is shown
ただし、別の問題は、21 世紀の端末エミュレーションに基づいたコマンドライン インターフェイスをプログラムに搭載するかどうかです。GTK には、readline() をはるかに超える複数行編集機能がありGtkTextView
ます。それを使用して、コピーと貼り付け、複数行の編集、Unicode、色、プロポーショナルフォント、埋め込み画像、または作業に問題のないコマンドラインのような機能を構築するのは非常に簡単です (そして、追加するかもしれません)。 Windows で — 難解なターミナル コードに依存せずに起動できます。