int info (void *show_conf) [09:40:55] <slavazanko/w> pointer_to_function myfinc(void) { return info; } [09:40:57] <il.smind > что надо сделать внутри? [09:41:08] <slavazanko/w> имена функций - это фактически именованные указатели [09:41:16] <il.smind > а... [09:41:26] <slavazanko/w> return имя_функции [09:41:52] <slavazanko/w> без () [09:42:06] <il.smind > т.е. если я сделаю внутри sfpt [09:42:18] <il.smind > dialogs.c [09:42:37] andrew_b вышел из конференции [09:42:40] <slavazanko/w> ты опять летишь впереди паровоза [09:43:07] <il.smind > там сделаю configure_sftp [09:43:37] <il.smind > то [09:43:54] <il.smind > я смогу отдать указатель на configure_sftp [09:44:19] <il.smind > например для построения меню? [09:44:44] <slavazanko/w> Плагин строит сам меню? [09:45:01] <il.smind > slavazanko/w: не меню а диалог [09:45:10] <il.smind > диалог настроек [09:45:35] <slavazanko/w> а кто будет вызывать диалог? [09:45:46] <slavazanko/w> в какой части кода будет вызван этот диалог? [09:45:53] <il.smind > глобальное меню вызывает info [09:46:14] <slavazanko/w> из глобального меню? [09:46:16] <il.smind > info возвращает указатель [09:46:23] <il.smind > slavazanko/w: да [09:46:26] <Зося Синицкая> il.smind : Конференций: 3 (подробнее where) Сервер: conference.jabber.ru | Ник: Зося_Синицкая Лимит размера сообщений: 2048 Локальное время: 22.04.2011 11:46:19 Время работы: 2 месяца 1 день 19:27:17, Последняя сессия: 19 дней 01:24:04 Флуд: вкл | Цензор: выкл | Префикс команд: отсутствует Выполнено тредов: 268307 | Ошибок: 0 Сообщений вх: 7811 | исх: 87 Презенсов вх: 23516 | исх: 107 Iq запросов вх: 4331 | исх: 3747 Ошибок исх: 0 Рабочих циклов: 35559 | холостых: 1653865 [09:46:37] <slavazanko/w> вот дура [09:47:19] <slavazanko/w> Можешь показать сейчас, где именно? Что-то мне подсказывает, что там уж очень явно напрашивается mc_event [09:47:45] <il.smind > я незнаю где [09:47:55] <il.smind > ну пусть допустим [09:49:09] <il.smind > Options \ VFS modules\ SFTP configuration [09:49:31] <il.smind > подменю VFS modules строится динамически [09:50:12] <il.smind > на основании того что получего от info [09:52:13] <il.smind > предположим что info умеет возвращать строку "SFTP configuration" и указатель на configure_sftp [09:52:34] <slavazanko/w> вот смотри, идея такая: меню или что там ещё вызывает событие. Передаёт в событие название VFS-плагина. Плагин (sftp в нашем случае) получает событие, проверяет. что в параметрах его имя. Если нет - выходит(передаёт обработку события следующему обработчику). Если имя совпало, то обработчик события выполняет некие действия. Например. рисует диалог. И да, таким же образом можно составить список VFS-плагинов, которые должны быть добавлены в это подменю.
Плагины вешают обработчик на уже второе событие... если происходит событие. то плагины добавляют в массив своё имя и передают управление дальше... [09:53:33] <il.smind > а прямо сейчас это можно использовать? [09:53:47] <slavazanko/w> да [09:53:50] <slavazanko/w> прямо сейчас [09:54:09] <slavazanko/w> я могу помочь в этом [09:54:19] <slavazanko/w> я уже переключился на 1535_sftp [09:54:49] <il.smind > я бы не хотел железобетонно привязывать sftp к mc [09:54:55] <slavazanko/w> наверное, это будет в src/filemanager/midnight.c:318 create_options_menu() [09:55:14] <slavazanko/w> > я бы не хотел железобетонно привязывать sftp к mc не понял. Оно привяжется не сильнее, чем любой другой плагин [09:55:28] <il.smind > да там [09:55:54] <il.smind > >Оно привяжется не сильнее, чем любой другой плагин да именно [09:56:37] <il.smind > а мне бы хотелось чтобы по возможность почти не было привязки [09:56:48] <slavazanko/w> Options \ VFS modules\ SFTP configuration сто-то мне подсказывает. что у нас только двухуровневое меню... то есть, придётся делать так: Options \ VFS module: sftp Options \ VFS module: fish ... [09:57:01] <slavazanko/w> > а мне бы хотелось чтобы по возможность почти не было привязки не понял. а зачем так? [09:57:27] <il.smind > чтобы потом всё не переделывать [09:57:43] <il.smind > и заодно обкатать механизм [09:57:55] <slavazanko/w> до последнего времени плагины не то. чтобы были привязаны.. они были железобетонно влиты одним монолитом в mc. Это недавно их раскидали по человечески [09:58:04] <il.smind > да [09:58:09] <il.smind > я понимаю [09:58:23] <il.smind > ты проделал большую работу [09:58:33] <il.smind > но и сейчас [09:58:56] <il.smind > мне надо например засунуть свои диалоги в src/ [09:59:12] <slavazanko/w> какие диалоги? [09:59:14] <il.smind > потом прописать их вызов в [09:59:40] <il.smind > диалоги настройки, диалог параметров соединения [10:00:03] <slavazanko/w> эти диалоги относятся к плагинам? [10:00:11] <il.smind > нет [10:00:15] <il.smind > только к одному [10:00:18] <il.smind > sftp [10:00:29] <slavazanko/w> ну ляпи в src/vfs/sftp/* [10:00:31] <il.smind > не к плагинам а плакину [10:00:42] <il.smind > я и леплю [10:00:49] <il.smind > но когда слепил [10:01:06] <il.smind > понял что придётся вызывать из srs [10:01:09] <il.smind > понял что придётся вызывать из src [10:02:47] <slavazanko/w> а... ну вот. система событий как раз и предназначена для такого. Я так lib от src полностью отвязал [10:24:17] <slavazanko/w> короче, просто так меню не получится динамически менять. [10:24:37] <slavazanko/w> надо сделать возможность привязывать к пунктам меню некие каллбэки. [10:24:45] <slavazanko/w> а не только команды [10:42:57] andrew_b зашёл в конференцию [10:45:31] <andrew_b> У нас нет подменю. [10:46:56] <slavazanko/w> Андрей. как ты смотришь на то, чтобы чуток поменять menu_entry_t? например, так: typedef enum { MENU_ENTITY_TYPE_COMMAND, MENU_ENTITY_TYPE_CALLBACK, } menu_entity_type_t;
...
typedef struct menu_entry_t { menu_entity_type_t type; unsigned char first_letter; hotkey_t text; union { unsigned long command; struct { gpointer function; gpointer arg; } cb; } u; char *shortcut; } menu_entry_t; [10:47:53] <andrew_b> Только не коллбэки. [10:48:11] <slavazanko/w> гм. события? [10:48:55] <andrew_b> Да. [10:49:10] <slavazanko/w> union { unsigned long command; struct { const char *event_group; const char *event_name; gpointer arg; } cb; } u; [10:49:27] <slavazanko/w> ок [10:51:18] <andrew_b> Меню яавляется частью диалога, поэтому команду, которую оно посылает, обрабатывает или сам диалог, или активный виджет. [10:51:36] <andrew_b> Не уверен, что сейчас это так, но должно быть так. [10:51:40] <slavazanko/w> Илья. если есть что мощно запушить в 1535_sftp - пушь. Я там буду ляпить вместе с тобой. В последствии буду делать fix_for, чтобы мощно не пушить [11:21:58] <il.smind > я тут [11:22:04] <il.smind > жряли-с [11:23:49] <slavazanko/w> я добавил возможность вызывать из пункта меню события. ща запушу... [11:24:29] <andrew_b> Надо не добавлять, а заменять старый движок событий на новый. [11:24:44] <andrew_b> Иначе мы так и будем на двух стульях сидеть. [11:25:27] <il.smind > andrew_b: а почему нельзя потехоньку? [11:25:29] <slavazanko/w> ну... сейчас полностью заменить будет сложновато, ибо там цепляется до едреней фени кода [11:26:20] <slavazanko/w> я запушу, а вы посмотрите, имеет такое решение право на жизнь или нет. ок? [11:26:38] <il.smind > показывай [11:26:40] <andrew_b> il.smind : потихоньку это каша. [11:27:22] <slavazanko/w> git pull && git show b5021138018966f95f2cdf09e30bfd81301b236a [11:30:02] <andrew_b> - entry = g_new (menu_entry_t, 1); + entry = g_new0 (menu_entry_t, 1);
Необязательно. Там все поля инициализируются индивидуально. [11:30:37] <slavazanko/w> я на всякий случай подстраховываюсь уже :) [11:30:52] <slavazanko/w> самостраховка. так сказать [11:38:21] <il.smind > slavazanko/w: а как пользоваться то? [11:38:28] <il.smind > куда мне что прописать? [11:38:30] <slavazanko/w> а это я ща допишу [11:39:35] <il.smind > можешь диалог настроек нарисовать? [11:39:46] <il.smind > чтобы там пара кнопок и всё [11:39:59] <il.smind > ну или по вкусу [11:54:02] BanderOS зашёл в конференцию [11:54:53] BanderOS вышел из конференции [11:56:26] BanderOS зашёл в конференцию [12:15:11] <slavazanko/w> Илья, запуль 1535_sftp Добавил возможность вызова диалога из меню. диалог добавляй в src/vfs/sftpfs/sftpfs.c:645
в sftpfs_plugin_show_config_dialog() [12:22:53] <andrew_b> plugin.name.for.config.dialog [12:22:57] <andrew_b> Эххх... [12:23:07] <slavazanko/w> ? [12:23:11] <slavazanko/w> переименовать? [12:23:27] <slavazanko/w> я так. от балды... как концепт [12:23:36] <andrew_b> Давайте придерживаться одннобразия в названии событий. [12:23:58] <andrew_b> vfs_print_message [12:24:00] <slavazanko/w> подчёркивания? [12:24:04] <slavazanko/w> ок [12:24:05] <andrew_b> Да. [12:24:22] BanderOS вышел из конференции [12:24:53] <andrew_b> Куда меню добавляются? [12:25:09] <slavazanko/w> в "настройки" [12:26:00] <andrew_b> Не. Так не пойдёт. [12:26:08] <andrew_b> Надо делать подменю. [12:26:15] <il.smind > в фаре есть пункт "Настройки внешних модулей" открывается отдельный диалог с перечислением подключённых [12:26:33] <il.smind > andrew_b: да ну его это подъменю [12:26:51] <andrew_b> Ну или отдельное окно. [12:27:01] <slavazanko/w> гм.. ну это пусть будет заданием Илье. Моя задача: написать екзампл, как заюзать эвенты для вызова диалога настроек плагинов :) [12:27:30] <slavazanko/w> спрыгую, короче, назад в свой DEV_new_vfs [12:29:16] <slavazanko/w> z gjlgeibk/ gthtbvtyjdfk 'dtyns [12:29:23] <slavazanko/w> я подпушил. переименовал эвенты [12:31:17] BanderOS зашёл в конференцию [12:34:58] <slavazanko/w> а отдельное окно. наверное, было бы вариантом... [12:35:08] <slavazanko/w> дабы меню не засорять [12:37:53] <il.smind > slavazanko/w: как спрыгиваю? [12:38:03] <slavazanko/w> нуачо [12:38:10] <slavazanko/w> я свою часть договора выполнил? [12:38:15] <il.smind > не надо срыгивать! мне надо ну ваще край! [12:38:34] <slavazanko/w> тебе что ещё осталось надо? [12:39:15] <slavazanko/w> сам диалог нарисовать? [12:41:27] <slavazanko/w> andrew_b: может, переделать эвенты, чтобы обработчики возвращали не TRUE/FALSE, а EVENT_CONTINUE_PROCESSING и EVENT_STOP_PROCESSING? [12:41:27] <il.smind > ща... [12:42:07] <andrew_b> slavazanko/w: нууу... [12:42:17] <slavazanko/w> в клинапном бранче и попозже. если что [12:42:29] <andrew_b> А какие ещё варианты кроме возможны? [12:42:44] <slavazanko/w> никаких. но TRUE/FALSE как-то неговорливо... [12:44:26] <slavazanko/w> я к тому. что исходник должен сам петь про то, что он там делает, без необходимости держать в голове логику всего и вся [12:50:11] <slavazanko/w> il.smind : ну что там? на сон сморило? [12:50:17] BanderOS вышел из конференции [12:50:32] <il.smind > slavazanko/w: есть чуток [12:50:36] <il.smind > собирается [12:51:45] <slavazanko/w> Кстати, по поводу "Надо делать подменю.": теперь у пунктов меню появился тип... [12:52:04] <slavazanko/w> и union [12:52:07] <andrew_b> Да. Я понял. [12:54:05] BanderOS зашёл в конференцию [13:02:52] BanderOS вышел из конференции [13:06:07] BanderOS зашёл в конференцию [13:17:58] <il.smind > собрал [13:18:27] <il.smind > о афигенно мне пока больше и не надо [13:20:22] <il.smind > как этой магией то пользоваться то? [13:20:24] <il.smind > plugin_name_for_config_dialog [13:21:40] <il.smind > slavazanko/w: Эй [13:21:44] <il.smind > Человек! [13:21:58] <slavazanko/w> ? [13:22:28] <slavazanko/w> ну как пользоваться.. в sftpfs_plugin_show_config_dialog рисуй свой диалог [13:22:33] <slavazanko/w> и всё. больше ничего не надо [13:22:36] <il.smind > каждый vfs плагин [13:22:46] <slavazanko/w> зачем акждый? [13:22:57] <slavazanko/w> не надо каждый. Только те. которым нуже диалог [13:23:22] <il.smind > да [13:23:35] <il.smind > каждый плагим может, но не должен [13:23:40] <il.smind > да? [13:23:47] <slavazanko/w> не должен [13:23:49] <slavazanko/w> да [13:24:32] <il.smind > там в настройках можно задать префикс [13:24:42] <slavazanko/w> а plugin_name_for_config_dialog() не трожь. там всё уже написано [13:24:45] <il.smind > вот только вопрос где хранить [13:25:02] <slavazanko/w> ну.. хранить там. где и сейчас [13:25:11] <il.smind > нигде? [13:25:13] <slavazanko/w> а префикс в настройках не айс задавать [13:25:18] <slavazanko/w> почему нигде? [13:25:19] <il.smind > еще как айс [13:25:23] <slavazanko/w> vfs_sftpfs_ops.prefix = "sftp:"; [13:25:27] <slavazanko/w> не айс [13:25:27] <il.smind > да [13:25:34] <slavazanko/w> конфликты? [13:25:47] <il.smind > vfs_sftpfs_ops.prefix = plugin_prefix; [13:26:19] <il.smind > таймаут [13:26:30] <il.smind > slavazanko/w> конфликты? проверить можно? [13:26:34] <slavazanko/w> да. а plugin_prefix надо будет потом где-то g_free() делать [13:26:38] <slavazanko/w> проверить можно [13:26:54] <il.smind > это реально опросить подключенные? [13:27:38] <il.smind > slavazanko/w: ну про префикс может и не надо... [13:27:41] <slavazanko/w> lib/vfs/vfs.c:119 vfs_prefix_to_class (char *prefix) [13:27:47] <slavazanko/w> да, префикс не надо [13:29:35] <slavazanko/w> кстати говоря, видишь в init_sftpfs (void) код по добавлению событий? [13:29:46] <slavazanko/w> mc_event_add ("vfs","plugin_show_config_dialog", sftpfs_plugin_show_config_dialog, NULL, NULL); [13:29:53] <il.smind > /* some actions here */ здесь вызвать диалог? [13:30:07] <il.smind > slavazanko/w: твой вижу [13:30:35] <slavazanko/w> по идее. все функции должны быть таким образом добавлены. не vfs_sftpfs_ops.fstat = sftpfs_fstat; а mc_event_add ("vfs","fstat", sftpfs_fstat, NULL, NULL); [13:30:43] <slavazanko/w> > здесь вызвать диалог? да [13:31:09] <andrew_b> mc_event_add ("vfs", Не айс. MCEVENT_GROUP_VFS [13:31:21] <il.smind > slavazanko/w> по идее. все функции должны быть таким образом добавлены. не vfs_sftpfs_ops.fstat = sftpfs_fstat;
а что скажет Андрейка? [13:31:21] <slavazanko/w> понято [13:31:28] <il.smind > уже сказал [13:33:25] <il.smind > мне нет [13:33:31] <il.smind > я ничо не понял [13:33:42] <il.smind > ничего пока не менять? [13:33:48] <slavazanko/w> нет, не меняй [13:33:52] <slavazanko/w> это ак. планы на будущее [13:34:17] <slavazanko/w> когда VFS-плагины отпочкуются от тела mc [13:34:27] <il.smind > ясно [13:34:29] <il.smind > а... [13:34:37] <il.smind > где хранить то настройки? [13:35:44] <il.smind > ~/.config/mc [13:35:59] <slavazanko/w> предлагаю в mc_config_get_path() + "/vfs/" + vfs_ops.name [13:36:02] <il.smind > sftpfs.ini [13:36:20] <slavazanko/w> mc_config_get_path() + "/vfs.d/" + vfs_ops.name+".ini" [13:36:25] <slavazanko/w> как-то так [13:37:01] <il.smind > зачем усложнять ? [13:37:11] <il.smind > /vfs.d/ зачем? [13:37:25] <il.smind > я не против но смысл? [13:37:27] <slavazanko/w> каталог настроек. хошь в одну кучу всё свалить? [13:37:40] <il.smind > дак там 3 файла [13:37:56] <il.smind > будет 10 млагинов не многое изменится [13:38:02] <andrew_b> Не надо всюду пихать .d [13:38:13] <slavazanko/w> ну ладно. уболтали [13:38:22] <il.smind > да и .d мне тоже не понравилось [13:39:00] <il.smind > mc_config_get_path() + "/vfs/" + vfs_ops.name+".ini" ? [13:39:14] <slavazanko/w> ну давай так [13:39:16] <il.smind > или mc_config_get_path() + "/vfs_ops.name+".ini" [13:39:23] <il.smind > slavazanko/w> ну давай так ок [13:39:32] <il.smind > andrew_b: не пропив? [13:39:38] <il.smind > andrew_b: не против? [13:39:55] <slavazanko/w> оговорка на пять с плюсом :) [13:40:33] <andrew_b> Без каталога vfs? [13:40:45] <andrew_b> Давайте с каталогом. [13:41:28] <il.smind > ок [13:42:11] BanderOS вышел из конференции [14:14:14] andrew_b вышел из конференции [15:09:37] iNode вышел из конференции [15:40:00] il.smind вышел из конференции [16:37:06] andrew_b зашёл в конференцию [16:52:17] andrew_b вышел из конференции [17:36:13] andrew_b зашёл в конференцию [18:23:21] il.smind . зашёл в конференцию [19:30:25] andrew_b вышел из конференции [21:10:37] slavazanko/h вышел из конференции [21:12:41] slavazanko/h зашёл в конференцию