当我的守护程序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