Как заставить Emacs принимать UTF-8 с клавиатуры
Мои друзья убедили меня попробовать еще раз (примерно в 5 раз за 12 лет) с emacs. В настоящее время я немного страдаю, и мне нужна помощь с emacs + utf-8.
Я использую графический интерфейс 23.3.1 для emacs в Windows 7 со своей собственной раскладкой клавиатуры (созданной с помощью MS Keyboard Layout Creator). Макет имеет полный набор символов ISO-8859-1 (Latin-1), а также некоторые дополнительные символы из ISO-8859-9 (Latin-5, ğış и т. Д. Для турецкого) и ŵ для валлийского (не знаю, где это тот жизни).
В моем.emacs я (вслепую) добавил эти строки:
(Обновление: вот последний развивающийся беспорядок:)
;; set up unicode
;; keyboard / input method settings
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-language-environment 'UTF-8) ; prefer utf-8 for language settings
(set-default-coding-systems 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
(prefer-coding-system 'utf-8)
(setq buffer-file-coding-system 'utf-8-unix)
(setq default-file-name-coding-system 'utf-8-unix)
(setq default-keyboard-coding-system 'utf-8-unix)
(setq default-process-coding-system '(utf-8-unix . utf-8-unix))
(setq default-sendmail-coding-system 'utf-8-unix)
(setq default-terminal-coding-system 'utf-8-unix)
Теперь, когда я ввожу символы из ISO Latin-1 с клавиатуры, они принимаются без проблем, но символы извне Latin-1 "переводятся" в приблизительный символ Latin-1. Так, например, Latin-5 "ğ" преобразуется в обычное "g".
Резка и вставка, однако, работают нормально.
Может кто-нибудь сказать мне, что я делаю не так? Я хотел бы сделать все, что я делаю с Emacs UTF-8 с BOM.
4 ответа
Кажется, что это была проблема кодовой страницы (и, следовательно, специфичной для Windows), потому что Emacs внутренне использовал старые API-интерфейсы Windows, которые могли возвращать только те символы, которые принадлежат вашей кодовой странице (следовательно, Windows перевернулась ğ
в равнине g
перед передачей его в Emacs).
AFAIK, это не относится к более новым Emacsen (теперь мы используем более новые API, которые используют какой-то Unicode, возможно, UTF-16).
Мой emacs говорит, что set-language-environment принимает строку, а не символ.
(set-language-environment "UTF-8")
Работает ли использование utf-16 для системы кодирования клавиатуры?
на моем linux-яке я могу набирать греческий, французский (акценты) и испанский (ñ) в emacs, используя только эти строки в моем .emacs:
;; Set encoding
(prefer-coding-system 'utf-8)
(setq coding-system-for-read 'utf-8)
(setq coding-system-for-write 'utf-8)
Я добавил в начале моего init.el
:
(require 'iso-transl)
И он принимает мой испанский вклад.