使用cwd从终端启动emacs时启动eshell

时间:2014-05-22 17:31:15

标签: emacs terminal eshell

我在 init.el 中添加了一个钩子,以便在eshell上启动Emacs。

;;start on eshell
(add-hook 'emacs-startup-hook 'eshell)

问题是,我经常从终端启动Emacs,并希望将eshell工作目录作为我启动Emacs的终端的工作目录。

让我们说我在目录X中,然后启动Emacs

~/X $ emacs

我希望这种情况发生

Welcome to the Emacs shell
~/X $ 

目前,我已添加

(cd "~")

到我的 init.el ,作为临时解决方案(将emacs路径更改为home),但这还不够好。

修改

我想在其gui中运行Emacs。

修改2

如果不使用open -a emacs启动应用程序,Chris的答案就有效。但只是改为使用可执行路径。

1 个答案:

答案 0 :(得分:2)

当函数display-graphic-p返回nil时,您可以检测到Emacs正在终端中运行,并且您可以从default-directory变量获取从中调用Emacs的目录。

类似

(when (not (display-graphic-p))
  (cd default-directory)
  (eshell))
你的init中的

应该更改为“当前”目录,然后在从终端调用Emacs时启动eshell

如果您始终希望调用eshell,则应该可以从代码中删除(eshell),并保留emacs-startup-hook

修改:按this answer中的建议调用函数window-system替换变量display-graphic-p

编辑2:如果您只想修改emacs-startup-hook以更改为从中调用Emacs的目录,然后启动eshell(无论窗口系统如何),你可以使用像

这样的东西
(add-hook 'emacs-startup-hook
          (lambda ()
            (cd default-directory)
            (eshell)))