Terehov Gennady wrote:
А никто не знает как к Emacs перекодировку буфера прикрутить, чтобы
кодировку, в которой текст отображается в текущем буфере можно было
переключать?
Не уверен, что в точности понял ваш вопрос, но все же попытаюсь ответить...
Сначала следует некоторая философия, потом пример. Если скучно читать
философию - прочтите сразу пример.
Emacs'ы достаточно новых версий (>= 20), которые используют MULE
(multi-user language environment, если не ошибаюсь), хранят содержимое
(почти) всех буферов в unicode'е (или, как это написано в Emacs
документации, в multi-byte). (В чем можно убедиться, например, набрав
C-h h - в зависимости от наличия у вас нужных шрифтов, вы увидете
большое количество языков, в том числе русский, различные языки с
диакритическими знаками (французский, чешский, польский), с необычными
буквами (например, немецкий с ss), и даже иерографические языки (Thai,
Japanese, Chinese итд).
Если же редактор внутренне хранит все в Unicode, а операционная система
не полностью его поддерживает, т.е. имеет ASCII файлы, файлы в разных
кодировках, и не-unicode шрифты (т.е. шрифты, соотв. какой-либо
кодировке, и имеющие только 256 glyphs), то возникает как минимум три
разные задачи:
1. При загружении в буфер не-юникод (single-byte) файла перекодировать
его в юникод (multi-byte);
2. При сохранение из буфера в не-юникод файл (single-byte)
перекодировать из юникод в соответствующую кодировку;
3. Надо иметь способ ввода нужных символов в буфер;
4. Наконец, надо отображать символы в буфере при отсутствии unicod шрифтов.
1 и 2 решаются с помощью установки coding system. Она задает, например,
что по умолчанию все файлы на диске воспринимаются как single-byte в
кодировке koi8-r. Тогда при загрузке такого файла в буфер Emacs
переведет его из koi8-r в unicode (multi-byte), и будет внутренне
работать с ним. А при сохранении он переведет текст обратно из юникода в
single-byte в кодировке koi8-r и запишет это на диск.
Соответственно, пользователь, работающий с правильно настроенным Emacs,
может никогда и не догадаться, что при редактировании файла он жил
внутри Emacs в виде unicode.
Однако, если вам нужно загрузить файл в какой-то другой кодировке, можно
попросить Emacs выбрать нужную кодироку (возможно, отличающуюся от
текущих установок).
Пример.
Я живу в Windows, по умолчанию кодировки ввода-вывода - это cp1251-dos.
Хочу перекодировать файл, пришедший в кодировке koi8-r, с юниксовыми
концами строк, в cp1251-dos, чтобы продолжить его редактирование в
Notepad ;).
Решение.
Загружаю Emacs. Набираю C-x RET c. В ответ на приглашение
Coding system for following command (default, cp1251-doc):
набираю koi8-r-unix.В ответ на приглашение:
Command to execute with koi8-r-unix:
набираю C-x C-f, и ввожу имя нужного мне файла. Теперь нужно сделать
какое-нибудь изменение, что Емакс посчитал файл измененным, например,
ввести пробел и тут же его удалить. После чего сохранить файл - он
сохраниться в кодировке по умолчанию, т.е. cp1251-dos.
Итак, с помощью Emacs нам удалось поменять кодировку файла!
Соответсвенно, если вы редактировали обычный файл в кодировке
cp1251-dos, можно перед сохранением выбрать кодировку для следующей
команды koi8-r-dos, и тогда файл запишется на диск в кодировке koi8-r,
но с досовскими концами строк. Итд.
Вообще, очень советую прочесть раздел International Character Set
Support в Emacs Info (C-h i, m International RET) - там хоть все и не
очень понятно, зато, наверное, полно и точно описано.
Удачи, Виктор.