2014-11-02 73 views
0

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

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

+0

您使用的是哪个版本的emacs? OSX附带的非GUI版本(位于'/ usr/bin/emacs'),还是您安装了GUI版本?首先你说你调用'emacs test.cpp'(这是非GUI版本),但是你会说弹出一个窗口(GUI版本)。 – Juancho 2014-11-02 20:17:38

+0

'&'是用于在后台创建新进程;它与打开零个,一个或多个文件无关。要让Emacs回到前台,请键入'fg'。要打开多个文件,请尝试'emacs test.cpp test2.cpp test3.cpp'等。 – echristopherson 2014-11-03 00:46:34

+0

@Juancho我用自制软件安装了Emacs(24.4)的GUI版本,并修改了PATH。当我输入“哪个emacs”时,它显示“/ usr/local/bin/emacs”,所以我认为每次都会调用Emacs的这个版本,但我不确定。顺便说一句,我没有用OSX删除旧版本。 – user3156285 2014-11-03 04:02:28

回答

1

这里的问题是,在Linux命令emacs一般只是Emacs的二进制文件本身,这将打开一个新的帧(这是与Emacs说话X11或其他GUI窗口),除非您指定的命令行上-nw;相比之下,Homebrew提供的emacs命令是一个shell脚本,它调用/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs -nw "[email protected]"(替换为​​安装的版本)。所以Homebrew版本作为终端应用程序启动。

您可以制作一个只运行/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs "[email protected]"的shell脚本,它的行为会与您期望的相似,只不过您会启动一个全新的Mac应用程序实例,这会导致额外的Emacs图标出现码头。这样的事情不被认为是“像Mac一样”,但它不是世界末日。

另一种在不同操作系统中使用很多的解决方案是使一个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打开终端中的文件,或者在现有帧中打开emacsclient test.cpp &,或打开emacsclient -c test.cpp &以打开新帧。 (请注意,如果您在现有框架中打开它,你用C-x #关闭缓存,但不关闭框架,而不是C-x C-c

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

+0

它的工作原理,非常感谢!看起来我需要习惯这种风格,因为我总是用C-x C-c杀死“服务器”。 – user3156285 2014-11-04 06:24:39

相关问题