如何在GNU Screen中保留Emacs终端颜色

12
我正在使用OSX snow leopard系统。当我直接从终端使用emacs时,我有一个很喜欢的颜色设置(例如C/C++),绿底黑字,红色注释,关键词带颜色等等。其中一些是在“终端偏好设置”中设置的,另一些则在我的~/.emacs文件中(见下文)。但是当我从屏幕上运行emacs时,基本的颜色方案相同(绿底黑字),但是着色不同(例如注释字符为红色,但不是整个注释)--这真的很烦人。
任何帮助都将不胜感激!
以下是我的'.emacs'文件(在gnu-screen emacs中无法正常工作):
(global-font-lock-mode t)
(custom-set-faces
 '(font-lock-comment-face
   ((((class color) (background light))
     :foreground "tomato")
    )))

在我的'.screenrc'文件中:
shell -$SHELL            # colors still don't work without this
#term xterm-256color    # using this doesn't fix the colors (suggested on some forums)

altscreen on
startup_message off

我认为在我的.screenrc文件中使用“shell -$SHELL”命令会使屏幕中的命令提示符与默认提示符相同——它确实使我的命令行显示为“computername:/DIR/ username$”,而不是只有“bash-3.2$”。
=================================================================
解决方案:感谢Greg E.
我需要将screen中的终端仿真器设置为与我的正常shell相匹配。为此,我添加了以下内容:
export TERM='xterm-color'

到~/.bash_profile

由于某些原因,“term xterm-color”在“〜/ .screenrc”文件中无效。


1
注意:在Mac OS X 10.7 Lion及更高版本中,不建议使用“xterm-color”。它代表了一个较旧的xterm分支。在Lion中,Terminal与现代xterm兼容性足够,您应该使用“xterm-256color”(默认值)或变体,例如“xterm-16color”。 - Chris Page
1个回答

8
我的怀疑是,尽管您的终端可能编译支持超过标准16种颜色,但您特定版本的GNU screen可能不支持。我对OSX不是很熟悉,但在Linux上,我会检查纯终端和运行screen的终端之间tput colors输出是否有差异(如果tput不可用,则应该有一些OSX等效方法)。如果有差异,您可能需要安装(或手动编译)另一个包含额外颜色支持的screen版本(通常256是最大值,但88也很常见,而16是默认最小值)。
编辑:最终,正确的解决方案被证明是手动设置$TERM环境变量(请参见下面的评论)。

1
有趣的想法;我尝试了“tput colors”(它确实有效),并且在常规终端和屏幕中都响应“8”.... :/ - DilithiumMatrix
@zhermes,$TERM 的当前值是什么?你使用的终端仿真器是什么?如果输出为 8,则表示你的终端当前配置不支持除 8 种 ANSI 颜色(以及它们的亮/粗体对应项,总共 16 种)之外的任何颜色。因此,像“tomato”这样的颜色可能会被智能地解析为“red”。如果可能的话,请考虑安装支持 256 种颜色的 xterm。此外,此页面 可能会有所帮助。你可以尝试设置不同的 $TERM 值,看看 tput colors 输出是否会改变。 - Greg E.
3
@zhermes,“终端”和“终端仿真器”之间的区别是一个迂腐且晦涩的命名问题;如果你真的感兴趣,可以参考相关的维基百科页面。无论如何,我建议解决颜色不一致的方法是在你的 ~/.screenrc 文件中添加行 term xterm-color。如果由于某种原因失败了,你还可以尝试将类似以下内容添加到你的 bash 配置文件中(即 ~/.bashrc 和其中一个 ~/.bash_profile~/.bash_login~/.profile/etc/profile 文件):export TERM='xterm-color' - Greg E.
太棒了,谢谢!在.screenrc中没有起作用,但在.bash_profile中起作用了(我的~中没有'.bashrc')。 - DilithiumMatrix
当我这样做时,它可以修复颜色,但是我的一些键盘按键(例如“end”键)在emacs中停止工作。^e(即c-e或者control-e)仍然像往常一样工作。这并不让人意外,因为我知道很多物理TTY没有包括home/end专用键(而且除非使用特定的键盘,否则Mac也没有这些键)。但仍然令人困扰。在Debian更新后,遇到了这个问题,Mate终端开始使用256种颜色。 - Wyatt Ward
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接