无法在Mac上使用Emacs打开多个文件

时间:2014-11-02 17:45:57

标签: macos emacs terminal

我可以用Emacs打开一个文件,没问题。但我已经习惯了Linux上的Emacs,键入emacs test.cpp &会打开一个新的Emacs帧,让终端空闲。但是,在OS X上,当我尝试使用emacs test.cpp &打开一个新帧时,终端显示已创建一个进程,但窗口无法弹出。如果我按 Ctrl + C ,终端显示"已停止"但我看到该进程仍在运行,因为我可以在任务监视器中看到它

如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:1)

这里的问题是Linux上的命令emacs通常只是Emacs二进制文件本身,它会打开一个新的框架(即Emacs代表X11或其他GUI窗口)除非在命令行中指定-nw;相反,Homebrew提供的emacs命令是一个调用/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs -nw "$@"的shell脚本(替换为24.3安装的版本)。因此,Homebrew版本作为终端应用程序启动。

你可以创建一个只运行/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs "$@"的shell脚本,它会表现得像你期望的那样,除了你将推出一个全新的Mac应用程序实例,这会导致额外的Emacs图标出现在Dock上。这样的事情并没有被考虑过" Mac-like,"但它不是世界末日。

在不同操作系统中大量使用的备用解决方案是使一个Emacs进程成为服务器,然后使用emacsclient从命令行打开文件。 Emacsclient可以打开当前终端中的文件,新框架(GUI窗口)或现有的Emacs实例。对于要作为服务器运行的Emacs实例,只需要在其中运行M-x server-start,或将(server-start)放在init文件中(〜/ .emacs或〜/ .emacs.d / init.el )。

我的Emacs配置有这个片段,当我启动GUI应用程序时会自动启动服务器模式:

(when (display-graphic-p)
  (server-start))

然后,一旦Emacs运行(您可以在系统偏好设置>用户和组>登录项目中登录后进行自动启动),请键入emacsclient -nw test.cpp以在终端中打开文件,或{{1在现有框架中打开它,或emacsclient test.cpp &打开一个新框架。 (请注意,如果在现有框架中打开它,则使用emacsclient -c test.cpp &关闭缓冲区而不关闭框架,而不是C-x #。)

请注意,我刚刚给出的终端C-x C-c命令并没有使用emacsclient,但GUI的命令却没有。命令行末尾的&将进程置于后台,这意味着它不会独占终端。无论出于何种原因(可能因为在后台运行全屏终端应用程序并不明智),当您使用&调用Emacs的终端版本时,它只是暂停自身。如果你在Emacs中按&,也会发生同样的事情。要将其恢复到前台,请键入C-z(实际上您可以有多个后台进程,在这种情况下fg只会选择最新的进程,除非您指定了作业说明符;如果您对详细信息感兴趣,请参阅bash的手册页(fg)并搜索man bash