我在使用Emacs时经常需要一个shell。最近,我一直在尝试从shell
切换到eshell
,这样我就可以在任何平台上使用相同的命令。
我想做的第一件事是自定义我的提示符以匹配我的bash
提示符。为此,我正在定制eshell-prompt-function
。我仍然缺少的唯一东西是当前的命令计数和最后的返回代码。我可以通过将PS1
分别设置为例如!
和$?
来在bash
中做到这一点。我已经尝试了(eshell/echo "$?")
用于后者,但它不起作用(尽管如果我在shell中手动执行命令它会起作用)。
当前bash
提示符的一个示例是[~][501:0]
,其中501
是当前命令号(因此,如果我键入命令并点击Enter
,它将显示502
), 0
是返回代码。
这将返回代码放入shell提示符:
(setq eshell-prompt-function
(lambda ()
(format "[%s][%s] "
(abbreviate-file-name (eshell/pwd))
eshell-last-command-status)))
我找不到任何简单的方法将最新的命令号放入提示符中——而且它可能用处不大,因为shell似乎使用一个环来记录命令历史,所以在某些时候计数器会卡在128,并且之前的所有提示符都是不准确的。
请注意,您还应该更新eshell-prompt-regexp
以匹配eshell-prompt-function
可以提出的任何内容。