Tkabber Wiki

Загрузка настроек
Login

Материал из Tkabber Wiki

Хуки

"Хуком" в Ткаббере называется некоторое событие (условия наступления которого строго оговорены и обычно отражены в названии хука), с которым связаны обработчики данного события. Некоторые события происходят лишь однократно в ходе работы Ткаббера (например, "выход из программы"), другие — многократно (например, "обработка нового входящего сообщения").

Механизм хуков предоставляет интерфейс для закрепления обработчиков за соответствующими хуками. В качестве обработчиков выступают скрипты1.

С каждым обработчиком связан приоритет, который определяет очерёдность выполнения данного обработчика по отношению к остальным обработчикам данного хука. Очерёдность выполнения обработчиков с одинаковым приоритетом не определена.

Приоритет обработчика задаётся в виде целого числа. Меньшее число означает более высокий приоритет; обработчики вызываются в порядке уменьшения приоритета (увеличения соответствующих чисел).

Если приоритет не указан явно, обработчик получает приоритет по умолчанию, который равен 502.

(!) Сделать: написать про "return stop"

Ход загрузки Ткаббера

Процесс wish:

  1. Читает стартовый (главный) модуль Ткаббера, который:
    1. Грузит модуль, реализующий механизм работы с хуками.
    2. Определяет хуки postload_hook и finload_hook; вешает на каждый хук по обработчику: процедуру postload на postload_hook и finload — на finload_hook.
    3. Если определена переменная окружения TKABBER_SITE_CONFIG, читает файл с названием, хранящимся в этой переменной окружения.
    4. Читает конфиг пользователя~/.tkabber/config.tcl.
    5. Грузит модуль, реализующий механизм работы с базой данных настроек (customize).
      1. Этот модуль регистрирует обработчик хука postload_hook с приоритетом 60. Задача обработчика — прочитать настройки Ткаббера из файла ~/.tkabber/custom.tcl.
    6. Загружает плагины сайта.
    7. Загружает плагины пользователя.
    8. Выполняет зарегистрированные на данный момент обработчики хука postload_hook (при этом читается содержимое базы данных настроек).
    9. Загружает модуль iface.tcl, который (!) Сделать: написать
    10. Выполняет обработчики хука finload_hook.
  2. Переходит к выполнению главного цикла событий Tk, то есть начиная с этого момента загрузка Ткаббера завершена.

Следствия


1 Чтобы не забивать голову, достаточно считать, что скрипт это самостоятельный "кусок кода", то есть нечто такое, что интерпретатор тикля может "выполнить". Главное условие, которе должно соблюдаться при написании скрипта: он должен представлять собой одно слово (word) в терминах тикля; поэтому многострочный скрипт обычно заключают в фигурные скобки { }, т.к. они как раз выполняют группировку текста в слово.

2 Приоритет, равный 100, обычно назначается "обработчику по умолчанию" ("fall-through handler"). (!) Сделать: написать -- зачем