3 == кеймапы работают как: ==
7 название вполне может быть Event!
16 Это должно быть преобразовано в Event как:
17 mcevent_add_cb ("Группа.действие", ...)
19 при этом спец. группа 'mc.*'(и дочерние) должны быть проигнорированы в файле привязок
23 Инициализируется по дефолту. остальные группы описывают дополнительные назначения клавиш.
25 Спец.случаи. Панель и командная строка.
27 - тут кейбиндинги панели.
29 - тут кейбиндинги комстроки.
31 признак того, что необходимо включить или выключить "panel-commandline.*" - не пустая или пустая комстрока.
32 При непустой комстроке делаем просто mckeybind_push ("panel-commandline"), а как только строка очищается -
33 делаем mckeybind_pop();
35 То есть. выглядит всё так:
36 mckeybind_init("core"); // инициализируем некие базовые(одинаковые для всех) хоткеи.
41 mckeybind_push("editor");
43 mckeybind_push("viewer");
45 mckeybind_push("panel");
49 mckeybind_push("panel-commandline");
56 == КЕЙБИНДИНГИ ПО УМОЛЧАНИЮ ==
57 Должны содержать минимально необходимый для работы минимум. Если действие доступно через меню,
58 hardcoded-кейбиндинга быть не должно.
60 === как инициальзировать ===
61 Ну... mckeybind_push("editor", g_hash_array *default(or NULL)) ?
64 == Хранение в памяти ==
65 храним в памяти в виде "хоткей" -> "event". Чтобы после чтения с клавы был быстрый доступ к mcevent_raise('action')
67 == Дубликаты хоткеев ==
68 наверное, надо предупреждать. что в конфиге есть конфликт...
73 в момент... гм. наверное. в момент mckeybind_push
74 ибо конфиг читаем целиком, но весь сразу не парсим...
76 == "Многоэтажные" хоткеи ==
81 Это ошибка. Выдать алерт.
83 === Нормальная обработка ===
86 action3 = ctrl-v, e, 1
87 action4 = ctrl-v, e, 2
90 варианты использования.
91 mckeybind_push() должна добавить новые хоткеи к уже существующим (заменить существующие привязки клавиш).
92 mckeybind_pop() должна воостановить на предыдущее значение!
94 При этом должна быть возможность как бы временно "скрыть" существующие привязки. Для многоэтажных хоткеев.
97 //При парсинге видим многоэтажный хоткей и сразу создаём Event вида "mc.hotkey.<hotkey>".
98 // где <hotkey> - это <modificator>-<key> или просто <key>.
99 //mc_event_add_cb ("mc.hotkey.ctrl-v", );
100 нет. Надо предусмотреть временное замещение всех действующих хоткеев на только хоткеи "второго эшелона".
101 то есть, из примера надо после нажатия ctrl-v задейтвовать:
105 e -> !!!!!!! (ещё раз очищаем хоткеи и ждём 1 или 2 !!!)
107 После всего этого возвращаемся в обычный режим работы.
109 делаем это созданием псевдогруппы привязок вида "mc.hotkey.<hotkey>".
110 где <hotkey> - это <modificator>-<key> или просто <key>.
111 затем привязываем "ctrl-v" к спецкейбиндингу:
113 ctrl-v -> "mc.hotkey.processMulti('ctrl-v')"
115 привязывать к именам хоткеев нужно структуру вида:
118 char *param; /* для всех равен NULL, для многоэтажных равен названию группы хоткеев второго эшелона*/
121 при вызове этого Event начинаем искать группу хоткеев "mc.hotkey.ctrl-v"
122 находим и заменяем активные привязки на таблицу:
127 e -> mc.hotkey.processMulti('ctrl-v,e')
130 NB: При парсинге файла привязок если встречаем мультихоткей, то ищем в списке групп - есть уже или нету.
131 "ctrl-v, e, 1" = ищем по группе "mc.hotkey.ctrl-v,e"
132 нашли - гуд. Добавляем.
135 == Порядок обработки файлов привязок ==
138 2) переменная окружения
139 3) конфиг в дом.каталоге