2011-07-12 190 views
6

我正在运行一个进程,在发生失败错误时输出字符'✖'(如Unicode中定义的)。但是,如果在Emacs shell缓冲区(GNU Emacs的Aquamacs发行版)中运行该进程,我完全没有看到该错误。如何在Emacs shell缓冲区中获得对'✖'等的支持?

使用:GNU Emacs的23.3.1(I386-苹果darwin9.8.0,NS苹果了AppKit-949.54)上braeburn.aquamacs.org的2011-03-18 - Aquamacs分布2.2

如何获得Emacs shell缓冲区支持这种unicode字符?

+1

很高兴在问题标题中看到这个字符,看起来像插入的图像:) – takeshin

回答

0

看看这个EmacsForMacOS维基页面。

+0

谢谢 - 我也把它们放进去。他们似乎对我没有太大的改变,但现在,我会用wiki的话来说明。他们加入我已经有一段时间的文件utf-8声明: (set-buffer-file-coding-system'utf-8-unix t) – christopherbalz

7

若要告诉单个shell缓冲区将外壳的输出视为UTF-8,请发出命令Cx RET p,并在询问“编码系统用于输出进程:”时输入“utf-8” 。当然后询问“编码系统输入到过程:”时,我只输入RET;我从不直接向shell提供UTF-8输入。

或者,若要自动获得此行为,请将(prefer-coding-system 'utf8)放入您的.emacs文件中。实际上,这也会导致UTF-8在其他一些环境中使用,这也是大多数人可能想要的。

+0

嗯,如果我想要将特定编码应用于贝壳?是(prefer-coding-system'utf8)还是合适的吗?或者更好地缩小它? – zinking

3

你可以把类似下面的一个函数来创建一个支持UTF-8的壳:

(defun utf8-shell() 
    "Create Shell that supports UTF-8." 
    (interactive) 
    (set-default-coding-systems 'utf-8) 
    (shell)) 

这台输入和输出UTF-8这样你就可以做(例如)以下:

~ $ echo "✖" 
✖ 

如果你想外壳总是以UTF-8支持开放的,你可以做,而不是执行以下操作:

(defadvice shell (before advice-utf-shell activate) 
    (set-default-coding-systems 'utf-8)) 

(ad-activate 'shell) 
+0

谢谢大家。解决我的问题的唯一改变是utf8-shell'defun'。我希望这个函数被命名为普通的'shell',但是当我尝试运行它时会导致错误。现在我决定'U-shell'。 – christopherbalz

+0

如果你不反对每次调用shell函数都有这种行为,那么可以通知shell函数。我修改了我的答案,以包含defadvice示例代码。 – zev