外壳和颜色输出

时间:2020-08-18 13:00:28

标签: colors emacs eshell

在使用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上,以查看是否可以在启动期间强制执行它,但实际上没有任何作用。

0 个答案:

没有答案