在 Emacs 启动时使用初始化代码启动特定的 shell



当我的守护程序emacs启动时,我想自动创建几个shell缓冲区,每个缓冲区运行一些初始化代码。

例如,在一个(带有一个名为 *foo* 的缓冲区)中,我想运行

cd devel/foo
source setup.sh

在另一个(名为*sudo*)我想运行

exec sudo -i

在(命名为 *journal* )另一个我想运行

journalctl -f

我可以把它放在我的 init.el 中

(shell "*foo*")
(shell "*sudo*")
(shell "*journal*")

它启动并命名所有缓冲区,但我不知道如何运行初始命令。请注意,我仍然希望它们是普通的交互式 shell 模式缓冲区,就好像我手动启动它们并输入初始化代码一样。

shell函数的文档(参见 C-h f shell RET)明确表示:

If a file `~/.emacs_SHELLNAME' exists, or `~/.emacs.d/init_SHELLNAME.sh',
it is given as initial input.

因此,您可以通过创建一个名为 ~/.emacs.d/init_*foo*.sh 的文件并包含以下内容来获得所需的内容:

cd devel/foo
source setup.sh

其他文件依此类推。

当心文件名中的"*"!

如果你想用"标准"的emacs-lisp代码来做到这一点,你可能想看看钩子变量:

C-h v comint-input-sender RET

哪些标准内容是函数:

C-h f comint-simple-send RET

最新更新