|
Поддержка разных языковEmacs поддерживает широкий спектр наборов знаков разных языков, включая европейские варианты латинского алфавита, а также китайскую, девангари (хинди и маратхи), эфиопскую, греческую, IPA, японскую, корейскую, лаосскую, русскую, тайскую, тибетскую и вьетнамскую письменности. Эти возможности были внесены из измененной версии Emacs, известной как MULE (от "MULti-lingual Enhancement to GNU Emacs".(4)) Введение в наборы знаков разных языковПользователи этих систем письма выработали много более или менее стандартных систем кодирования для хранения файлов. Внутренне Emacs использует единую многобайтную кодировку, так что в ней можно перемешивать знаки из всех этих систем письма в одном буфере или строке. Эта кодировка представляет каждый знак, не входящий в ASCII, как последовательность байт в промежутке от 0200 до 0377. Emacs переводит из этой многобайтной кодировки в различные другие системы кодирования при считывании и записи файлов, при обмене данными с подпроцессами и (в некоторых случаях) в команде C-q (смотрите раздел Однобайтные и многобайтные не-ASCII-знаки). Команда C-h h
( Даже в странах, где используются эти знаки, на клавиатурах обычно нет клавиш для всех из них. Поэтому Emacs поддерживает различные методы ввода, как правило, один для каждой письменности или языка, чтобы их было удобно вводить. Префиксный ключ C-x RET используется для команд, которые имеют отношение к многобайтным знакам, системам кодирования и методам ввода. Включение поддержки многобайтных знаковВы можете включить или выключить поддержку многобайтных знаков либо для всего Emacs, либо для отдельного буфера. Когда в буфере выключены многобайтные знаки, каждый байт в нем представляет один знак, даже коды от 0200 до 0377. Старые средства для поддержки европейских наборов знаков, ISO Latin-1 и ISO Latin-2, работают так же, как они работали в Emacs 19, и кроме того, работают для других наборов знаков ISO 8859. Однако, чтобы использовать ISO Latin, необязательно выключать поддержку многобайтных знаков; многобайтный набор знаков Emacs включает все эти знаки, и Emacs может автоматически переводить из него в коды ISO и наоборот. Чтобы отредактировать определённый файл в однобайтном представлении,
обратитесь к нему через Чтобы выключить поддержку многобайтных
знаков по умолчанию, запустите Emacs с ключом Во время инициализации не создаются многобайтные строки из значений
переменных среды, вхождений файла В строке режима показано, включена ли поддержка многобайтных знаков в текущем буфере. Если она включена, перед двоеточием в начале строки режима стоят два или более знака (чаще всего два дефиса). Когда многобайтные знаки не включены, перед двоеточием есть только один дефис. Языковые средыВсе поддерживаемые наборы знаков допустимы в буферах Emacs, если включены многобайтные знаки; нет необходимости выбирать конкретный язык, чтобы увидеть его знаки в буфере Emacs. Однако, важно выбрать языковую среду, чтобы получить различные установки по умолчанию. На самом деле языковая среда представляет выбор предпочтительной письменности (в большей или меньшей степени), а не выбор языка. Языковая среда определяет, какие системы кодирования распознаются при считывании текста (смотрите раздел Распознавание систем кодирования). Это относится к файлам, приходящей почте, сетевым новостям и любому другому тексту, который вы считываете в Emacs. Она также может задавать систему кодирования, используемую по умолчанию для создания файла. Каждая языковая среда также указывает принимаемый по умолчанию метод ввода. Чтобы выбрать языковую среду, воспользуйтесь командой M-x set-language-environment. Не имеет значения, какой буфер является текущим, когда вы запускаете эту команду, потому что её действия применяются глобально ко всему сеансу Emacs. Поддерживаемые языковые среды включают:
Некоторые операционные системы позволяют вам указать используемый вами язык путем установки переменных среды, определяющих вашу местность. Emacs может обрабатывать один распространенный частный случай: если название вашей региональной установки для типов знаков содержит строку `8859-n', Emacs автоматически выбирает соответствующую языковую среду. Чтобы получить сведения об эффектах
определенной языковой среды яз-среда, используйте команду C-h L
яз-среда RET
( Вы можете настроить для себя любую языковую среду с
помощью обычной ловушки До начала подготовки новой языковой среды, команда
Методы вводаМетод ввода -- это разновидность преобразования знаков, разработанная специально для интерактивного ввода. В Emacs, как правило, каждый язык имеет свой метод ввода; иногда несколько языков, в которых используются одни и те же знаки, могут разделять один метод ввода. Есть немного языков, которые поддерживают несколько методов ввода. В простейшем случае метод ввода работает через отображение ASCII-букв в другой алфавит. Таким способом действуют методы ввода для греческого и русского. Более мощный способ -- составление: преобразование последовательности знаков в одну букву. Составление используется во многих европейских методах ввода для сознания одной не-ASCII-буквы из последовательности, состоящей из буквы, за которой идет знак акцента (или наоборот). Например, некоторые методы ввода преобразуют последовательность a' в одну букву с акцентом. В этих методах ввода нет собственных специальных команд; вс , что они делают, -- компонуют последовательности печатных знаков. Методы ввода для силлабических систем письма обычно используют последовательно отображение и затем составление. Таким способом работают методы ввода для тайского и корейского. Сначала буквы отображаются в символы отдельных звуков или меток тона; затем такие последовательности, составляющие целый слог, отображаются в один знак слога. Для китайского и японского требуются более сложные методы. В китайских
методах ввода вы сначала вводите фонетическое написание китайского слова (в
методе ввода В японских методах ввода вы сначала вводите целое слово, используя фонетическое написание; потом, когда это слово уже в буфере, Emacs преобразует его в один или несколько знаков, используя большой словарь. Одно фонетическое написание соответствует многим по-разному записанным японским словам, поэтому вы должны выбрать один из них; для циклического прохода по альтернативам используйте C-n и C-p. Иногда полезно остановить действие метода ввода, чтобы только что введенные
вами знаки не сливались с последующими. Например, в методе ввода
Один способ -- набрать акцент дважды; это специальное средство для ввода буквы и акцента раздельно. Например, e ' ' даёт два знака `e''. Другой способ -- набрать после `e' ещё одну букву, которая не скомбинируется с ней, и сразу удалить её. Например, вы могли бы набрать e e DEL ', чтобы получить раздельные `e' и `''. Еще один способ, более общий, но не такой лёгкий для набора, --- использовать
между двумя знаками C-\ C-\, чтобы предотвратить их комбинирование.
Это команда C-\ ( C-\ C-\ особенно полезна в наращиваемом поиске, поскольку она останавливает ожидание дальнейших знаков для составления и начинает поиск того, что вы уже набрали. Две переменные,
Выбор метода ввода
Чтобы выбрать метод
ввода для текущего буфера, используйте C-x RET C-\
( Методы ввода используют для обозначения
знаков, не входящих в ASCII, различные последовательности ASCII-знаков. Иногда
бывает полезно временно выключить метод ввода. Чтобы сделать это, наберите
C-\ ( Если вы напечатаете C-\, но метод ввода пока не выбран, вас попросят указать его. Это имеет тот же эффект, что и использование C-x RET C-\ для задания метода ввода. Выбор языковой среды определяет метод ввода, используемый
по умолчанию. Тогда вы можете выбрать его в текущем буфере, набирая
C-\. Переменная Некоторые методы ввода для алфавитных систем письма работают путем отображения клавиатуры для эмуляции различных раскладок, часто используемых для этих систем письма. Как правильно сделать это отображение, зависит от действительной раскладки вашей клавиатуры. Чтобы указать её, используйте команду M-x quail-set-keyboard-layout. Чтобы просмотреть перечень всех поддерживаемых методов ввода, наберите M-x list-input-methods. Перечень сообщает сведения о каждом методе ввода, включая строку, обозначающую этот метод ввода в строке режима. Однобайтные и многобайтные не-ASCII-знакиКогда включены многобайтные знаки, знаки с кодами от 0240 (восьмиричное) до 0377 (восьмиричное) на самом деле недопустимы в буфере. Допустимые печатные знаки, не входящие в ASCII, имеют коды, начинающиеся от 0400. Если вы набираете самовставляющийся знак в недопустимом диапазоне от 0240 до 0377, Emacs предполагает, что вы намеревались использовать один из наборов знаков Latin-n, и преобразует его в код Emacs, представляющий этот знак Latin-n. Вы указываете, какой набор знаков ISO нужно для этого применять, своим выбором языковой среды (смотрите выше). Если вы не указали свой выбор, по умолчанию используется Latin-1. То же происходит, когда вы используете C-q для ввода восьмиричного кода в этом диапазоне. Системы кодированияНосители различных языков выработали много более или менее стандартных систем кодирования для их представления. Emacs не использует эти системы кодирования внутренне; вместо этого, при считывании данных он преобразует их из различных систем кодирования в свою внутреннюю, а при записи он преобразует данные из внутренней системы кодирования в другие системы. Преобразование возможно при считывании и записи файлов, отправке или получении данных с терминала и при обмене данными с подпроцессами. Emacs присваивает каждой системе кодирования свое имя. Большинство систем
кодирования используются для одного языка, и имя такой системы кодирования
начинается с имени языка. Некоторые системы кодирования используются для
нескольких языков; их имена обычно начинаются с `iso'. Есть также
специальные системы кодирования Помимо преобразований между разными представлениями не-ASCII-знаков, система кодирования может производить преобразование последовательности "конец-строки". Emacs работает с тремя различными соглашениями о том, как разделять строки в файле: переводом строки, возвратом каретки и переводом строки и просто возвратом каретки.
Команда C-h C
( Чтобы вывести перечень всех поддерживаемых систем кодирования, наберите M-x list-coding-systems. Этот перечень даёт информацию о каждой системе кодирования, включая букву, обозначающую её в строке режима (смотрите раздел Строка режима). Каждая система
кодирования из перечисленных в этом списке -- кроме Каждая из перечисленных систем кодирования имеет три варианта, которые точно указывают, что делать для преобразования конца-строки:
Эти варианты систем кодирования опускаются для краткости в выводе
Система кодирования В противоположность этому, система кодирования Простейший способ отредактировать файл без любых преобразований ---
воспользоваться командой M-x find-file-literally. Она использует
Система кодирования Распознавание систем кодированияЧаще всего Emacs может распознать, какую систему кодирования он должен использовать для любого данного файла, -- если вы указали свои предпочтения. Некоторые системы кодирования могут быть распознаны или выделены по тому, какие последовательности знаков появляются среди данных. Однако, есть системы кодирования, которые не могут быть различены, даже потенциально. Например, нет способа отличить Latin-1 от Latin-2; они используют одни и те же значения байт с разными смыслами. Emacs справляется с такой ситуацией при помощи списка приоритетов систем кодирования. Если вы не указали, какую систему кодирования надо использовать, Emacs во время считывания файла сверяет данные с каждой системой кодирования, начиная с первой по приоритету и продвигаясь вниз по списку, пока не найдет систему кодирования, подходящую для этого файла. Затем он преобразует содержимое файла, предполагая, что оно представлено в этой системе кодирования. Список приоритетов систем кодирования зависит от выбранной языковой среды (смотрите раздел Языковые среды). Например, если вы используете французский, вы, вероятно, захотите, чтобы Emacs предпочитал Latin-1, а не Latin-2; а если вы используете чешский -- чтобы предпочтение отдавалось Latin-2. Это одна из причин задавать языковую среду. Однако, вы можете детально изменять список приоритетов с помощью команды M-x prefer-coding-system. Эта команда считывает имя системы кодирования в минибуфере и добавляет её в начало списка приоритетов, так, чтобы ей отдавалось предпочтение среди остальных. Если вы применяете эту команду несколько раз, при каждом использовании в начало списка приоритетов добавляется один элемент. Если вы используете систему кодирования, которая определяет тип
преобразования последовательности конец-строки, такую как
Иногда имя файла указывает на то, какая система
кодирования должна для него использоваться. Это соответствие задаёт переменная
(modify-coding-system-alist 'file "\\.txt\\'" 'china-iso-8bit) Первым аргументом должен быть Emacs узна т, какой вид преобразования конца-строки
следует использовать, основываясь на содержимом файла: если он видит только
возвраты каретки или только последовательности возврат каретки-перевод строки,
то выбирает соответствующее преобразование. Вы можете подавить автоматическое
использование преобразования конца-строки, установив переменную
Вы можете указать систему кодирования для конкретного
файла, применяя конструкцию `-*-...-*-' в начале этого файла или в
списке локальных переменных в его конце (смотрите раздел Локальные
переменные в файлах). Вы делаете это, определяя значение для "переменной" с
именем Переменная Когда Emacs выбрал систему кодирования для буфера, он
сохраняет её в Когда вы посылаете сообщение с помощью режима Mail
(смотрите раздел Посылка почты),
у Emacs есть четыре разных способа узнать систему кодирования для текста
сообщения. Он пробует значение Когда вы получаете новую почту в Rmail, каждое сообщение
автоматически переводится из той системы кодирования, в которой оно было
написано --- как если бы оно было отдельным файлом. При этом используется
заданный вами список приоритетов систем кодирования. Если в сообщении в формате
MIME указан набор знаков, Rmail подчиняется этому указанию, если
Для считывания и сохранения самих Rmail-файлов Emacs
использует систему кодирования, задаваемую переменной
Задание системы кодированияВ случаях, когда Emacs не может автоматически подобрать правильную систему кодирования, вы можете указать её явно с помощью таких команд:
Команда C-x RET f
( Другой способ указать систему
кодирования для файла -- сделать это во время обращения. Сначала используйте
команду C-x RET c
( Таким образом, если непосредственно следующей командой будет, скажем, C-x C-f, то она считает файл, используя указанную систему кодирования (и запоминает эту систему кодирования для последующей записи файла). Или, если следующей командой будет C-x C-w, она запишет файл, используя эту систему кодирования. Другие команды работы с файлами, на которые действует заданная система кодирования, включают C-x C-i и C-x C-v, а также варианты C-x C-f с показом в другом окне. C-x RET c также влияет на программы, начинающие подпроцессы, включая M-x shell (смотрите раздел Запуск команд оболочки из Emacs). Однако, если непосредственно следующая команда не использует систему кодирования, то C-x RET c в результате не имеет эффекта. Простой способ обратиться к файлу без преобразования предоставляет команда M-x find-file-literally. Смотрите раздел Обращение к файлам. Переменная Команда C-x RET t
( Это средство полезно для некоторых текстовых терминалов, сделанных с поддержкой какого-то конкретного языка или набора знаков -- например, европейских терминалов, поддерживающих один из наборов знаков ISO Latin. При использовании многобайтного текста вам нужно указать систему кодирования, чтобы Emacs знал, какие знаки этот терминал может на самом деле обработать. По умолчанию вывод на терминал не преобразуется совсем, если только Emacs не может предугадать правильную систему кодирования для вашего типа терминала. Команда C-x RET k
( По умолчанию ввод с клавиатуры не переводится. Между использованием системы кодирования для перевода ввода с клавиатуры и использованием метода ввода есть некое сходство: в обоих случаях определяются вводимые с клавиатуры последовательности, превращающиеся с один знак. Однако, методы ввода разработаны для удобного интерактивного использования людьми, и переводимые ими последовательности обычно являются последовательностями печатных ASCII-знаков. Системы кодирования как правило переводят последовательности неграфических знаков. Команда C-x RET x
( Команда C-x RET p
( По умолчанию ввод и вывод процессов не переводится совсем. Переменная Если Внимание: если вы измените
Наборы шрифтовШрифт X Windows обычно определяет начертание для одного алфавита или письменности. Поэтому для отображения полного спектра всех систем письма, которые поддерживает Emacs, необходимо множество шрифтов. В Emacs такое множество называется набором шрифтов. Набор шрифтов определяется как список шрифтов, каждый из которых предназначается для работы с одним диапазоном кодов знаков. Каждый набор шрифтов имеет имя, как и отдельный шрифт. Доступные шрифты определяются X-сервером; наборы шрифтов определяются внутри самого Emacs. Как только вы определили набор шрифтов, вы можете использовать его в Emacs, указывая его имя в любом контексте, где вы могли бы написать один шрифт. Разумеется, наборы шрифтов Emacs могут содержать только те шрифты, которые поддерживаются X-сервером; если некоторые знаки появляются на экране как пустые прямоугольники, это означает, что в используемом наборе шрифтов нет шрифта для этих знаков. Emacs создаёт два набора шрифтов автоматически: стандартный набор
шрифтов и стартовый набор шрифтов. Стандартный набор шрифтов
скорее всего содержит шрифты для широкого спектра знаков, не входящих в ASCII;
однако, по умолчанию Emacs использует не его. (По умолчанию Emacs старается
найти шрифт, которые имеет жирный и курсивный варианты.) Вы можете указать, что
нужно использовать стандартный набор шрифтов, с помощью ключа emacs -fn fontset-standard Набор шрифтов не обязан задавать шрифт для каждого кода. Если набор шрифтов не определяет шрифт для некоторого знака, или его он определяет шрифт, которого нет в вашей системе, то он не может правильно отобразить этот знак. Вместо этого знака будет показан пустой прямоугольник. Высота и ширина набора шрифтов определяются ASCII-знаками
(то есть шрифтами, используемыми в этом наборе для ASCII-знаков). Если другой
шрифт в этом наборе имеет иную высоту или ширину, то знаки, приписанные к этому
шрифту, обрезаются до размера набора шрифтов. Если
Определение наборов шрифтовEmacs создаёт стандартный набор шрифтов
автоматически в соответствии с -*-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard или просто `fontset-standard' для краткости. Жирный, курсивный и жирный курсивный варианты стандартного набора шрифтов создаются автоматически. Их имена имеют `bold' вместо `medium', или `i' вместо `r' или и то, и другое. Если вы задали ASCII-шрифт по умолчанию с помощью ресурса
`Font' или аргумента К примеру, если вы запустили Emacs таким образом: emacs -fn "*courier-medium-r-normal--14-140-*-iso8859-1" Emacs генерирует следующий набор шрифтов и использует его для первого фрейма: -*-*-medium-r-normal-*-14-140-*-*-*-*-fontset-startup В X-ресурсе `Emacs.Font' вы можете указывать набор шрифтов, точно так же, как и обычное имя шрифта. Но будьте внимательны и не задавайте набор шрифтов в ресурсе с символами подстановки, как `Emacs*Font', -- такая спецификация применяется для различных целей, например для меню, а меню не может обращаться с наборами шрифтов. Вы можете определить дополнительные наборы шрифтов, используя X-ресурсы с именами `Fontset-n', где n -- число, отсчитываемое от нуля. Значение этого ресурса должно иметь такую форму: шаблон-шрифта, [имя-кодировки:имя-шрифта]... шаблон-шрифта, кроме двух последних полей, должен иметь форму стандартного имени X-шрифта. Два последних поля должны иметь вид `fontset-псевдоним'. У набора шрифтов есть два имени, одно длинное, а другое короткое. Длинное имя -- это шаблон-шрифта. Короткое имя -- это `fontset-псевдоним'. Вы можете ссылаться на набор шрифтов по любому из этих имен. Конструкция `кодировка:шрифт' определяет, какой шрифт должен использоваться (в этом наборе) для одного конкретного набора знаков. Здесь кодировка -- это имя набора знаков, а шрифт --- это используемый для него шрифт. При определении одного набора шрифтов вы можете применять эту конструкцию любое число раз. @hyphenation{зна-че-ния} Для остальных наборов знаков Emacs выбирает шрифт, основываясь на шаблоне-шрифта. Он заменяет `fontset-псевдоним' на значения, описывающие набор знаков. Для шрифта знаков ASCII, `fontset-псевдоним' заменяется на `ISO8859-1'. Кроме того, когда несколько последовательных полей являются символами подстановки, Emacs сжимает их в один символ. Это делается для предотвращения использования автоматически масштабированных шрифтов. Шрифты, получаемые масштабированием более крупного шрифта, непригодны для редактирования, а масштабирование мелкого шрифта бессмысленно, потому что мелкий шрифт лучше использовать с его собственным размером, что Emacs и делает. Таким образом, если шаблон-шрифта задан так: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24 то спецификация шрифта для ASCII-знаков была бы такой: -*-fixed-medium-r-normal-*-24-*-ISO8859-1 а спецификация шрифта для китайских знаков GB2312 такой: -*-fixed-medium-r-normal-*-24-*-gb2312*-* У вас может не оказаться китайских шрифтов, соответствующих приведенной выше спецификации. Большинство дистрибутивов X Windows включают только китайские шрифты с `song ti' или `fangsong ti' в поле family. В таком случае `Fontset-n' можно задать таким образом: Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\ chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-* Тогда спецификации всех шрифтов, кроме китайских GB2312, будут иметь `fixed' в поле family, а спецификации для китайских знаков GB2312 несут в поле family символ подстановки `*'. Функция, которая обрабатывает значение ресурса,
определяющего набор шрифтов, и создаёт этот набор, называется
Смотрите раздел Ключи для задания шрифта, для большей информации об именовании шрифтов в X. Поддержка однобайтных европейских знаковНаборы знаков ISO 8859 Latin-n определяют коды знаков в диапазоне от 160 до 255 для обращения с акцентированными буквами и знаками препинания, необходимыми в различных европейских языках. Если вы выключите поддержку многобайтных знаков, Emacs все же сможет работать с одной из этих кодировок. Чтобы указать, какие из этих кодов следует использовать, вызовите M-x set-language-environment и задайте подходящую языковую среду, такую как `Latin-n'. Для получения большей информации об однобайтном режиме смотрите раздел Включение поддержки многобайтных знаков. В частности, обратите внимание на то, что ваши файлы инициализации считываются как однобайтные, если они содержат не-ASCII-знаки. Emacs может также отображать такие знаки, при условии, что
они поддерживаются терминалом или шрифтом. Это работает автоматически. Или, если
вы используете оконную систему, Emacs может отображать однобайтные знаки через
наборы шрифтов, показывая в действительности эквивалентные многобайтные знаки в
соответствии с языковой средой. Чтобы затребовать это, установите переменную
Если ваш терминал не поддерживает набор знаков Latin-1,
Emacs может отображать их как ASCII-последовательности, которые по крайней мере
дают вам ясное представление о том, что это за знаки. Чтобы сделать так,
загрузите библиотеку Обычно не входящие в ISO-8859 знаки
(между 128 и 159 включительно) отображаются как восьмиричные управляющие
последовательности. Вы можете изменить это для нестандартных `расширенных'
версий наборов знаков ISO-8859, используя функцию
Есть три разных способа вводить однобайтные не-ASCII-знаки:
Назад | Вперед | Содержание |
|
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети