emacs term-mode中的Unicode字符

时间:2011-07-25 17:34:26

标签: unicode emacs elisp

我使用ansi-term进行正常的终端会话。我倾向于在提示符中使用unicode字符来执行诸如根据我正在使用的源代码控制的类型设置尾随字符之类的事情。

我使用字符“±”作为我对git存储库的提示。

在Emacs的ansi-term中,我的提示不会呈现为unicode,并显示为“\ 302 \ 261”。显示当前编码系统显示默认为utf-8-unix用于输入进程,但我得到原始二进制作为解码输出。我可以点击C-c RET p来改变编码和解码编码系统。我在启动终端时如何自动设置这个空白?我已经尝试添加term-mode-hook来设置缓冲区的编码系统无济于事。我想我已经在term.el中找到了我正在寻找的东西,但是我并不关心调整分发elisp,并且看起来原始二进制文件被添加来修复其他地方的bug。

编辑:原来不清楚。我在为MacOS上的Cocoa-ized Emacs 23.3下的ansi-term运行设置默认进程编码系统时遇到问题。 Emacs本身没有在终端上运行,我的终端在Emacs中运行。

3 个答案:

答案 0 :(得分:10)

以下对我有用:

(add-hook 'term-exec-hook
          (function
           (lambda ()
             (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix))))

ansi-term似乎忽略了default-process-coding-system变量,所以我必须在执行shell之后在本地设置缓冲区。

答案 1 :(得分:8)

在更好地了解term.el之后,以下工作:

(defadvice ansi-term (after advise-ansi-term-coding-system)
    (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix))
(ad-activate 'ansi-term)

使用term-mode-hook尝试此操作已被破坏,因为在term.el中,在切换到终端缓冲区之前调用了term-mode-hook,因此set-buffer-process-coding-system由于缺少与之关联的进程而中断缓冲液中。

答案 2 :(得分:5)

尝试

(set-terminal-coding-system 'utf-8-unix)

那是C-x RET t而非C-x RET p


所以C-x RET p有帮助吗? 除非C-h v default-process-coding-system(utf-8-unix . utf-8-unix),否则请尝试

(setq default-process-coding-system '(utf-8-unix . utf-8-unix))