Как заставить 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)

И он принимает мой испанский вклад.

Другие вопросы по тегам