Ticket #2175: panelize doesn't honour current sorting.
[midnight-commander.git] / lib / keybind / TODO.txt
blob3e064ab10fd132b8ceb9289e2350304f25b09fcd
1 /*
3 == кеймапы работают как: ==
5 клавиша - название
7 название вполне может быть Event!
10 mc.hotkeys
12 [Группа]
13  действие=клавиша
16 Это должно быть преобразовано в Event как:
17  mcevent_add_cb ("Группа.действие", ...)
19 при этом спец. группа 'mc.*'(и дочерние) должны быть проигнорированы в файле привязок
21 главная группа [core]
23 Инициализируется по дефолту. остальные группы описывают дополнительные назначения клавиш.
25 Спец.случаи. Панель и командная строка.
26 [panel]
27  - тут кейбиндинги панели.
28 [panel-commandline]
29  - тут кейбиндинги комстроки.
31 признак того, что необходимо включить или выключить "panel-commandline.*" - не пустая или пустая комстрока.
32 При непустой комстроке делаем просто mckeybind_push ("panel-commandline"), а как только строка очищается - 
33 делаем mckeybind_pop();
35 То есть. выглядит всё так:
36 mckeybind_init("core"); // инициализируем некие базовые(одинаковые для всех) хоткеи.
38 switch (args)
39  {
40   case 'editor':
41     mckeybind_push("editor");
42   case 'viewer'
43     mckeybind_push("viewer");
44   default:
45     mckeybind_push("panel");
46  }
47  ...
48  if (cmd_active())
49     mckeybind_push("panel-commandline");
51  ...
52   if (cmd_inactive())
53     mckeybind_pop();
56 == КЕЙБИНДИНГИ ПО УМОЛЧАНИЮ ==
57 Должны содержать минимально необходимый для работы минимум. Если действие доступно через меню,
58 hardcoded-кейбиндинга быть не должно.
60 === как инициальзировать ===
61 Ну... mckeybind_push("editor", g_hash_array *default(or NULL)) ?
64 == Хранение в памяти ==
65 храним в памяти в виде "хоткей" -> "event". Чтобы после чтения с клавы был быстрый доступ к mcevent_raise('action')
67 == Дубликаты хоткеев ==
68 наверное, надо предупреждать. что в конфиге есть конфликт...
69 [group]
70 action1 = ctrl-v
71 action2 = ctrl-v
73 в момент... гм. наверное. в момент mckeybind_push
74 ибо конфиг читаем целиком, но весь сразу не парсим...
76 == "Многоэтажные" хоткеи ==
78 === Дубликаты: ===
79 action1 = ctrl-v
80 action2 = ctrl-v, w
81 Это ошибка. Выдать алерт.
83 === Нормальная обработка ===
84 action1 = ctrl-v, q
85 action2 = ctrl-v, w
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 задейтвовать:
103   q -> action1
104   w -> action2
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 привязывать к именам хоткеев нужно структуру вида:
117  char *action;
118  char *param; /* для всех равен NULL, для многоэтажных равен названию группы хоткеев второго эшелона*/
121 при вызове этого Event начинаем искать группу хоткеев "mc.hotkey.ctrl-v"
122 находим и заменяем активные привязки на таблицу:
125   q -> action1
126   w -> action2
127   e -> mc.hotkey.processMulti('ctrl-v,e')
130 NB: При парсинге файла привязок если встречаем мультихоткей, то ищем в списке групп - есть уже или нету.
131 "ctrl-v, e, 1" = ищем по группе "mc.hotkey.ctrl-v,e"
132 нашли - гуд. Добавляем.
135 == Порядок обработки файлов привязок ==
136 традиционно:
137  1) комстрока
138  2) переменная окружения
139  3) конфиг в дом.каталоге
140  4) конфиг в /etc/mc
147 init
148 deinit
150 push