Использование 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 и все, можно устанавливать.

Личные инструменты