GMainLoop для клавы (пока что только для клавы). Нажатие клавиши разделяем на инициатора события и на обработчика события. как оно будет примерно выглядеть в работе: 1) создаём GSource, к нему присобачиваем дескриптор клавы (SLang_TT_Read_FD). 2) к новосозданному GSource присобачиваем обработчик ( пусть будет функция_1) 3) присобачиваем GSource к GMainLoop 4) в функция_1 получаем с клавы коды нажатий (пользуемся SLang_input_pending (0) для получения полной ESC-последовательности) 5) в функции_1 вызываем событие mcevent_raise("keyboard.press", (gpointer) keyb_data) keyb_data - это структура, например, такая: typedef struct { int keycode; // некий код нажатой клавиши... ну или типа того. char *full_esc_sequence; // типа, чё было нажато. gsize len_esc_sequence; // длина полученного gboolean isCtrl; // ну тут уже как воображения хватит. Был нажат контрол или нет. Надо.не надо? ... ; // и т.д. дополнительные данные, короче. } tty_key_t; В данном случае функция_1 является инициатором события "keyboard.press". Всё. дальше обработчик события. От обработчика нужно, чтобы он умел работать со структурой tty_key_t То есть, обработчик будет выглядеть, например, так: gboolean tty_key_keyboard_press_cb (mcevent_t *event, gpointer data) { tty_key_t *key_info = (tty_key_t *) data; ... // дальше обработчик на основе полученной информации о клавишах будет сам являться инициатором событий. // Ну типа так: if(key_info->keycode == F7){ mcevent_raise("panel.mkdir"); } else if (key_info->keycode == SHIFT_F4) { mcevent_raise("editor.newfile"); } // и т.д. Пишу примерно, ибо я каждый раз ломаю мозг об существующие обработчики :( } Короче, обработчик tty_key_keyboard_press_cb() является как бы разветвителем событий: из одного события "keyboard.press" получается туча других событий. Сам этот обработчик привязывается в src/main.c в функции mcmain_init_event_callbacks() Например, так: mcevent_add_cb( "keyboard.press", tty_key_keyboard_press_cb, NULL); ЧТО ОСТАЛОСЬ "ЗА КАДРОМ" 1) двойной ESC, да и вообще, имитация клавиши META 2) обработчик мыши.