emacs term-mode中的Unicode字符

Mat*_*son 9 unicode emacs elisp

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

我使用字符"±"作为我对git存储库的提示.

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

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

小智 11

以下对我有用:

(add-hook 'term-exec-hook
          (function
           (lambda ()
             (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix))))
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*son 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)
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*ert 5

尝试

(set-terminal-coding-system 'utf-8-unix)
Run Code Online (Sandbox Code Playgroud)

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))
Run Code Online (Sandbox Code Playgroud)