Материал из Tkabber Wiki
Хуки
"Хуком" в Ткаббере называется некоторое событие (условия наступления которого строго оговорены и обычно отражены в названии хука), с которым связаны обработчики данного события. Некоторые события происходят лишь однократно в ходе работы Ткаббера (например, "выход из программы"), другие — многократно (например, "обработка нового входящего сообщения").
Механизм хуков предоставляет интерфейс для закрепления обработчиков за соответствующими хуками. В качестве обработчиков выступают скрипты1.
С каждым обработчиком связан приоритет, который определяет очерёдность выполнения данного обработчика по отношению к остальным обработчикам данного хука. Очерёдность выполнения обработчиков с одинаковым приоритетом не определена.
Приоритет обработчика задаётся в виде целого числа. Меньшее число означает более высокий приоритет; обработчики вызываются в порядке уменьшения приоритета (увеличения соответствующих чисел).
Если приоритет не указан явно, обработчик получает приоритет по умолчанию, который равен 502.
Сделать: написать про "return stop"
Ход загрузки Ткаббера
Процесс wish:
- Читает стартовый (главный) модуль Ткаббера, который:
- Грузит модуль, реализующий механизм работы с хуками.
- Определяет хуки postload_hook и finload_hook; вешает на каждый хук по обработчику: процедуру postload на postload_hook и finload — на finload_hook.
- Если определена переменная окружения TKABBER_SITE_CONFIG, читает файл с названием, хранящимся в этой переменной окружения.
- Читает конфиг пользователя — ~/.tkabber/config.tcl.
- Грузит модуль, реализующий механизм работы с базой данных настроек (customize).
- Этот модуль регистрирует обработчик хука postload_hook с приоритетом 60. Задача обработчика — прочитать настройки Ткаббера из файла ~/.tkabber/custom.tcl.
- Загружает плагины сайта.
- Загружает плагины пользователя.
- Выполняет зарегистрированные на данный момент обработчики хука postload_hook (при этом читается содержимое базы данных настроек).
- Загружает модуль iface.tcl, который Сделать: написать
- Выполняет обработчики хука finload_hook.
- Переходит к выполнению главного цикла событий Tk, то есть начиная с этого момента загрузка Ткаббера завершена.
Следствия
1 Чтобы не забивать голову, достаточно считать, что скрипт это
самостоятельный "кусок кода", то есть нечто такое, что интерпретатор тикля
может "выполнить". Главное условие, которе должно соблюдаться при написании
скрипта: он должен представлять собой
одно слово (word) в терминах тикля; поэтому
многострочный скрипт обычно заключают в фигурные скобки { }
, т.к. они как раз
выполняют группировку текста в слово.
2 Приоритет, равный 100, обычно назначается "обработчику по умолчанию" ("fall-through handler"). Сделать: написать -- зачем