在使用eshell时,关于shell输出的颜色实现,我面临一个奇怪的行为。这是我的.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
语句和initial-buffer-choice
。由于某种原因,当我没有注释initial-buffer-choice
时,TERM
变量将设置为dumb
。另一方面,如果我评论initial-buffer-choice
并在启动后打开eshell,那么一切都会按预期进行。
我试图将setenv
执行作为钩子添加到eshell-mode和emacs-startup上,以查看是否可以在启动期间强制执行它,但实际上没有任何作用。