Материал из Tkabber Wiki
Содержание
- 1 Вместо предисловия
- 2 Введение
- 3 Места скопления настроек
- 4 Где лежат файлы конфигурации?
- 5 Файл custom.tcl — руками не трогать!
- 6 Файл config.tcl — швейцарский нож для Ткаббера
- 7 XRDB! как много в этом слове...
Вместо предисловия
Эта статья является попыткой объяснить новообращённым ткабберистам и ткабберинам азы настройки Ткаббера и — главное — объяснить, как именно работает механизм его конфигурирования. Впрочем, текст содержит далеко не только азы, но и достаточно глубокие погружения в детали. При этом авторами были приложены некоторые усилия для того, чтобы организовать текст в каждом разделе по нарастанию сложности (это так авторы сняли с себя ответственность за качество материала).
Несмотря на то, что по возможностям конфигурирования Ткаббер может спокойно заткнуть за пояс большинство аналогичных программ, его подход к решению данной проблемы сродни пресловутому "Unix-way": в руки пользователю даётся некоторое количество рычагов различной формы, конструкции и сложности, умело дёргая за которые, пользователь может добиться весьма многого. И даже странного.
С другой стороны, подобная свобода часто (и закономерно) пугает людей (особенно новичков) — хочется некой накатанной схемы. Часто также пользователям недостаёт элементарного знания системы, с которой они работают.
Часть описанных проблем будет препарирована на данной странице.
Введение
Ткаббер написан на языке Tcl (произносится "тикл" или "тикль") с использованием "родного" для тикля графического тулкита Tk. Связка Tcl/Tk является переносимой, и это означает, что Ткаббер работает как минимум под различными вариантами Unix, под Win32 и под MacOS (справедливости ради надо отметить, что пользователям последней системы придётся приложить для этого куда больше усилий; во всяком случае, нам пока неизвестны случаи работы Ткаббера на "маках" с полпинка).
Также это означает, что тщетно ждать от Ткаббера наличия некоего "специального" конфигуратора для <впишите сюда вашу любимую ОС>. С другой стороны, в плане хранения конфигурационных файлов у перечисленных операционных систем больше общих черт, чем различий; поэтому владея таким понятием как "домашний каталог пользователя", можно чувствовать себя уверенно при конфигурировании Ткаббера на любой из систем, в которых он работает.
И ещё: существует (неправильное) мнение, что для того, чтобы работать с Ткаббером, нужно редактировать какие-то файлы конфигурации. Это неверно — для конфигурирования 90% того, что нужно "обычному пользователю", достаточно встроенного в Ткаббер графического конфигуратора. Проблемы, которые нельзя решить этим путём (например, "кривые шрифты"), обычно являются результатом недоделок в настройке операционной системы.
Сделать: плавно подвести к идее "замочи свой ~/.tkabber, потом — разбирайся"
Места скопления настроек
Tkabber использует четыре источника для получения сведений о своей конфигурации:
- Настройки по умолчанию — то, что "прибито гвоздями" к коду, и используется, если нет соответствующих настроек из других источников.
- Файл custom.tcl в каталоге с файлами настроек (см. ниже). Этот файл создаётся Ткаббером и содержит те настройки, которые пользователь может изменять при помощи окна конфигурации Ткаббера.
- Файл config.tcl, находящийся там же. Это файл содержит код на языке Tcl, который выполняется Ткаббером при старте, и позволяет делать наиболее тонкую настройку.
- X Resource DataBase (XRDB) — на Unix-системах — база данных X-сервера, хранящая информацию о конфигурации различных элементов управления GUI.
Важно понимать, что в принципе Ткаббер не нуждается ни в каких настройках, кроме "встроенных", из пункта 1, которые есть всегда. А это означает, что ничего страшного не произойдёт, если вы просто сотрёте (или переместите куда-нибудь до поры) файлы текущей конфигурации. Этим нельзя "испортить" Ткаббер.
На заметку: Подобный подход может помочь "в борьбе" с некоторыми дистрибутивами ткаббера, в которых по умолчанию подключены "навороченные" файлы конфигурации, которые полезны для изучения, но "вываливают" на неподготовленного пользователя слишком много информации.
Ещё важнее понимать, что каталог с файлами настроек — единственное место в системе, которое Ткаббер использует для управления своей конфигурацией (это не совсем верно для случая XRDB, но об этом ниже). То есть никакого реестра или других системно-зависимых средств. А благодаря способности тикля читать текстовые файлы независимо от используемых символов перевода строки (а они разные во всех трёх классах систем, на которых работает тикль), вам достаточно просто скопировать каталог конфигурации на другую машину, а тикль с Ткаббером позаботятся об остальном. И это означает, что вы можете "таскать за собой" этот каталог не только с компьютера на компьютер, но и между разными операционными системами!
Проблемы при переносе могут возникнуть только в том случае, если вы используете не-ASCII символы (например, русские) в значениях параметров, которые устанавливаются в файле config.tcl. Подробнее об этом — в секции, посвящённой этому файлу.
На заметку: те из читателей, для которых слова "система контроля версий" — не пустой звук, могут поразмыслить какие удобства можно получить при использовании этого подхода, учитывая, что клиенты для популярных СКВ существуют для каждой из систем, на которых работает Ткаббер.
Следующий раздел обсуждает в деталях где и как Ткаббер ожидает увидеть каталог со своими настройками.
Где лежат файлы конфигурации?
Короткий ответ: они находятся в подкаталоге .tkabber домашнего каталога пользователя.
Если имя .tkabber — фиксированно, то с последним всё не так просто. Точнее, просто, но допускает некоторые вариации.
Для начала полезно запомнить, что при операциях с файлами в Tcl домашний каталог пользователя обозначается символом "~" (тильда), который имеет такой же смысл, как и "~" в командных оболочках Unix-систем (что неудивительно, т.к. Tcl был "рождён" в Unix).
При операциях с файлами тильда "раскрывается" в полный путь до вашего домашнего каталога. К примеру, на моей домашней системе Debian GNU/Linux она раскрывается в
/home/kostix
а на моей рабочей станции Windows XP она "скрывает в себе"
C:\Documents and Settings\Дормидонт Евлампиевич
Это означает, что в первом случае файлы конфигурации Tkabber хранятся в каталоге
/home/kostix/.tkabber
а во втором — в каталоге
C:\Documents and Settings\Дормидонт Евлампиевич\Application Data\Tkabber
Системы Win9x/WinME являются однопользовательскими, и по причинам, которые будут показаны ниже, каталог настроек Ткаббера на таких системах находится в корне первого логического диска:
C:\.TKABBER
Тильда может использоваться при указании различных каталогов в настройках Tkabber'а (например, история чатов может храниться в каталоге ~/.tkabber/logs). Так же вам могут "показать" подобный каталог в ходе диалога в [комнате обсуждения Ткаббера] — не стоит удивляться: вам показывают "обобщённый" вариант, который (должен быть) понятен пользователям любой ОС, в которой работает Ткаббер.
Теперь — о более сложном.
Тильда: большие возможности маленького символа
На самом деле, интерпретатор тикля "раскрывает" тильду, пользуясь информацией из нескольких (проверенных) источников.
1. Во-первых, тикль сверяется с переменной окружения HOME. На Unix-системах эта переменная есть всегда (за исключением клинических случаев). В Windows — напротив — её по умолчанию нет. Если такая переменная есть, тикль использует её значение, и никакие силы не заставят его в этом случае использовать что-то другое.
Такое поведение удобно для того, чтобы заставить Ткаббер использовать какой-нибудь странный каталог для своей конфигурации, что может понадобиться, к примеру, при изготовлении системы "джаббер клиент на флэшке".
Этот же аспект используется дистрибутивом Tkabber-Pack, который в скрипте запуска Ткаббера устанавливает переменную HOME в значение "." (точка, т.е. "текущий каталог"), перемещая таким образом каталог .tkabber "к себе".
2. Во-вторых, если переменная окружения HOME не найдена, тикль использует следующий набор правил:
2.1. Unix:
Сделать: Написать про Unix
2.2. Windows:
Под Windows интерпретатор тикля сначала пытается использовать каталог, полученный "склеиванием" значений переменных окружения HOMEDRIVE (имя диска с домашним каталогом) и HOMEPATH (путь на этом диске до домашнего каталога). Эти переменные по умолчанию есть на любой Windows системе класса NT, но их нет в Win9x/WinME, так как и понятие "домашний каталог пользователя" в них не завезли.
Посмотреть значения этих переменных в Windows 2000 и выше можно, запустив оболочку командной строки cmd.exe (это можно сделать, выбрав "Пуск → Программы → Стандартные → Командная Строка"), и выполнив там:
set | findstr HOME
на моей системе это выглядит так:
C:\> set | findstr HOME HOMEDRIVE=C: HOMEPATH=\Documents and Settings\Дормидонт Евлампиевич
Команда findstr была здесь использована для фильтрации вывода команды set.
В Unix-системах эквивалентом findstr является программа grep (на самом деле это findstr является ограниченным эквивалентом grep). В Windows NT и Win9x/WinME нет команды findstr, так что придётся просматривать всю информацию глазами (или установить grep для Win32).
Кроме того, пользователи Win9x/WinME лишены даже cmd.exe и вынуждены запускать command.com.
На заметку: Команда set вообще очень удобна для изучения состояния переменных окружения в системе. Будучи запущена без параметров (как в примере выше), она выводит пары ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. Для ограничения её вывода можно применять findstr или grep как описано выше.
Если же нет и переменных HOMEDRIVE/HOMEPATH, тикль заламывает руки и использует в качестве домашнего каталога пользователя каталог C:\**. Простенько и со вкусом. В системах Win9x/WinME эти переменных окружения отсутствуют так же, как и **HOME, и это означает, что в них каталогом с настройками Ткаббера является "C:\.TKABBER".
Не исключено, что прочитав про весь этот кошмар, доходчивый читатель задастся вопросом: "а почему бы не прописать себе в окружение переменную HOME с правильным значением раз и навсегда?". И будет прав. Такая настройка используется многими, так как облегчает жизнь и многим другим программам, знающим о существовании этой переменной окружения, например, редактору Vim и клиенту системы Subversion.
Сделать это весьма просто: откройте свойства "Моего Компьютера", щёлкнув по его иконке правой кнопкой и выбрав "Свойства", затем выберите закладку "Дополнительно" и нажмите на появившейся форме кномку "Переменные среды" (спасибо переводчикам, что не "вторника").
В появившемся окне есть два списка переменных: вверху — для текущего пользователя, внизу — глобальных для системы. Нас интересует верхний. Нажмите кнопку "Создать" и введите:
- Имя переменной: HOME
- Значение переменной: %USERPROFILE% (или %HOMEDRIVE%/%HOMEPATH%)
Конструкция
%ИМЯ_ПЕРЕМЕННОЙ%
означает: "подставить значение из переменной с именем ИМЯ_ПЕРЕМЕННОЙ".
Закройте оба диалога, нажимая "ОК", и выполните команду для вывода переменных окружения ещё раз в новой оболочке (т.к. старая не "увидит" сделанных вами изменений). Теперь вывод должен выглядеть примерно так:
HOME=C:\Documents and Settings\Дормидонт Евлампиевич
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\Дормидонт Евлампиевич
Вуаля!
Внимание: Замечено, что на разных версиях Windows встречаются различные комбинации переменных USERPROFILE, HOMEDRIVE и HOMEPATH (да, c'est la vie!). К примеру, авторам встречалась Windows NT 4.x, на которой были все три переменные, но HOMEDRIVE и HOMEPATH в комбинации давали полную чушь, в то время как USERPROFILE содержала достаточно вменяемое значение. В Windows 2000 и Windows XP переменная USERPROFILE почти всегда содержит правильное значение, однако, опять же, авторам встречались машины, на которых эта переменная отсутствовала.
Выводов из этого — два:
- set — ваш друг!
- в крайнем случае всегда можно записать в HOME непосредственное значение. Это даже может оказаться полезным — установить "необычное" значение этой переменной "в глобальном масштабе", например, для случая "набор программ на винчестере в USB-салазках".
На заметку: Имейте в виду, что подстановки значений в переменных окружения Windows выполняются только один раз, то есть, говоря проще, нельзя определить переменную, которая будет ссылаться на другую переменную, которая будет ссылаться на третью — подстановка этой третьей переменной выполнена не будет.
Напоследок — ещё один трюк для сильных духом.
Можно легко узнать что думает тикль по поводу вашего домашнего каталога (и при случае внушит это Ткабберу), выполнив заклинание "file norm ~" без кавычек в любой оболочке тикля, установленной в вашей системе.
Очень вероятно, что у вас как минимум есть wish.exe или wish84.exe, так же, возможно, у вас есть tclsh.exe. Если же у вас есть tkcon.tcl, и вы об этом знали, то вам, скорее всего, не стоит тратить время на чтение этого руководства. Для нашей благородной цели сгодится любая из указанных программ.
С другой стороны, если у вас Ткаббер в виде tclkit или starpack, то вам, скорее всего, не повезло (т.к. подобный дистрибутив это "вещь в себе"), но ниже приведено решение и для этого случая. Если же у вас Tkabber Pack, то вы — обладатель урезанного, но "нормального" дистрибутива Tcl/Tk, только находится он там, куда вы установили Tkabber Pack, и указанный wish.exe следует искать именно там.
Итак, запускаем то, что вам удалось обнаружить из приведённого списка и вводим указанную команду. Примерный вид происходящего таков:
% file norm ~
C:/Documents and Settings/Дормидонт Евлампиевич
Внимательные из вас заметят, что в этом выводе — "неправильные" слэши: прямые, а не обратные, как принято в ОС от Microsoft. В этом нет ничего странного: тикль, работая под Windows, оперирует именно "прямыми", "юниксовыми" слэшами, так как Windows на самом деле прекрасно понимает эту нотацию, только умело скрывает это от пользователей.
На заметку: Не лишним также будет заметить, что Ткаббер имеет возможность сам обеспечить вас консолью для ввода команд Tcl (и управления собой, в числе прочего; но эта тема отдельной статьи). В виндовой версии Ткаббера консоль встроена, в *nix у вас должен быть установлен пакет tkcon. Получить оную можно, выбрав опцию "Показать консоль" пункта "Помощь" главного меню Ткаббера.
Это может оказаться полезным для пользователей "упакованных" версий Ткаббера.
Файл custom.tcl — руками не трогать!
Файл custom.tcl это собственность Ткаббера. Ткаббер использует этот файл в качестве постоянного хранилища своих настроек. Ткаббер читает custom.tcl при старте и перезаписывает его при выходе.
Это означает, что хотя и ничего не мешает вам изменить этот файл при помощи любимого текстового редактора (и Ткаббер при следующем старте примет к сведению вашу правку), никто не может гарантировать постоянство сделанных вами изменений.
Кроме того, несмотря на то, что формат этого файла весьма прозрачен, нет никаких гарантий того, что он не изменится в следующей версии Ткаббера.
Посему тем, кто не собирается нарочно копаться во внутренностях Ткаббера, лучше всего относиться к этому файлу как к "чёрному ящику" — в духе времени уважать права Ткаббера на частную собственность.
А ещё лучше — отнеситесь к нему как к трансформаторной будке.
Формат файла custom.tcl
Доскональное понимание формата файла custom.tcl требует определённых знаний по языку Tcl, поскольку данные в нём хранятся в формате, который удобно читать и писать интерпретатору тикля.
С другой стороны, формат можно назвать "дружественным", так как в конце-концов это обычный текст, только "хитро" отформатированный.
Элементы Tcl, которые полезно знать для полного понимания предмета:
Итак, файл custom.tcl:
- Использует кодировку UTF-8
- Является набором строк, каждая из которых представляет собой "правильно сформированный список" с точки зрения языка Tcl.
- Каждый из этих списков состоит из двух элементов:
- Полное имя переменной, представляющей одну из опций конфигурации Ткаббера.
- Значение этой переменной.
Значение переменной само может быть списком, а элементы этого списка, в свою очередь так же могут быть списками. Такая структура может иметь произвольную вложенность.
Вот, к примеру, кусочек (не)типичного файла custom.tcl:
{::ifacetk::roster::options(nested) 1}
{::::loginconf(httpproxy) gates.of.hell.microsoft.com}
Технически этот пример означает:
- Устанавливается истинным (1) значение переменной, заданной ключом "nested" в массиве "options", входящим в пространство имён "::ifacetk::roster".
- Переменная, заданная ключом "httpproxy" в глобальном массиве "::loginconf", устанавливается в значение "gates.of.hell.microsoft.com".
Как видно, имена переменных вполне самоописательны, и могут быть "прочитаны", например: "включить поддержку вложенности для элементов у Tk-виджета, ответственного за отображение списка контактов (ростера)".
Файл config.tcl — швейцарский нож для Ткаббера
Сделать: некоторое введение...
Про этот файл рассказано тут.
Также имеется список готовых "рецептов", поместив которые в config.tcl, можно добиться интересного поведения от Ткаббера. Изучение статьи про config.tcl не нужно для использования рецептов, однако оно очень вам пригодится, если вы захотите реализовать какое-то сложное изменение конфигурации своими руками.
XRDB! как много в этом слове...
Описание XRDB и его связи с "базой данных настроек Tk" вынесено в отдельную статью.