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

3
我在使用Emacs时经常需要一个shell。最近,我一直在尝试从shell转换到eshell,这样无论平台如何,我都能使用相同的命令。
首先要做的事情之一是自定义我的提示符以匹配我的bash提示符。为此,我正在自定义eshell-prompt-function。我唯一还缺少的是当前命令计数和上次返回代码。我可以通过将PS1设置为例如!和$?来在bash中实现这一点。对于后者,我已经尝试过(eshell/echo "$?"),但它不起作用(尽管如果我在eshell中手动执行该命令,则会起作用)。
编辑: 我当前bash提示符的部分示例如[~][501:0],其中501是当前命令编号(因此如果我输入命令并按Enter键,它将显示502),而0是返回代码。

1
这篇文章可能会有所帮助,虽然我不使用emacs,对你尝试做什么有点困惑。你能够提供一些你希望 PS1 显示的示例吗? - Reinstate Monica Please
编辑后添加一个例子。我稍后会仔细查看链接,尽管乍一看似乎主要适用于bash,所以我不确定它是否能帮助我切换到eshell - Scott Weldon
1个回答

4
这将返回代码放入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 可以提供的任何内容。


1
为计数:定义一个名为my-eshell-command-count的变量和一个将其增加的函数。将该钩子添加到eshell-after-prompt-hook列表中,并在您的提示函数中实现它。这是我的提示符:http://i.imgur.com/VSiFDDX.png - Jordon Biondo
1
太棒了,它有效了,谢谢!@JordonBiondo,你有像那样创建命令计数器的elisp吗?如果没有,我可能会尝试自己实现它,当我这样做时,会在这里发帖。 - Scott Weldon

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