如何让 emacs 接受键盘的 UTF-8

如何让 emacs 接受键盘的 UTF-8

我的朋友劝我“再试一次”(大约 12 年来第 5 次)使用 emacs。我现在有点痛苦,需要 emacs + utf-8 方面的帮助。

我在 Windows 7 上运行 23.3.1 emacs gui,使用我自己的自定义键盘布局(使用 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 之外的字符会被“翻译”为近似字符拉丁语-1。因此,例如,拉丁语-5 中的“ğ”被转换为普通的“g”。

然而,剪切和粘贴可以正常工作。

有人能告诉我我做错了什么吗?我想一切我使用带有 BOM 的 emacs utf-8。

答案1

这看起来像是一个代码页的问题(因此特定于 Windows),因为 Emacs 内部使用了旧的 Windows API,它只能返回属于你的代码页的字符(因此 Windows 在将其传递给 Emacs 之前变成了ğ普通的字符g)。

据我所知,在较新的 Emacsen 中不再存在这种情况(我们现在使用较新的 API,它使用某种 Unicode,可能是 UTF-16)。

答案2

我的 emacs 说 set-language-environment 采用字符串,而不是符号。

(set-language-environment "UTF-8")

使用 utf-16 作为键盘编码系统可以吗?

答案3

在我的 Linux 机器上,我只需在 .emacs 中输入以下几行就可以在 emacs 上输入希腊语、法语(重音符号)和西班牙语(ñ):

;; Set encoding
(prefer-coding-system 'utf-8)
(setq coding-system-for-read 'utf-8)
(setq coding-system-for-write 'utf-8)

答案4

我在我的开头添加了init.el

(require 'iso-transl)

并且它接受我的西班牙语输入。

相关内容