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) обработчик мыши.