LINUX.ORG.RU

utf8 и шрифты в xemacs


0

0

1. Все шрифты (курьеры, люсиды и т.п. ариалы) отображают русские буквы квадратиками. Терминус работает корректно. Как лечить?

2. Как заставить emacs правильно отображать utf-16?
Это два.


> Все шрифты (курьеры, люсиды и т.п. ариалы) отображают русские буквы квадратиками. Терминус работает корректно. Как лечить?

посмотри, прописана ли в этих шрифтах кодировка iso8859-5:

xlsfonts | grep verdana\*iso8859-5

если нет, то можешь либо ее добавить (насколько я помню, для нее encoding писать не надо, можно просто fonts.dir поправить), либо добавить следующие строчки в свой конфиг:

(set-charset-registry 'cyrillic-iso8859-5 "koi8-r")

(set-charset-ccl-program 'cyrillic-iso8859-5 'ccl-encode-koi8-r-font)

кстати, это есть в мануале ;)

> Как заставить emacs правильно отображать utf-16?

для начала научи его правильно _понимать_ уникод ;) В принципе, если особо не заморачиваться, можно юзать пакет Mule-UCS (я так и делаю).

uj2 ★★★
()
Ответ на: комментарий от uj2

> xlsfonts | grep verdana\*iso8859-5

да, с регексом я тут чего-то сглупил :) Должно быть:

xlsfonts | grep нужный_шрифт.\*iso8859-5

uj2 ★★★
()
Ответ на: комментарий от gpg

> Ты уверен, что сказанное тобой относится к utf8?

ты спросил за шрифты -- я ответил за шрифты, ты спросил за юникод -- я ответил за юникод. че еще нужно?

uj2 ★★★
()
Ответ на: комментарий от gpg

На всякий случай поясню, может и правда вышло непонятно.

1. Локаль у меня uft8. Работает почти везде. В емаксе русские буквы выводятся только терминусом, остальные юникодные шрифты выводят вместо них квадраты.

2. При открытии utf16-файла выводится полная хрень. Похоже емакс интерпретирует его как файл в однобайтной кодировке или в utf8.

Чем лечить?

gpg
() автор топика
Ответ на: комментарий от gpg

> Локаль у меня uft8. Работает почти везде. В емаксе русские буквы выводятся только терминусом, остальные юникодные шрифты выводят вместо них квадраты.

Короткий ответ -- ты не сможешь юзать "юникодные шрифты" напрямую.

Длинный ответ. AFAIK для xemacs'а не имеет значения, какая у тебя локаль. Внутри он данные хранит в некоем подобии ISO2022-2. Для отображения символов определенного символьного набора с помощью системы X core fonts используется таблица соответствий символьных наборов регистрам шрифтов. Поэтому я и написал форму: (set-charset-registry 'cyrillic-iso8859-5 "koi8-r"). Естественным образом русский символьный набор отображается в регистр iso8859-5. Для шрифтов с регистром koi8-r и любым другим нужно указывать ccl-программу переконвертации внутреннего представления символов в koi8-r. Отсюда появилась строка: (set-charset-ccl-program ...).

Вот. В принципе, теоретически можно использовать и юникодные шрифты (с регистром iso10646-1). Судя по описанию пакета Mule-UCS, у него есть специальные ccl-генераторы, которые могут сгенерить ccl из любой внутренней кодировки в iso10646-1. Кстати, как раз с этими генераторами я и пытаюсь разобраться. Но как это сделать -- пока мне не представляется ясным.

> 2. При открытии utf16-файла выводится полная хрень. Похоже емакс интерпретирует его как файл в однобайтной кодировке или в utf8.

для этого либо можешь кажен раз мучаться и делать C-x <RET> c utf-16 C-x C-f, либо пропиши UTF-16 как приоритетную кодировку (M-x prefer-coding-system). Как это сделать -- читай мануал по Mule-UCS.

Вообще, в стабильной ветке xemacs'а дела с уникодом обстоят хреново, насколько я могу оценивать ситуацию. Просто в уникоде очень много ньюансов -- комбинирующиеся символы (акценты всякие) вообще невозможно представить при помощи X core fonts, разные виды пробелов, дефисов, правила сопоставления верхнего и нижнего регистра (а это не так просто, скажу я тебе) -- все это есть в Unicode... Насколько ситуация с уникодом обстоит в девелопмент-ветках, я не знаю, это надо у профи спрашивать. Я сам очень жду XEmacs'а, который будет уникодным внутри и снаружи (freetype).

uj2 ★★★
()
Ответ на: комментарий от uj2

> Короткий ответ -- ты не сможешь юзать "юникодные шрифты" напрямую.
В чём принципиальное отличие терминуса?
Насколько я понял по одноимённой книге Столлмана, муле вошёл в состав
емакса чуть ли не в 20 версии. Почему он идёт отдельным пакетом?
Там же написано про поддержку многобайтовых кодировок. Прибрехал старик?

> C-x <RET> c utf-16 C-x C-f
Не работает (правда, в виндовой версии). Потому и спрашиваю.

Про юникод можешь мне не рассказывать. Лучше скажи, в чем отличие emacs
и xemacs?

gpg
() автор топика
Ответ на: комментарий от gpg

> В чём принципиальное отличие терминуса?

в том, что для него, видимо, сгенерен регистр iso8859-5. Проверь:

$ xlsfonts | grep terminus\*iso8859-5

и

$ xlsfonts | grep andale\ mono\*iso8859-5

Первое должно что-то выдавать, второе не должно (судя по твоему описанию ситуации).

> Почему он идёт отдельным пакетом?

Он _не_ идет отдельным пакетом, он встроен в оба emacs'а именно тем, что они оба текст внутри хранят не в однобайтовой кодировке (т.е. не как однобайтовую последовательность), а в многобайтовой, схожей с ISO2022-2.

> Там же написано про поддержку многобайтовых кодировок.

Там есть поддержка многобайтовых кодировок. японские big5, euc, те же unicode-кодировки есть в GNU Emacs 21.4. В XEmacs юникод полностью предоставляется пакетом MuleUCS.

> Не работает (правда, в виндовой версии). Потому и спрашиваю.

не знаю, что там в виндовой версии, у меня виндовой версии нет, сорри.

> Лучше скажи, в чем отличие emacs и xemacs?

буквой. Читай мануал, в двух словах не объяснить. Для твоей ситуации со шрифтами -- различаются тем, что в xemacs нету внешнего интерфейса для fontsets, в общем повторяться я не буду, читай мануалы и сравнивай, 10 различий точно найдешь :))

uj2 ★★★
()
Ответ на: комментарий от uj2

[...]
> $ xlsfonts | grep andale\ mono\*iso8859-5

> Первое должно что-то выдавать, второе не должно (судя по твоему описанию ситуации).
Так и есть (с заменой бэкслэша на точку).
Всё равно не понял, при чём тут кои8 и каким чудом тогда остальные программы умеют отображать правильно.

> Он _не_ идет отдельным пакетом, он встроен в оба emacs'а

Что ты имел в ввиду, когда называл его пакетом?
И что тогда значит
tuhes gpg # emerge -s mule-ucs
Searching... r
[ Results for search key : mule ]
[ Applications found : 1 ]

* app-emacs/mule-ucs
Latest version available: 0.85_rc3
Latest version installed: 0.85_rc3
Size of downloaded files: 723 kB
Homepage: http://www.m17n.org/mule/ http://tats.iris.ne.jp/mule-ucs/
Description: A character code translator.
License: GPL-2
?

>> Не работает (правда, в виндовой версии). Потому и спрашиваю.
> не знаю, что там в виндовой версии, у меня виндовой версии нет, сорри.
Заработало, правда не совсем так как ты написал. Да и оказалось несколько не тем. Супернеудобно.

>> Лучше скажи, в чем отличие emacs и xemacs?
[...]
> читай мануалы и сравнивай, 10 различий точно найдешь
Спасибо, что хоть к исходникам не отослал. Добрый тыю

gpg
() автор топика
Ответ на: комментарий от gpg

знаешь, чувак, я тут уже второй день распинаюсь по странице текста (который руками, между прочим, набираю), и даже спасибы не услышал -- слышу только "объясни-объясни", "почему-почему". Иди читай мануал, там все написано подробно, а я тут не бюро справок.

uj2 ★★★
()
Ответ на: комментарий от uj2

Улыбнуло. Да за что спасибо-то? За какую-то сомнительную невнятность и "иди читай мануал"?
Если не знаешь - стыдиться нечего, всего-то и делов промолчать.
А если желание понтоваться "мудрыми" ответами совсем непоборимо -
будь готов к тому, что понты не проканают.
Расстроил ты меня, чувак, до метеоризма.

gpg
() автор топика
Ответ на: комментарий от gpg

> Если не знаешь - стыдиться нечего, всего-то и делов промолчать.

ну что я могу добавить :)) Добавлю по порядку

> Всё равно не понял, при чём тут кои8 и каким чудом тогда остальные программы умеют отображать правильно.

что умеют? Может, настроить Emacs не умеем и научиться не хотим? А в gtk мы это конечно, gtk-theme-switch запустить можем или чем мы там пользуемся?

Я, друг, в отличие от тебя, когда мне шрифты нужно было настроить, и на xfree86.org описалово читал, и в мануал не боялся лезть (info xemacs / mule [RET], info xemacs21/lispref / MULE [RET]). Я тебе на две страницы расписал, почему xemacs не умеет работать с "уникодными шрифтами" -- ты не понял, в чем моя вина? В том, что ты вообще ничего читать не желаешь? Или я тебе тут должен весь мануал в вольном изложении рассказать?

> Расстроил ты меня, чувак, до метеоризма.

я рад за твой метеоризм.

uj2 ★★★
()
Ответ на: комментарий от uj2

[понты поскипаны]
> Я тебе на
> две страницы расписал, почему xemacs не умеет работать
> с "уникодными шрифтами" -- ты не понял, в чем моя вина?
Ты так и не смог сказать в чем терминус _не_ "уникодный шрифт".

> В том, что ты вообще ничего читать не желаешь? Или я тебе тут должен весь мануал в вольном изложении рассказать?
Не должен. Я же сказал - не знаешь, промолчи.
В чем отличие emacs от xemacs. Это слишком сложный для тебя вопрос?
Тогда просто не отвечай.

gpg
() автор топика
Ответ на: комментарий от gpg

> Ты так и не смог сказать в чем терминус _не_ "уникодный шрифт".

да будь он хоть десять раз юникодный! У него еще, кроме юникодного регистра, т.е. iso10646-1, прописаны другие регистры, в частности, iso8859-5. Вот этот самый регистр используется xemacs'ом для отображения русских символов.

Т.е. при отображении русского символа он просто берет шаблон

-*-terminus-*-*-*-*-*-*-*-*-*-*-*-*

комбинирует его с регистром iso8859-5 и получает LFD

-*-terminus-*-*-*-*-*-*-*-*-*-*-iso8859-5

и, поскольку такой шрифт в системе _есть_, он им рисует этот символ. В случае, например, с andale mono, у тебя в системе не прописан для нее регистр iso8859-5, поэтому, когда после сопоставления он получает

-*-andale mono-*-*-*-*-*-*-*-*-*-*-iso8859-5

и не находит его, он рисует пустой квадрат! Поэтому у тебя есть три пути.

1) Самый простой. Добавить этот регистр к тому же andale mono вручную. Для этого идешь в каталог, где у тебя лежат фонты от майкрософт, открываешь в редакторе файл fonts.dir, копируешь любую строчку со шрифтом andale mono в конец файла и заменяешь в ней регистр на iso8859-5, после чего выполняешь "xset fp rehash" и проверяешь, появился ли этот регистр у andale mono:

$ xlsfonts | grep 'andale mono.*iso8859-5'

2) указываешь xemacs'у для русских символов юзать вместо регистра iso8859-5 регистр koi8-r. Для этого

а) ассоциируешь русский символьный набор с регистром koi8-r

(set-charset-registry 'cyrillic-iso5589-5 "koi8-r") б) "говоришь" xemacs'у, что для представления русских символов их нужно сначала сконвертировать в koi8-r

(set-charset-ccl-program ...)

3) Ты разбираешься в исходниках Mule-UCS, находишь, как с помощью этой либы генерить ccl-ки, генеришь ccl для конвертации русского непосредственно в iso10646-1 (Unicode), после чего идешь вторым путем. Это правильный путь, но мне он не под силу, если сделаешь -- честь тебе и хвала :-)

> В чем отличие emacs от xemacs. Это слишком сложный для тебя вопрос?

в чем отличие Linux от Windows? :) это слишком разнобокий вопрос, и да, я в нем полностью не разбираюсь. В нем полностью разбираются девелоперы xemacs'а, если хочешь -- спроси их (-: Если есть какой-то конкретный вопрос -- спрашивай, если знаю, отвечу.

uj2 ★★★
()
Ответ на: комментарий от gpg

> [понты поскипаны]

понторез здесь как раз ты, будешь дальше в таком же духе разговаривать -- вообще отвечать не буду, и никто тебе не ответит, понятно?

uj2 ★★★
()
Ответ на: комментарий от gpg

> Улыбнуло. Да за что спасибо-то? За какую-то сомнительную невнятность и "иди читай мануал"?

> Расстроил ты меня, чувак, до метеоризма.

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

Так что прекращай одно из двух: свой ##здеж либо свое кровообращение с дыханием вместе.

А то, что чувак здесь написал, вполне на mini-howto метит.

IMNSHO
()
Ответ на: комментарий от uj2

Вот за это большое тебе человеческое спасибо.
Если заработает, удвою.

gpg
() автор топика
Ответ на: комментарий от uj2

"Сам первый начал" © Впрочем, признаю, местами был резок. Если задел, прошу прощения.

gpg
() автор топика
Ответ на: комментарий от IMNSHO

Слышь, сопляк. Есть что сказать по делу - говори. Нету - мне твои пубертатные проблемы неинтересны.

gpg
() автор топика
Ответ на: комментарий от uj2

Ларчик-то, как и положено в глупых сказках, открывался просто.
В xorg.conf'е не был прописан путь к corefonts.
Как оно работало раньше и в какой момент потёрлось даже не знаю.

gpg
() автор топика
Ответ на: комментарий от gpg

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

IMNSHO
()
Ответ на: комментарий от IMNSHO

Да, это публичный форум, но посвящённый отнюдь не упражнениям в изысканиях "скрытого смысла" моих слов. К тому же твои АТЕ мне непонятны. После локализации и решения проблемы я добр и любвеобилен, так что я уже не дуюсь, сладенький. Чмоки-чмоки, мой нежный тортик.

gpg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.