Использование UTF8 в FVWM
Материал из Gentoo Linux Wiki
Содержание |
[править] Введение
Вас достали глюки с FVWM при установленной локали ru_RU.UTF-8? Вам надоели сообщения в консоли Invalid byte sequence during conversion from UTF-8 to ISO-8859-1? Тогда эта статья для вас!
Далее будут описаны действия по шагам, для устранения проблемы. Вам предлагается вначале сделать шаг 1. Потом, если он не принесёт должного результата, переходите к следующему шагу и т.д.
[править] Шаг 1
Возьмите ПРАВИЛЬНЫЙ файл XLC_LOCALE и скопируйте его в /usr/share/X11/locale/en_US.UTF-8/ и /usr/share/X11/locale/ru_RU.UTF-8/ (если, конечно, вы ещё не сделали это). Этот файл можно взять либо отсюда: HOWTO_ru_RU.utf8_Gentoo_way, либо по одной из следующих ссылок: chronos.nsu.ru/.../XLC_LOCALE, gentoo.zugaina.org/.../XLC_LOCALE. Перезапустите иксы.
| Предупреждение: Только не пользуйтесь ebuild'ами с вышеназванных сайтов - в них неправильно прописаны пути |
[править] Шаг 2
В файлах настройки fvwm приведите все шрифты примерно к следующему виду:
Font "StringEncoding=UTF-8:xft:Verdana:pixelsize=11:encoding=iso10646-1"
Здесь важен параметр encoding=iso10646-1
[править] Шаг 3
Это решение взято отсюда: FVWM bugs: FVWM's Default Charset
[править] Отмазка
Это решение я считаю грубым хаком. Но главное: оно действует!
Можно было бы вместо длинного описания, просто добавить одну строчку в ebuild. Но, во-первых, я не уверен, что данное решение подойдёт для всех (в частности для нерусскоязычных пользователей). Во-вторых, я хочу, чтобы вы понимали, что делали.
[править] Подготовка
Для начала мы должны убедиться, что FVWM неправильно выставила нашу локаль. Для этого надо нашему оконному менджеру дать команду
PrintInfo Locale 1
Чтобы запустить эту команду нужно загрузить модуль FvwmConsole. У меня в меню есть пункт "Console". Если у вас такого нет, то добавьте его сами, дописав в конфиг меню:
+ "FvwmConsole" Module FvwmConsole
После запуска FvwmConsole мы набираем там вышеозначенную команду PrintInfo Locale 1 и смотрим её вывод в файле ~/.xsession-errors. Вот частичный вывод того, что должно быть:
| Code: FVWM info on locale: |
locale: ru_RU.UTF-8, Modifier: Default Charset: X: ISO8859-1, Iconv: ISO-8859-1, Bidi: No XOM Charsets: ISO8859-1 ISO8859-1 JISX0208.1983-0 KSC5601.1987-0 GB2312.1980-0 JISX0201.1976-0 ISO10646-1 |
Что мы здесь видим? Первое, это то что Default Charset выставлено не правильно. Второе: мы видим список XOM Charsets, из которого программа и выбирает Default Charset. Программа тупо выбирает первый элемент, нам же нужно, чтобы она выбирала последний.
Этот выбор делается уже в процессе компиляции в модуле libs/FlocaleCharset.c. Там есть такая строчка:
FLCXOMCharset = FLCXOMCharsetList[0]
Обратите внимание, что первому элементу списка соответсвует нулевое значение массива FLCXOMCharsetList, а последнему - FLCXOMCharsetList_num-1. Также хочу заметить, что по приведённой выше ссылке на FVWM Bug Tracking System допущена опечатка: там переменная содержащая количество элементов массива написана как FLCXOMCharset_num, а на самом деле она называется FLCXOMCharsetList_num. Хотя, может быть это и не опечатка, а так эта переменная называлась в ранних версиях FVWM. В любом случае, когда будете править исходники, не поленитесь подняться на несколько строчек выше и посмотреть на правильное название переменной.
Теперь, когда мы знаем нашего врага в теории, пора переходить к конкретным действиям.
[править] Действия
Далее будет предполагаться, что у нас FVWM версии 2.5.16.
1. Переходим в каталог с ебилдом и распаковываем исходники:
# cd /usr/portage/x11-wm/fvwm/ # ebuild fvwm-2.5.16.ebuild unpack
2. Открываем файл libs/FlocaleCharset.c в нашем любимом редакторе
# nano -w /var/tmp/portage/fvwm-2.5.16/work/fvwm-2.5.16/libs/FlocaleCharset.c
находим там такую строчку
FLCXOMCharset = FLCXOMCharsetList[0]
и исправляем её на
FLCXOMCharset = FLCXOMCharsetList[FLCXOMCharsetList_num-1]
Сохраняем изменения.
3. Далее, комплируем и устанавливаем как обычно:
# ebuild fvwm-2.5.16.ebuild compile # ebuild fvwm-2.5.16.ebuild install # ebuild fvwm-2.5.16.ebuild qmerge # ebuild fvwm-2.5.16.ebuild clean
Вот и всё!
[править] Portage Overlay
А теперь как сделать все это, не заморав белы рученьки :).
Скопируйте содержимое папки /usr/portage/x11-wm/fvwm в оверлей:
# cp -R /usr/portage/x11-wm/fvwm /usr/local/portage/x11-wm/fvwm
Далее создайте патч со следующим содержанием:
--- /usr/portage/x11-wm/fvwm/fvwm-2.5.16.ebuild 2006-01-15 18:06:11.000000000 +0000
+++ /usr/local/portage/x11-wm/fvwm/fvwm-2.5.16.ebuild 2006-03-17 09:59:30.000000000 +0000
@@ -65,6 +65,12 @@
# fixing #51287, the fvwm-menu-xlock script is not compatible
# with the xlockmore implementation in portage.
cd ${S}; epatch ${FILESDIR}/fvwm-menu-xlock-xlockmore-compat.diff
+
+ cd ${S}/libs;
+ ebegin " Enabling UTF-8 support"
+ sed -ie 's:FLCXOMCharset = FLCXOMCharsetList\[0\]:FLCXOMCharset = FLCXOMCharsetList\[FLCXOMCharsetList_num-1\]:g' \
+ FlocaleCharset.c
+ eend $?
}
src_compile() {
Теперь патчим:
patch -p0 /usr/local/x11-wm/fvwm/fvwm-2.5.16.ebuild <имя diff-файла>
Далее генерируем дайджесты для исправленного ebuild и все, можно устанавливать.
