2014-06-24 2 views
0

Возможно ли использовать графическую программу GTK, также иметь «интерфейс командной строки», такой как параметры, предоставленные GNU readline, editline или linenoise?Может ли GTK работать с библиотекой readline?

Как бороться с блокировкой вызовов gtk_main() и блокировкой шагов цикла из этих библиотек?

ответ

1

Определенно возможно интегрировать библиотеку, такую ​​как GNU readline, с графической программой. Самый простой вариант - создать поток, выделенный для readline, и связаться с потоком GUI, используя g_idle_add (который является потокобезопасным).

Если вы не хотите использовать темы, вы можете использовать технику GIO (g_io_channel_unix_new() и g_io_add_watch()) поручить основной цикл GTK уведомляет вас о рассмотрении ввода и вызывать Readline с помощью altnernate interface, предназначенной для использования в качестве цикла обработки событий обратного вызова , поддержка Readline Python и PyGTK использовать эти функции для того, чтобы следующие, все в одном потоке:

>>> 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 - и который не полагается на тайные коды терминалов для загрузки.

+0

Спасибо за ответы, я попробую это. Моя программа может быть настроена с помощью сценариев схемы. CLI может помочь мне легко отлаживать и тестировать эти сценарии и даже запускать программу без графического интерфейса. – azmeuk

+0

@azmeuk Инфраструктура есть - если у вас есть рабочее понимание программирования, управляемого событиями, вы можете легко заставить readline и GTK сотрудничать. На мой взгляд, современная программа также должна поддерживать настоящий GUI REPL, который не зависит от эмуляции терминала, в виде консолей разработчика браузеров. – user4815162342

Смежные вопросы