вторник, 8 декабря 2009 г.

Управление кодировкой файла при работе с QBzr (GUI для bzr)

QBzr — это кросс-платформенный GUI плагин для bzr, использующий библиотеку Qt4/PyQt4. Мы рассмотрим вопрос управления кодировкой файлов для их корректного отображения в окнах QBzr.

QBzr и кодировки

Поскольку [Py]Qt4 ориентирована на использование unicode для отображения текстовых данных, то возникает небольшая проблема с файлами, содержащими неанглийские тексты (например, русский или японский). Для корректного отображения таких текстов QBzr необходимо знать кодировку, в которой был сохранен текст.

По умолчанию, QBzr предполагает, что текст имеет кодировку UTF-8 (с автоматическим переключением на Latin-1, если текст невозможно отобразить как UTF-8). Кодировка UTF-8 довольно популярна и используется на многих современных дистрибутивах Linux и Mac. Однако на Windows часто используется кодировка ANSI (например, cp1251 для русского текста), а на старых платформах — исторически сложившиеся кодировки (например, koi8-r для русского текста). Поэтому некоторым пользователям приходится указывать кодировку вручную одним из 3х способов:
  • указать кодировку в командной строке
  • указать кодировку в конфигурационном файле
  • указать кодировку непосредственно в диалоговом окне с отображаемым текстом
Рассмотрим эти методы подробнее.

Опция командной строки

Большинство команд, непосредственно отображающих содержимое файлов, таких как qdiff, qannotate, qcat и qviewer, имеют опцию командной строки --encoding. Эта опция позволяет напрямую задать кодировку файла из набора поддерживаемых библиотеками Python (полный список). Часто используемые кодировки для русского языка:
  • cp1251 (Windows ANSI)
  • cp866 (DOS/OEM)
  • koi8-r (Unix)
Для украинского языка аналогично: cp1251, cp866, koi8-u.

Настройки в конфигурационном файле

Кодировка, указанная опцией --encoding, либо выбранная непосредственно (см. ниже), сохраняется в конфигурационном файле текущей ветки (файл .bzr/branch/branch.conf) как опция:
encodng = xxx
Сохраненная кодировка будет использоваться по умолчанию при следующем запуске соответствующей команды QBzr.

Если вы постоянно работаете с одной и той же кодировкой (например, cp1251), то ее можно указать как кодировку по умолчанию для всех веток, прописав в главном конфигурационном файле bazaar.conf:
[DEFAULT]
email = Vasya Pupkin <vasya@pupkin.ru>
encoding = cp1251
Более тонкой настройки можно добиться при использовании конфигурационного файла locations.conf.

Эти настройки будут использоваться для отображения всех файлов. К сожалению, по состоянию на декабрь 2009, bzr и qbzr не имеют возможности сохранять выборочные настройки для отдельных файлов. Однако, такая функциональность может появиться в будущем.

Непосредственное управление

Благодаря Наоки Инада (Naoki INADA) в QBzr 0.17 появилась возможность управлять кодировкой файла прямо из соответствующих диалоговых окон. В окнах для отображения diff, annotate, cat появился элемент (выпадающий список), позволяющий выбрать нужную кодировку. Это очень полезное улучшение, особенно для пользователей TortoiseBzr и Bazaar Explorer, поскольку эти программы никак не передают данные о кодировках в диалоговые окна QBzr.

Diff:




Annotate:





Выбранная вами кодировка также сохраняется в конфигурационном файле branch.conf для вашей ветки, и будет использована при последующих запусках QBzr в этой ветке.

Новая версия QBzr 0.17 с показанным элементом выбора кодировок будет выпущена в середине декабря 2009. Однако уже сейчас эти улучшения доступны в ветке trunk2a.

4 комментария:

  1. А нужен ли этот выпадающий список? У большинства разработчиков, как уже было отмечено, всё в UTF-8. А если всё-таки нужен, то неплохо было бы иметь возможность отключать его -- qbzr мне как раз очень симпатичен тем, что является хорошим дополнением к CLI интерфейс -- ничего не отвлекает от работы.

    ОтветитьУдалить
  2. Вот же вредный какой. Нужен список, нужен. Он совсем не мешает и не отвлекает -- запусти и убедись.

    ОтветитьУдалить
  3. Подскажите, как можно настроить bzr для определенных файлов вызов других программ для просмотра diff или merge?

    ОтветитьУдалить
  4. для отдельных файлов настроить нельзя в силу внутренних ограничений. для QBzr в конфигурации bzr qconfig можно задать свои программы для сравнения или merge и затем вызывать нужную программу через соответствующий элемент управления в самом окне qdiff или qconflicts. Пока что так.

    ОтветитьУдалить