如何在eshell提示符中包含返回代码和命令编号?

时间:2014-06-22 22:42:00

标签: bash emacs eshell

使用Emacs时我经常需要shell。最近,我一直在尝试从shell切换到eshell,这样无论平台如何,我都可以使用相同的命令。

我想要做的第一件事就是自定义我的提示以匹配我的bash提示符。为此,我正在自定义eshell-prompt-function。我唯一缺少的是当前命令计数和最后一个返回码。我可以通过将bash设置为PS1\!执行此操作。分别为$?(eshell/echo "$?")。我已经为后者尝试了bash,但它不起作用(尽管如果我在eshell中手动执行命令它可以工作)。

修改
我当前[~][501:0]提示的哪一部分的示例是501,其中Enter是当前命令编号(因此,如果我键入命令并点击502,它将会显示0),{{1}}是返回码。

1 个答案:

答案 0 :(得分:3)

这会将返回代码放入eshell提示符中:

(setq eshell-prompt-function
      (lambda ()
        (format "[%s][%s] "
                (abbreviate-file-name (eshell/pwd))
                eshell-last-command-status)))

我无法找到任何简单的方法将最新的命令编号放入提示中 - 它可能不太有用,因为eshell似乎使用环来命令历史记录,因此在某些时候计数器将是卡在128,之前的所有提示都是不准确的。

请注意,您还应该更新eshell-prompt-regexp以匹配eshell-prompt-function可能出现的任何内容。