Colors eshell与色彩输出

Colors eshell与色彩输出,colors,emacs,eshell,Colors,Emacs,Eshell,在使用eshell时,我面临着一种奇怪的行为,即外壳输出颜色的实现。这是my.emacs的内容: (require 'xterm-color) (require 'eshell) (add-hook 'eshell-before-prompt-hook (lambda () (setq xterm-color-preserve-properties t))) (add-to-list 'eshell-preoutput-filter-function

在使用eshell时,我面临着一种奇怪的行为,即外壳输出颜色的实现。这是my.emacs的内容:

(require 'xterm-color)
(require 'eshell)
(add-hook 'eshell-before-prompt-hook
          (lambda ()
            (setq xterm-color-preserve-properties t)))

(add-to-list 'eshell-preoutput-filter-functions 'xterm-color-filter)
(setq eshell-output-filter-functions (remove 'eshell-handle-ansi-color eshell-output-filter-functions))
(setenv "TERM" "xterm-256color")
奇怪的是,在emacs初始化后,eshell没有正确显示输出(例如git或pytest)上的颜色。但是,它不会引发任何错误,在初始化之后,我用C-x C-e对init文件的这一部分进行评估,在我这样做并重新启动eshell之后,它会像我预期的那样正常工作

我不明白为什么只有在emacs初始化后执行它才能工作,但不会对.emacs产生预期的效果

我在.emacs上有行(setq initial buffer choice'eshell),但仅在上面的部分之后

任何关于为什么会发生这种情况的见解都会有所帮助。谢谢,

编辑1

我将问题缩小到
setenv
语句和
初始缓冲区选择
。出于某种原因,当我取消了
初始缓冲区选择
的注释时,
术语
变量被设置为
dumb
。另一方面,如果我在启动后注释
初始缓冲区选择
并打开eshell,那么一切都会按预期进行


我尝试将
setenv
执行作为一个钩子添加到eshell模式和emacs启动中,以查看是否可以在启动过程中的其他点强制执行,但没有真正起作用。

emacs应发出错误“eshell输出筛选器函数无效”在启动时,因为变量是由esh-mode.el定义的,而eshell.el没有加载它。这是最奇怪的,我用-q选项打开emacs,只对上面显示的代码进行了评估,它不会产生任何错误,如果我打开eshell,它就工作得很好。但是,在init文件中,它不起作用,消息缓冲区中也没有关于eshell的消息。Emacs应该在启动时发出错误“eshell output filter FUNCES is void”,因为变量是由esh-mode.el定义的,eshell.el没有加载它。这是最奇怪的,我用-q选项打开了emacs,只对上面显示的代码进行了评估,它不会引起任何错误,如果我打开eshell,它会工作得很好。但是,在init文件中,它不起作用,并且消息缓冲区中也没有关于eshell的消息。